Python 其中';这两者的区别是什么;str';
下面是一段代码:Python 其中';这两者的区别是什么;str';,python,python-3.x,Python,Python 3.x,下面是一段代码: from random import randint code = "%d%d%d " % (randint(1, 9), randint(1, 9), randint(1, 9)) print(code) guess = input("[keypad]> ") print(guess == code) 当我输入与打印的code表示形式相同的数字时,此代码段的最后一行将打印False 为什么会发生这种情况?guess和code不是相等的字符串值吗?在随机生成的code值
from random import randint
code = "%d%d%d " % (randint(1, 9), randint(1, 9), randint(1, 9))
print(code)
guess = input("[keypad]> ")
print(guess == code)
当我输入与打印的code
表示形式相同的数字时,此代码段的最后一行将打印False
为什么会发生这种情况?guess
和code
不是相等的字符串值吗?在随机生成的code
值的末尾放一个空格:
code = "%d%d%d " % (randint(1, 9), randint(1, 9), randint(1, 9))
# ^
这个空间是重要的;大多数人不会看到空间,也不会在提示下输入空间:
>>> from random import randint
>>> code = "%d%d%d " % (randint(1, 9), randint(1, 9), randint(1, 9))
>>> code
'634 '
>>> '634' == code
False
>>> '634 ' == code
True
>>> guess = input("[keypad]> ")
[keypad]> 634
>>> guess # note the extra space I entered!
'634 '
>>> guess == code
True
请删除该额外空间,或确保在提示下输入该空间:
>>> from random import randint
>>> code = "%d%d%d " % (randint(1, 9), randint(1, 9), randint(1, 9))
>>> code
'634 '
>>> '634' == code
False
>>> '634 ' == code
True
>>> guess = input("[keypad]> ")
[keypad]> 634
>>> guess # note the extra space I entered!
'634 '
>>> guess == code
True
您标记了您的问题
python-3.x
,因此这可能不是您的问题,但您的程序中没有明显的python-3-isms,因此我还是要提到它,以方便将来可能不会注意到这些标记的读者
在Python2中,input
读取一行并将其作为Python代码进行计算。这几乎不是你想要的。在本例中,这意味着您键入的任何数字都将从字符串转换为实际数字,并且字符串永远不会与数字进行比较。这也意味着有人可以在提示下输入“code”来作弊
相反,使用raw_input
或sys.stdin.readline
(在Python3中,
input
做的是raw\u input
以前做的事。)@tobias\u k:我想这就是他们真正想要的,尽管我可能猜错了。。。没关系。@vaultah没有说这是错的,只是说这是不同的