@wer_erwq

Почему код не работает правильно?

как сделать возможности повтора игры при желание пользователя или
вчем проблема мего кода
import random


print('''
+--------------------------------------------+
|           ROCK - PAPER - SCISSORS          |
+--------------------------------------------+
                WELCOM TO THE GAME
**********************************************
*         Игра состоит из трех раундов.      *
*  Побеждает тот, кто наберет больше очков.  *
*            Обозначения в игре:             *
*             [r] - камень (rock)            *
*             [p] - бумага (paper)          *
*             [s] - ножницы (scissors)       *
**********************************************
''')

player_score = 0
comp_score = 0
player_select = ''
comp_select = ''
i = 0

print('''
==============================================
|||||||||||||||| STERT GAME ||||||||||||||||||
==============================================

''')
def convert():    
    for i in range(3):
        print(f'''
    ****************** РАУНД {i+1} *******************
        СДЕЛАЙТЕ СВОЙ ВЫБОР [r], [s] или [p]
    ''')

        while True:
            player_select = input('Ваш выбор: ')
            comp_select = random.choice('rsp')
            if player_select == 'r' or player_select == 's' or player_select == 'p':
                break
            else:
                print('                   ОШИБКА')

        if player_select == comp_select:
            print('                   НИЧЬЯ.')
        elif player_select == 'r' and comp_select == 's':
            player_score = player_score + 1
            print('                 ВЫ ВЫИГРАЛИ!')
        elif player_select == 'r' and comp_select == 'p':
            comp_score = comp_score + 1
            print('               КОМПЬЮТЕР ВЫИГРАЛ!')
        elif player_select == 'p' and comp_select == 'r':
            player_score = player_score + 1
            print('                 ВЫ ВЫИГРАЛИ!')
        elif player_select == 'p' and comp_select == 's':
            comp_score = comp_score + 1
            print('               КОМПЬЮТЕР ВЫИГРАЛ!')
        elif player_select == 's' and comp_select == 'p':
            player_score = player_score + 1
            print('                 ВЫ ВЫИГРАЛИ!')
        elif player_select == 's' and comp_select == 'r':
            comp_score = comp_score + 1
            print('               КОМПЬЮТЕР ВЫИГРАЛ!')

print('''
*********************************************
*               РЕЗУЛЬТАТ ИГРЫ              *
*********************************************
''')
print(f'Побед копьютера {comp_score}, Вашех побед {player_score}')
print('*********************************************')
if player_score > comp_score:
    print('         ПОЗДРАВЛЯЮ! ВЫ ПОБЕДИТЕЛЬ!!!')
elif player_score < comp_score:
    print('          К СОЖАЛЕНИЮ, ВЫ ПРОИГРАЛИ!')
else:
    print('                   НИЧЬЯ')
print('''
**************** КОНЕЦ ИГРЫ *****************
''')
print('Хотите сыграть еще ?')
player_v = input('Если да то нажмите (y) если нет нажмите (n)')

convert()
for i in player_v == 'n':
    break
else:       
    print('игра окончена')
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@ddgryaz
Реализацию рестарта нужно добавить в тело игры, т.е. в функцию convert в вашем случае. Я бы сделал следующим образом:
player_v = input('Если да то нажмите (y) если нет нажмите (n)')
if player_v == y:
    convert()
else:
    print('Игра окончена')

Особо в код не вчитывался, но мимолетно заметил что вы ведете счет игры, если это действительно так, то стоит обнулять его сразу после проигрыша и перед рестартом, чтобы новая игра не началась с уже имеющимся счетом.

UPD: Плюс, в вашем случае условный игрок не успеет увидеть надпись о том, что игра закончится - так как программа сразу завершит работу. Последней строкой кода запишите пустой input. Это позволит вывести надпись о конце игры и не закрыться программе моментально.

UPD2: Если мне удалось помочь вам с вашей проблемой, будьте добры выберите мой ответ как решение! Спасибо и удачи!
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
оборачиваешь в цикл и в конце спрашиваешь:
i = input('Повторить (y/n)')
А дальше, если y то на новую итерацию, иначе выход из цикла
Ответ написан
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Проблема в опечатке «STERT GAME»

Кроме того, я бы вместо множества одинаковых if предложил бы сделать матрицу состояний с ответами (например, в словаре) и одной проверкой пробегаться по всей матрице состояний. Хорошо у вас три элемента игры. А то же для 5 элементов? Десятки if?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 80 000 до 200 000 ₽
AIR Production Москва
от 170 000 до 200 000 ₽
от 2 500 до 4 000 $
25 нояб. 2020, в 19:58
35000 руб./за проект
25 нояб. 2020, в 19:13
1000 руб./в час
25 нояб. 2020, в 18:34
100000 руб./за проект