[英]Variable won't be assigned to input in Python
我对编程还很陌生,正在研究《用Python发明自己的计算机游戏》一书。 为了测试我已经理解了这些章节,我尝试重做该章节一直在进行的任何游戏,并添加修饰语,而无需参考文本以寻求帮助。 我编写的某些部分与本书不同,但是我不明白为什么它不起作用。
def chooseletter():
loop = True
playerletter = ""
computerletter = ""
while playerletter not in "X O".split():
playerletter = input("What letter would you like to be? X or O? \n").upper
if playerletter == ("X"):
computerletter = "O"
elif playerletter == ("O"):
computerletter = "X"
else:
loop = True
return [playerletter, computerletter]
由于某种原因,无论我输入什么内容,这段代码都会不断循环播放。 当我打开调试器时,会说什么都没有分配给变量“ playercharacter”。
我敢打赌这很明显,当有人指出解决方案时,我会嘲笑自己。 谢谢你的帮助。
您在.upper()
方法调用中缺少括号。
playerletter = input("What letter would you like to be? X or O? \n").upper
应该读
playerletter = input("What letter would you like to be? X or O? \n").upper()
以下代码
playerletter = input("What letter would you like to be? X or O? \n").upper
将返回的字符串的方法对象分配给playerletter
变量。 如果您在该行之后print
玩家信,则会得到:
<built-in method upper of str object at 0x7fa45670e508>
现在,由于python是动态键入的,因此将该值与'X'
或'O'
进行比较是完全有效'O'
。 由于两者都不匹配,因此将运行else:
子句,并且playerletter not in "XO".split():
的条件playerletter not in "XO".split():
的条件,因为['X', ' ', 'O']
不一定包含<built-in method upper of str object at 0x7fa45670e508>
,因此while
循环无限循环。
这是您惯用的Python代码:
def chooseletter():
playerletter = ''
# use a tuple of letters in condition instead of splitting
while playerletter not in ('X', 'O'):
playerletter = input("What letter would you like to be? X or O? \n").upper()
# move the setting of computerletter outside the loop
# use the X if Z else Y construction for simplicity
computerletter = 'O' if playerletter == 'X' else 'X'
# instead of returning 2 values in a list, return a tuple
return playerletter, computerletter
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.