我有一个名为getFirstPlayer的函数。用户必须输入B(黑色)或W(白色)。
一切都按预期工作,但仅在最初输入可接受的值时才有效。识别出未接受的值(W,w,B,b以外的任何值)并再次调用该函数,然后当用户输入接受的值时,不返回任何内容。
例如:
User.order(:points)
返回值:无
但是,当您在第一次尝试时输入“B”时,正确返回整数1。
A
Specify which player will move first: B for black, W for white
C
Specify which player will move first: B for black, W for white
B
我做错了什么?
答案 0 :(得分:0)
如果您在else
块中输入try
子句,则不会返回任何内容。
(这不是你应该使用递归的东西。)
更明智的功能看起来像这样:
def getFirstPlayer() -> int:
while True:
firstPlayer = input("Specify which player will move first: B for black, W for white: ")
if firstPlayer in ('W','w'): # One way to handle upper- and lowercase
return 2
elif firstPlayer.lower() == 'b': # Another way
return 1
答案 1 :(得分:0)
None
是没有其他内容时返回的值,这是else
块中最后一个try
子句的情况。尝试:
def getFirstPlayer() -> int:
while True:
try:
firstPlayer = str(input())
if firstPlayer == 'W' or firstPlayer == 'w':
return 2
elif firstPlayer == 'B' or firstPlayer == 'b':
return 1
else:
print("Specify which player will move first: B for black, W for white")
return getFirstPlayer() # changed this line
except ValueError:
print("Specify which player will move first: B for black, W for white")
continue
else:
break