这是一小段代码:
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
字符串值是否相等?
答案 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_input
或sys.stdin.readline
。
(在Python 3中,input
执行raw_input
曾经做过的事情。)