Функция счета в бумажных ножницах python вопрос и др. - PullRequest
2 голосов
/ 03 марта 2020

Я новичок в программировании и пытаюсь создать лучшую из 5 RPS-игр для своего класса, но сталкиваюсь с несколькими проблемами ... когда я вызываю свою функцию оценки, которую я создал alternativley, она работает, но потом это делает мой в то время как l oop просто продолжает работать, когда я не вызываю функцию счета, циклы while останавливаются на 3

 def gamerps():
        import random
        YS= 0
        CS= 0
        rules = {("R", "S"), ("P", "R"), ("S", "P")}
        msgs = {"R": "rock beats scissors", "P": "paper covers rock", "S":" scissors cut paper"}
        while YS or CS <= 3:
            YM = input("R/P/S?")
            CM = random.choice(["R", "P", "S"])
            if (YM, CM) in rules:
                print ("You won! %s" % (msgs[YM]))
                YS= YS+1
                print (scorerps(YS, CS))
            elif (CM, YM) in rules:
                print ("You lost! %s" % (msgs[CM]))
                CS= CS+1
                print (scorerps(YS, CS))
            elif YM == CM:
                print ("Tie! Go again!")
            else:
                print ("ERROR, please choose R, P, or S for [R]ock [P]aper [S]cissors")

gamerps()

функция оценки работает сама по себе, и она добавляет счет во все игра rps, когда она применяется, просто перестает останавливать игру сначала до 3 ....

def scorerps(YS, CS):
        if YS==CS:
            print("scores are tied at", YS, "-", CS, "!")
        elif YS >CS:
            if YS==3:
                print("You won ", YS, "-", CS,"!")
            else:
                print("You lead ", YS, "-", CS,"!")
        elif CS>YS:
            if CS==3:
                print("Computer won ", CS, "-", YS,"!")
            else:
                print("computer leads ", CS, "-", YS,"!")

    scorerps(1, 2)

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Проверьте состояние вашего while l oop:

while YS or CS <= 3:

означает, что l oop работает до тех пор, пока YS != 0 или CS <= 3 и это, вероятно, не то, что вы хотели.

Вы, вероятно, хотели, чтобы l oop работал до тех пор, пока одна из переменных не превысит 3, поэтому вам все равно придется использовать and:

while YS <= 3 and CS <= 3:

=> Таким образом, условие становится False, когда одна переменных получает > 3

Имейте в виду, что это также означает, что вам нужно выиграть 4 раундов, чтобы выиграть игру, потому что <= 3 по-прежнему True после того, как одна из сторон выиграла свой 3-й раунд. Так что вы можете проверить на < 3

0 голосов
/ 03 марта 2020

Я думаю, что проблема может быть в том, что вы l oop:

while YS or CS <= 3:

Любое число, которое не равно нулю, является истинным. Ваше состояние l oop эквивалентно

(YS != 0) or (CS <= 3)

Это сломается, если компьютер достигнет 3, но не для человека.

...