变量不会分配给 Python 中的输入
Variable won't be assigned to input in Python
我是编程新手,正在阅读这本书 "Invent Your Own Computer Games with 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
playerletter 你会得到:
<built-in method upper of str object at 0x7fa45670e508>
现在,由于 python 是动态类型的,因此将此值与 'X'
或 'O'
进行比较是完全有效的。因为两者都不匹配,所以 else:
子句是 运行,满足条件 playerletter not in "X O".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
我是编程新手,正在阅读这本书 "Invent Your Own Computer Games with 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
playerletter 你会得到:
<built-in method upper of str object at 0x7fa45670e508>
现在,由于 python 是动态类型的,因此将此值与 'X'
或 'O'
进行比较是完全有效的。因为两者都不匹配,所以 else:
子句是 运行,满足条件 playerletter not in "X O".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