检查变量挑战是否在有效值列表中
我现在在使用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,")`