那两个相同'str'的区别在哪里

时间:2016-08-07 14:36:41

标签: 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

为什么会这样? guesscode字符串值是否相等?

2 个答案:

答案 0 :(得分:2)

您在随机生成的 template<typename Ta> class AB : public cppoptlib::Problem<Ta> { int a; public: using typename cppoptlib::Problem<Ta>::TVector; AB(int num):a(num) {} Ta value(const TVector &x) { return (1 - x[0]) * (1 - x[0]) + a * (x[1] - x[0] * x[0]) * (x[1] - x[0] * x[0]); } }; void test() { typedef AB<double> TAB; TAB f(25); //initializes a with 25 值的末尾添加空格

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

答案 1 :(得分:-3)

您标记了问题python-3.x,因此这可能不是您的问题,但您的程序中没有明显的 Python-3-isms,所以我要提一下无论如何,为了未来可能没有注意到标签的读者的利益。

在Python 2中,input读取一行并将其评估为Python代码。这几乎不是你想要的。在这种情况下,这意味着您键入的任何数字都将从字符串转换为实际数字,并且字符串永远不会与数字相等。这也意味着有人可以通过在提示符下键入“代码”一词来作弊。

相反,请使用raw_inputsys.stdin.readline

(在Python 3中,input执行raw_input曾经做过的事情。)