石头剪刀布游戏输入校验函数首次输入无效时返回None的问题咨询
解决石头剪刀布输入校验函数返回None的问题
你碰到的这个问题其实是递归调用里很容易踩的小坑——你在递归调用check(x)的时候,没有把它的返回值传递出去。
咱们来拆解一下问题流程:
- 第一次输入无效(比如"A"),进入else分支,重新获取输入"s",然后调用
check("s") - 内层的
check("s")检测到输入有效,返回了"s",但外层的else分支只是调用了这个函数,没有把返回值return出去 - 外层的
check函数执行完else分支后,没有任何return语句,Python函数默认会返回None,这就是你最后看到的结果
修正后的代码
def check(x): x = str.lower(x) valid_input = ['r','p','s'] print("Input value: "+str(x)) #simple check before if-else if x in valid_input: return x #valid input, return x else: print("Wrong Input!!!") x = input("Enter r/p/s:") #taking new input return check(x) # 这里要return递归调用的结果! x = input("Enter choice: ") #Input value x = check(x) #Call check function print(x)
关键修改点
在else分支里,把原来的check(x)改成return check(x),这样内层递归函数返回的有效输入就能被传递回外层,最终整个check函数就能返回正确的结果了。
测试验证
输入选择:A
输出就会变成:
Input value: a Wrong Input!!! Enter r/p/s:s Input value: s s
这样就能得到你期望的有效输入返回值啦。
内容的提问来源于stack exchange,提问作者Abhijith
相关产品推荐
相关产品推荐

