@JAke134

Как поменять for i in range на while?

Пишу консольную игру "Крестики Нолики".
В коде есть цикл range. И в нем есть строчка, где если пользователь ставит знак (крестик или нолик) в то место где уже стоит другой знак, то он пропускает ход.
Мне нужно изменить так, что бы когда пользователь ставил знак уже на занятое место, то ему говорили, что это место занято, и он попробовал поставить крестик или нолик в другую позицию.

def winner():
    if area[0][0] == 'X' and area[0][1] == 'X' and area[0][2] == 'X':
        return 'X'
    elif area[1][0] == 'X' and area[1][1] == 'X' and area[1][2] == 'X':
        return 'X'
    elif area[2][0] == 'X' and area[2][1] == 'X' and area[2][2] == 'X':
        return 'X'
    elif area[0][0] == 'X' and area[1][0] == 'X' and area[2][0] == 'X':
        return 'X'
    elif area[0][1] == 'X' and area[1][1] == 'X' and area[2][1] == 'X':
        return 'X'
    elif area[0][2] == 'X' and area[1][2] == 'X' and area[2][2] == 'X':
        return 'X'
    elif area[0][0] == 'X' and area[1][1] == 'X' and area[2][2] == 'X':
        return 'X'
    elif area[0][2] == 'X' and area[1][1] == 'X' and area[2][0] == 'X':
        return 'X'

    if area[0][0] == '0' and area[0][1] == '0' and area[0][2] == '0':
        return '0'
    elif area[1][0] == '0' and area[1][1] == '0' and area[1][2] == '0':
        return '0'
    elif area[2][0] == '0' and area[2][1] == '0' and area[2][2] == '0':
        return '0'
    elif area[0][0] == '0' and area[1][0] == '0' and area[2][0] == '0':
        return '0'
    elif area[0][1] == '0' and area[1][1] == '0' and area[2][1] == '0':
        return '0'
    elif area[0][2] == '0' and area[1][2] == '0' and area[2][2] == '0':
        return '0'
    elif area[0][0] == '0' and area[1][1] == '0' and area[2][2] == '0':
        return '0'
    elif area[0][2] == '0' and area[1][1] == '0' and area[2][0] == '0':
        return '0'
    return '*'


area = [['*', '*', '*'],
        ['*', '*', '*'],
        ['*', '*', '*']]

step = 0
for i in range(9):
    step += 1
    print(f'Ход {step}')

    if step % 2 == 1:
        print('Ходят крестики')
        sumbol = 'X'
    else:
        print('Ходят нолики')
        sumbol = '0'

    row = int(input('Введите номер строки: (от 0 до 2) '))
    coulumn = int(input('Введите номер столбца: (от 0 до 2) '))

    if area[row][coulumn] == '*':
        area[row][coulumn] = sumbol
    else:
        print('Это место занято, вы пропускаете ход!')
        continue
    for j in area:
        print(j)

    if winner() == 'X':
        print('Победили крестики!')
        break
    elif winner() == '0':
        print('Победили нолики!')
        break
    elif step == 9 and winner() == '*':
        print('Ничья!')
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Изменяй. Разрешаю.

Если серьёзно, то учебные задачи надо решать самостоятельно, иначе какой смысл браться?
Но тут достаточно понимать, что делает for i in range(x): ...
Это близкий эквивалент такого кода:
i = 0
while i < x:
    ...  # тут тело цикла for
    i += 1

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы