繁体   English   中英

变量不会分配给Python中的输入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM