Администраторы группы

  • Аватар

Олимпиада по информатике. Готовимся побеждать!

Открытая группа активность: 4 ч., 5 мин. назад

Группа для тех, кто намеревается побеждать на районных и региональных олимпиадах по информатике.
Здесь можно будет найти олимпиадные задания, задачи повышенной сложности, обсудить оптимальные алгоритмы решений
Памятка для участников олимпиады

Сайт Информатикс – регистрирууемся, решаем, продвигаемся в рейтинге

Программирование на Python. (записей: 99)

← Форум группы   Все форумы
  • Аватар root - 3 мес., 1 нед. назад:

    Кстати о крестиках-ноликах: рабочую реализацию в востребованном формате «капчи» можно заценить тут http://www.it-simple.ru/?p=1767
    Материал статьи тоже представляет определённый интерес.

  • Аватар Alcaine - 3 мес., 1 нед. назад:

    Код работает корректней работает в какой-то части, ведь крестик не присваивается к номеру ячейки…

    board = [[1, 2, 3, 4, 5, 6, 7, 8, 9], ["X", "O"]]
    len(board)
    print("_______________")
    s = 0
    
    def boardz(board):
        for i in range(3):
            print("|", board[0][i * 3], "|", board[0][i * 3 + 1], "|", board[0][i * 3 + 2], "|")
            print("_______________")
    
    print(boardz(board))
    
    print("Введите числа ячейку, куда вы поставите (Х)")
    playeranswer = int(input())
    
    def player1(playeranswer):
        while s == 0:
            if playeranswer < 1 or playeranswer > 9:
                print("Введи корректный номер ячейки")
                playeranswer = int(input())
            else:
                s = 1
        if playeranswer > 1 and playeranswer < 9:
            for i in range(1, 9):
                if board[i] == playeranswer:
                    board[playeranswer-1] = board[1][0]
        else:
            while board[playeranswer-1] == board[1][1]:
                print("Эта ячейка уже занята. Выберите другую.")
                playeranswer = int(input())
    
    print(boardz(board))
    
  • Аватар prepod - 3 мес., 1 нед. назад:

    Ну да. Крестик не садится в нужное место
    На допе разбирали работающий простой вариант. Но идти прямым путем Alcaine не желает)

  • Аватар Alcaine - 3 мес., 1 нед. назад:

    Нет победы, и пару багов еще присутствует.

    board = [[1, 2, 3, 4, 5, 6, 7, 8, 9,], ["X", 0]]
    len(board)
    print("_______________")
    s = 0
    k = 0
    turn=0
    
    def boardz(board):
        for i in range(3):
            print("|", board[0][i * 3], "|", board[0][i * 3 + 1], "|", board[0][i * 3 + 2], "|")
            print("_______________")
    
    print(boardz(board))
    
    while turn < 9:
        print("Ход первого игрока. Введите номер ячейки, куда вы поставите (Х)")
        playeranswer = int(input())
    
        while s == 0:
            if playeranswer < 1 or playeranswer > 9:
                print("Введите корректный номер ячейки")
                playeranswer = int(input())
            else:
                 s = 1
        s=0
        if playeranswer > 0 and playeranswer < 10:
            board[0][playeranswer-1]=board[1][0]
        else:
            while playeranswer - 1 == board[playeranswer1-1] or playeranswer - 1 == board[playeranswer-1]:
                print("Эта ячейка уже занята. Выберите другую.")
                playeranswer = int(input())
        print(boardz(board))
        turn=turn+1
    
        print("Ход второго игрока. Введите номер ячейки, куда вы поставите (0)")
        playeranswer1 = int(input())
    
        while k == 0:
            if playeranswer1 < 1 or playeranswer1 > 9:
                print("Введите корректный номер ячейки")
                playeranswer1 = int(input())
            else:
                k = 1
        k=0
        if playeranswer1 > 0 and playeranswer1 < 10:
            board[0][playeranswer1-1]=board[1][1]
        else:
            while playeranswer1 - 1 == board [playeranswer-1] or playeranswer1 - 1 == board [playeranswer1 - 1]:
                print("Эта ячейка уже занята. Выберите другую.")
                playeranswer1 = int(input())
        print(boardz(board))
        turn=turn+1
    
  • Аватар Alcaine - 3 мес., 1 нед. назад:

    КПД нулевой, результат тоже.

    board = [[1, 2, 3, 4, 5, 6, 7, 8, 9,], ["X", 0]]
    len(board)
    print("_______________")
    s = 0
    k = 0
    turn=0
    z=0
    w=0
    
    def boardz(board):
        for i in range(3):
            print("|", board[0][i * 3], "|", board[0][i * 3 + 1], "|", board[0][i * 3 + 2], "|")
            print("_______________")
    
    print(boardz(board))
    
    while turn < 9:
        print("Ход первого игрока. Введите номер ячейки, куда вы поставите (Х)")
        playeranswer = int(input())
    
        while s == 0:
            if playeranswer < 1 or playeranswer > 9:
                print("Введите корректный номер ячейки")
                playeranswer = int(input())
            else:
                 s = 1
        s=0
        if playeranswer > 0 and playeranswer < 10:
            board[0][playeranswer - 1] = board[1][0]
            while w == 0:
                if board[0][playeranswer - 1] == board[1][1]:
                    print("Эта ячейка уже занята. Выберите другую.")
                    playeranswer = int(input())
                else:
                    w = 1
        w=0
        print(boardz(board))
        turn=turn+1
    
        print("Ход второго игрока. Введите номер ячейки, куда вы поставите (0)")
        playeranswer1 = int(input())
    
        while k == 0:
            if playeranswer1 < 1 or playeranswer1 > 9:
                print("Введите корректный номер ячейки")
                playeranswer1 = int(input())
            else:
                k = 1
        k=0
        if (playeranswer1 > 0 and playeranswer1 < 10):
            board[0][playeranswer1 - 1] = board[1][1]
    
            while z==0:
                if board[0][playeranswer1 - 1] == board[1][0]:
                    print("Эта ячейка уже занята. Выберите другую.")
                    playeranswer1 = int(input())
                else:
                    z=1
        z=0
        print(boardz(board))
        turn=turn+1
    
  • Аватар Alcaine - 3 мес., 1 нед. назад:
    board = [[1, 2, 3, 4, 5, 6, 7, 8, 9], ["X", 0]]
    len(board)
    print("_______________")
    s=0
    k = 0
    turn = 0
    z = 0
    w = 0
    
    def boardz(board):
        for i in range(3):
            print("|", board[0][i * 3], "|", board[0][i * 3 + 1], "|", board[0][i * 3 + 2], "|")
            print("_______________")
    
    print(boardz(board))
    
    while turn < 9:
        print("Ход первого игрока. Введите номер ячейки, куда вы поставите (Х)")
        playeranswer = int(input())
    
        while z == 0:
            if playeranswer < 1 or playeranswer > 9:
                print("Введите корректный номер ячейки")
                playeranswer1 = int(input())
            else:
                break
        if playeranswer >0 and playeranswer < 10 :
            board[0][playeranswer - 1] = board[1][0]
            for i in range (1,9):
                if (board[0][i]== board[1][0]) and (board[0][i]==board[0][playeranswer-1]) :
                    while w==0:
                        print("Эта ячейчка уже занята. Выберите другую.")
                        playeranswer=int(input())
    
                else:
                     w=1
        w=0
        print(boardz(board))
        turn = turn + 1
    
        print("Ход второго игрока. Введите номер ячейки, куда вы поставите (0)")
        playeranswer1 = int(input())
    
        while k == 0:
            if playeranswer1 < 1 or playeranswer1 > 9:
                print("Введите корректный номер ячейки")
                playeranswer1 = int(input())
            else:
                break
        if playeranswer1 >0 and playeranswer1 < 10:
            board[0][playeranswer1 - 1] = board[1][1]
            for i in range (1,9):
                if (board[0][i]== board[1][0]) and (board[0][i]==board[0][playeranswer1-1]) :
                    while s==0:
                            print("Эта ячейчка уже занята. Выберите другую.")
                            playeranswer1=int(input())
                else:
                    s=1
        s=0
        print(boardz(board))
        turn = turn + 1
    
  • Аватар prepod - 3 мес., 1 нед. назад:

    Нормально. Играть вполне можно если вводить корректные данные)
    Поверка корректности ходов пока еще не работает

  • Аватар Alcaine - 3 мес. назад:

    Сделал функции для победы.
    Выдает ошибку на 37 строчке кода.

    board = [[1, 2, 3, 4, 5, 6, 7, 8, 9], ["X", "O"]]
    len(board)
    print("_______________")
    s = 0
    turn = 0
    z = 0
    
    def boardz(board):
        for i in range(3):
            print("|", board[0][i * 3], "|", board[0][i * 3 + 1], "|", board[0][i * 3 + 2], "|")
            print("_______________")
    
    def win(board):
        combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8)(1, 5, 9), (3, 5, 7))
        for playeranswer in combination:
            if board[playeranswer[0]] == board[playeranswer[1]] == board[playeranswer[2]]:
                print("Игрок первый выиграл.")
    
    def win1(board):
        combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8)(1, 5, 9), (3, 5, 7))
        for playeranswer1 in combination:
            if board[playeranswer1[0]] == board[playeranswer1[1]] == board[playeranswer1[2]]:
                print("Игрок второй выиграл.")
    
    print(boardz(board))
    
    while turn < 9:
        while s == 0:
            playeranswer = int(input("Куда поставите" + board[1][0] + "?: "))
            try:
                playeranswer = int(playeranswer)
            except:
                print("Вы ввели текст.")
                continue
    
            if playeranswer >= 1 or playeranswer <= 9:
                if (str(board[playeranswer - 1] not in board[1][0] and board[1][1])):
                    board[playeranswer - 1] = board[1][0]
                    s = 1
                else:
                    print("Эта ячейка уже занята. Выберите другую.")
            else:
                print("Введите корректный номер ячейки.")
        print(boardz(board))
        s = 0
        turn = turn + 1
        while z == 0:
            playeranswer1 = int(input("Куда поставите" + board[1][1] + "?: "))
            try:
                playeranswer1 = int(playeranswer1)
            except:
                print("Вы ввели текст.")
                continue
            if playeranswer1 >= 1 and playeranswer1 <= 9:
                if (str(board[playeranswer1 - 1] not in board[1][0] and board[1][1])):
                    board[playeranswer1 - 1] = board[1][1]
                    z = 1
                else:
                    print("Эта ячейка уже занята. Выберите другую")
            else:
                print("Введите корректный номер ячейки.")
        z = 1
        turn = turn + 1
        print(boardz(board))
    
  • Аватар Alcaine - 2 мес., 4 нед. назад:
    board = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    len(board)
    print("_______________")
    s = 0
    turn = 0
    z = 0
    
    def boardz(board):
        for i in range(3):
            print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
            print("_______________")
    
    print(boardz(board))
    
    while turn <= 9:
        while s == 0:
            playeranswer = int(input("Куда поставите Х ?: "))
            if playeranswer >= 1 or playeranswer <= 9:
                if (str(board[playeranswer - 1]) not in "XO"):
                    board[playeranswer - 1] = 'X'
                    s = 1
                    turn = turn + 1
                else:
                    print("Эта ячейка уже занята. Выберите другую.")
            else:
                print("Введите корректный номер ячейки.")
        print(boardz(board))
        s = 0
        while z == 0:
            playeranswer1 = int(input("Куда поставите O ?: "))
            if playeranswer1 >= 1 and playeranswer1 <= 9:
                if (str(board[playeranswer1 - 1]) not in "XO"):
                    board[playeranswer1 - 1] = 'O'
                    z = 1
                    turn = turn + 1
                else:
                    print("Эта ячейка уже занята. Выберите другую")
            else:
                print("Введите корректный номер ячейки.")
        z = 0
        print(boardz(board))
    
    def win(board):
        combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8),(1, 5, 9), (3, 5, 7))
        for playeranswer in combination:
            if board[playeranswer[0]] == board[playeranswer[1]] == board[playeranswer[2]]:
                return board[playeranswer]
            else:
                return False
    
    def win1(board):
        combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8),(1, 5, 9), (3, 5, 7))
        for playeranswer1 in combination:
            if board[playeranswer1[0]] == board[playeranswer1[1]] == board[playeranswer1[2]]:
                return board[playeranswer1]
            else:
                return False
    
    def main(board):
        win2=False
        while not win2:
            if turn>4:
                if  win(board):
                    print("Первый игрок выиграл.")
                elif win1(board):
                    print ("Второй игрок выиграл.")
                break
            if turn==9:
                print("Ничья.")
    
  • Аватар prepod - 2 мес., 4 нед. назад:

    Уже гораздо лучше. Есть прогресс)
    Пока еще игра не завершается корректно сразу после построения выигрышной линии.
    Ждем финальную версию варианта для двух игроков.

  • Аватар Alcaine - 2 мес., 3 нед. назад:

    После 5 хода автоматическая победа. Баг.

    board = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    len(board)
    print("_______________")
    
    def boardz(board):
        for i in range(3):
            print("|", board[i * 3], "|", board[i * 3 + 1], "|", board[i * 3 + 2], "|")
            print("_______________")
    
    print(boardz(board))
    
    def chose(result):
        vr=False
        while not vr:
            playeranswer = int(input("Куда поставите " + result + " ?"))
            if playeranswer >= 1 or playeranswer <= 9:
                if (str(board[playeranswer - 1]) not in "XO"):
                    board[playeranswer - 1] = result
                    vr = True
                else:
                    print("Эта ячейка уже занята. Выберите другую.")
            else:
                print("Введите корректный номер ячейки.")
    
    def win(board):
        combination = ((1, 2, 3), (3, 6, 9), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8),(1, 5, 9), (3, 5, 7))
        for playeranswer in combination:
            if board[playeranswer[0]] == board[playeranswer[1]] == board[playeranswer[2]]:
                return board[playeranswer[0]]
            else:
                return False
    
    def main(board):
        turn=0
        win2=False
        while not win2:
            print(boardz(board))
            if turn%2==0:
                chose("X")
            else:
                chose("O")
            turn=turn+1
            if turn>4:
                if turn%2==1:
                    if win:
                        print(win,"Первый игрок выиграл")
                        break
                elif turn%2==0:
                    if win:
                        print(win,"Второй игрок выиграл")
                        break
    
            if turn==9:
                print("Ничья.")
                break
            print(boardz(board))
    main(board)
    
  • Аватар Alcaine - 2 мес., 2 нед. назад:

    Готовая игра «крестики-нолики» на двоих игроков.

    board = list(range(1,10))
    
    def boardz(board):
        print ("_____________")
        for i in range(3):
            print ("|", board[0+i*3], "|", board[1+i*3], "|", board[2+i*3], "|")
            print ("_____________")
    
    def chose(result):
        vr=False
        while not vr:
            playeranswer = int(input("Куда поставите " + result + " ?"))
            if playeranswer >= 1 and playeranswer <= 9:
                if (str(board[playeranswer - 1]) not in "XO"):
                    board[playeranswer - 1] = result
                    vr = True
                else:
                    print("Эта ячейка уже занята. Выберите другую.")
            else:
                print("Введите корректный номер ячейки.")
    
    def win(board):
        combination = ((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
        for together in combination:
            if board[together[0]] == board[together[1]] == board[together[2]]:
                return board[together[0]]
        return False
    
    def main(board):
        turn=0
        win1 = False
        while not win1:
            boardz(board)
            if turn % 2 == 0:
                chose("X")
            else:
                chose("O")
            turn=turn+1
            if turn > 4:
                if win(board):
                    print (win(board), "выиграл!")
                    break
            if turn == 9:
                print ("Ничья!")
                break
        boardz(board)
    
    main(board)
    
  • Аватар prepod - 2 мес., 2 нед. назад:

    Таки еще остались недоработки
    При вводе некорректного номера ячейки – крах

  • Аватар prepod - 2 мес., 1 нед. назад:

    С прошлого года код так и не исправлен)
    А баг ведь исправляется легко. В одном месте всего надо вместо «ИЛИ» поставить «И»

  • Аватар Alcaine - 2 мес., 1 нед. назад:

    Исправлено!!