检查变量挑战是否在有效值列表中

1 投票
2 回答
17 浏览
提问于 2025-04-14 18:34

我现在在使用Windows 11家庭版,Python版本是3.12.2。我正在玩一个石头剪刀布的程序。我想检查用户输入的内容是否是有效的选择。我试过用try / except和if / in这两种方法。如果用户输入的不是有效选项,我希望能重新开始这个循环。我把当前的尝试注释掉了。除此之外,程序运行得还不错。有什么建议吗?

import random
valid_values = ["rock", "paper", "scissors", "quit"]

victories = [
    ["paper", "rock"],
    ["rock", "scissors"],
    ["scissors", "paper"]
    ]

# create while loop until user exits
while True:
    # prompt user to challenge computer to a game
    user_input = input("Choose rock, paper, scissors, or quit ")
    challenge = user_input.lower()
    # check if user_input is valid
    # if challenge in valid_values:
    #    continue
    # else:
    #    print("this is not a valid value")
    if challenge == "quit":
        print("OK, bye")
        break
    else:
        # generate random rock, paper, scissors
        guess = random.choice(valid_values[0:2])
        # determine winner and display result
        if challenge == guess:
            print("Tie!")
        elif [challenge, guess] in victories:
            print(f"The {challenge} beats the {guess}, you win!")
        else:
            print(f"The {guess} beats the {challenge}, you lose!")type here

如果输入无效,我希望能重新开始这个循环。但我遇到的问题是,要么我同时得到无效的结果和胜负,要么我无法退出。可能是因为使用了continue的原因。

2 个回答

0

你注释掉的代码差不多,但逻辑正好相反。它应该只有在输入的值不是有效值时才继续循环:

if challenge not in valid_values:
    print("this is not a valid value")
    continue
1

这里有一个包含嵌套的 while 循环的代码修改:

import random
valid_values = ("rock", "paper", "scissors", "quit")
# stats are win. lose, draw
stats = [0,0,0]
victories = [
    ["paper", "rock"],
    ["rock", "scissors"],
    ["scissors", "paper"]
    ]
running = True

while running:
    challenge = None
    # generate random rock, paper, scissors
    guess = random.choice(valid_values[0:2])
    # prompt user to challenge computer to a valid game
    while challenge not in valid_values:
        challenge = input("Choose rock, paper, scissors, or quit: ").lower()
    if challenge == "quit":
        print("OK, bye")
        running = False
    else:
        # determine winner and display result
        if challenge == guess:
            stats[2] += 1
            print("Tie! Try again")
        elif [challenge, guess] in victories:
            stats[0] += 1
            print(f"The {challenge} beats the {guess}, you win!")
        else:
            stats[1] += 1
            print(f"The {guess} beats the {challenge}, you lose!")

    print(f"{stats[0]} wins, and {stats[1]} losses and {stats[2]} ties,")`

撰写回答