0

我想编写一个带有评分系统的石头剪刀布游戏,该系统允许用户希望再次玩游戏,并且分数会增加而不是重新开始为 0。

我的代码在这里:https ://pastebin.com/eRqEuwtY (也附在此消息中)

感谢您的帮助。

import random
score1 = int(0)
score2 = int(0)

def main():
    while True:

        player = input('What do you choose to play (R, P, S)? ')
        computer = random.choice(["R", "P", "S"])
        print("You chose", (player), "and the computer chose", (computer))

        if computer == player:
            print("It's a tie")
            print("Score: You =", score1, "Computer =", score2)

        if computer == "R" and player == "S":
            print("Computer wins")
            print("Score: You =", score1, "Computer =", score2 + 1)

        if computer == "P" and player == "R":
            print("Computer wins")
            print("Score: You =", score1, "Computer =", score2 + 1)

        if computer == "S" and player == "P":
            print("Computer wins")
            print("Score: You =", score1, "Computer =", score2 + 1)

        if computer == "S" and player == "R":
            print("You won")
            print("Score: You =", score1 + 1, "Computer =", score2)

        if computer == "R" and player == "P":
            print("You won")
            print("Score: You =", score1 + 1, "Computer =", score2)

        if computer == "P" and player == "S":
            print("You won")
            print("Score: You =", score1 + 1, "Computer =", score2)

        play_again = input("Would you like to play again? Y/N ")

        if play_again == "Y":
            main()
        else:
            print("You scored", score1, "and the computer scored", score2)
            exit()

main()
4

2 回答 2

1

你的问题是,如果你赢了,你会打印分数 + 1。这不会将新分数保存到变量中!

例子:

print("You won")
score += 1
print("Score: You =", score1, "Computer =", score2)

代码中的另一个问题是,每次用户想要再次播放时,您都会再次调用 main 函数。这是无限递归,如果达到递归限制,将导致错误。最好这样做:

def main():
    play_again = "Y"
    while play_again == "Y":
        #code...
        play_again = input("Would you like to play again? Y/N ")
    print("You scored", score1, "and the computer scored", score2)

main()
于 2018-11-21T11:45:10.690 回答
0

正如 Jasper 指出的那样,您需要将新分数保存到相应的变量中。这是您的代码的返工,包括一些改进:

import random


def main():

    SYMBOLS = ["R", "P", "S"]
    INPUTS_YES = ["Y", "YES", "I LOVE THIS GAME SO MUCH"]
    INPUTS_NO = ["N", "NO", "PLZ STOP THIS"]
    INPUTS_ALL = INPUTS_YES + INPUTS_NO

    keep_playing = True
    score_player = 0
    score_computer = 0

    while keep_playing:

        symbol_player = input("What do you choose to play? (R, P, S)").upper()
        while not symbol_player in SYMBOLS:
            print("invalid input")
            symbol_player = input("What do you choose to play? (R, P, S)").upper()

        symbol_computer = random.choice(SYMBOLS)
        print("You chose ", symbol_player, " and the computer chose ", symbol_computer)

        difference = (SYMBOLS.index(symbol_player) - SYMBOLS.index(symbol_computer)) % 3

        if difference == 0:
            print("It's a tie")    

        if difference == 1:
            score_player += 1
            print("You won")    

        if difference == 2:
            score_computer += 1
            print("Computer won")

        print("Score: You = ", score_player, ", Computer = ", score_computer)

        play_again = input("Would you like to play again? Y/N").upper()

        while not play_again in INPUTS_ALL:
            print("invalid input")
            play_again = input("Would you like to play again? Y/N").upper()

        if play_again in INPUTS_NO:
            keep_playing = False

    print("You scored", score_player, "and the computer scored", score_computer)


if __name__ == "__main__":
    main()
于 2018-11-21T13:20:35.503 回答