Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 其中';这两者的区别是什么;str';_Python_Python 3.x - Fatal编程技术网

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没有说这是错的,只是说这是不同的