Python 中如何在 while 循环中返回用户输入值?
把 input() 放进函数的循环中,每次读取后检查输入。只有输入为 "rock"、"paper" 或 "scissors" 时,才执行 return user_input;输入无效时,提示错误并继续循环。
为什么原代码会返回无效输入?
下面的条件始终为 True:
user_input != "rock" or user_input != "paper" or user_input != "scissors"
例如,输入 "rock" 时,user_input != "paper" 为 True,整个 or 表达式也就为 True。一个字符串不可能同时等于这三个不同的值。
要判断输入是否无效,可以写成:
user_input not in ("rock", "paper", "scissors")
也可以将原条件中的 or 全部改为 and,含义相同。
break 的位置也有影响。它会立即退出当前循环,如果接着执行循环外的 return user_input,函数仍会返回无效输入。如果 return 在同一循环体内,紧跟在无条件执行的 break 后面,就不会执行到它。
原来的 input() 放在函数外,只读取一次。打印“请重试”不会重新读取输入,必须再次调用 input() 才能获得新值。
推荐写法:验证通过后直接返回
删除函数外原有的 user_input = input(...),将 make_user_choice() 替换为:
def make_user_choice():
"""Return a valid choice entered by the user."""
while True:
user_input = input("Choose one: rock, paper, scissors? ")
if user_input in ("rock", "paper", "scissors"):
return user_input
print("That is not a valid input. Please try again.")
每轮循环都会读取一次输入。输入有效时,return 直接结束整个函数,并将值返回给调用方,所以不需要再写 break。输入无效时,程序打印提示,进入下一轮循环。
调用时,接收函数的返回值:
user_choice = make_user_choice()
print("Your choice:", user_choice)
交互过程例如:
Choose one: rock, paper, scissors? rtgyhuji
That is not a valid input. Please try again.
Choose one: rock, paper, scissors? rock
Your choice: rock
如果游戏有多轮,就在每轮需要用户选择时调用 make_user_choice(),用返回值参与本轮游戏。
也可以在循环结束后返回
也可以先读取一次输入,只在输入无效时进入循环,提示用户并重新读取:
def make_user_choice():
"""Return a valid choice entered by the user."""
user_input = input("Choose one: rock, paper, scissors? ")
while user_input not in ("rock", "paper", "scissors"):
print("That is not a valid input. Please try again.")
user_input = input("Choose one: rock, paper, scissors? ")
return user_input
这里的 return 与 while 对齐。输入有效后,循环条件变为 False,程序才会执行返回。
使用时注意
上述代码只接受小写的 "rock"、"paper" 和 "scissors"。如果还希望接受 "Rock" 或前后带空格的输入,可以把读取语句改为:
user_input = input("Choose one: rock, paper, scissors? ").strip().lower()
这样返回的字符串会去除首尾空白,并转为小写。
示例使用 Python 3,复制时要保留缩进。修复输入检查后,原代码中的 wins_matchup() 还需要单独完善:它目前只判断 choice == "rock",没有根据 opponent_choice 判断胜负。
备注:内容仅供参考。
