Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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 我不明白为什么我的;如果;命令don';它不能正常工作_Python_If Statement - Fatal编程技术网

Python 我不明白为什么我的;如果;命令don';它不能正常工作

Python 我不明白为什么我的;如果;命令don';它不能正常工作,python,if-statement,Python,If Statement,当我运行此代码时,在我输入“cde”之后,它一直在说“冒名顶替者”,但它应该说“欢迎”随机返回一个浮点值,您正在与用户输入的字符串进行比较-它们永远不会相等 你可以试试: import random cde = random.random() print(cde) tst = input("Whats the code?\n") if tst == cde: print("Welcome") else: print("Imposter!!!") 随机

当我运行此代码时,在我输入“cde”之后,它一直在说“冒名顶替者”,但它应该说“欢迎”

随机返回一个
浮点值,您正在与用户输入的
字符串进行比较-它们永远不会相等

你可以试试:

import random  
cde = random.random()  
print(cde)  
tst = input("Whats the code?\n")  
if tst == cde:  
    print("Welcome")  
else:  
    print("Imposter!!!")
随机导入
cde=str(round(random.random(),3))
打印(cde)

tst=input(“代码是什么?\n”)#随机返回一个与用户输入的
字符串进行比较的
float
——它们永远不会相等

你可以试试:

import random  
cde = random.random()  
print(cde)  
tst = input("Whats the code?\n")  
if tst == cde:  
    print("Welcome")  
else:  
    print("Imposter!!!")
随机导入
cde=str(round(random.random(),3))
打印(cde)

tst=input(“代码是什么?\n”)#这是因为您没有强制转换,所以在本例中,您将字符串与长字符串进行比较。简单修复(仅限python 2):


这是因为您没有强制转换,所以在本例中,您将字符串与长字符串进行比较。简单修复(仅限python 2):

将返回一个float,而您正在读取字符串,则需要将其转换为公共类型:

import random  
cde = random.random()  
print(cde)  
tst = input("Whats the code?\n")  
if long(tst) == long(cde):  
    print("Welcome")  
else:  
    print("Imposter!!!")
将返回一个float,而您正在读取字符串,则需要将其转换为公共类型:

import random  
cde = random.random()  
print(cde)  
tst = input("Whats the code?\n")  
if long(tst) == long(cde):  
    print("Welcome")  
else:  
    print("Imposter!!!")

也许会这样:
str(tst)==str(cde)

也许它会这样工作:
str(tst)==str(cde)

问题取决于您的Python版本:

  • 对于Python2.x,问题是

    import random  
    cde = random.random()  
    print(cde)  
    tst = input("Whats the code?\n")  
    if str(tst) == str(cde):  // cast to a common type, string or a long, float
        print("Welcome")  
    else:  
        print("Imposter!!!")
    
    仅打印
    cde
    的前12位小数。因此,如果您只是为
    tst
    键入,在大多数情况下它将不匹配,因为还有几个数字,您就是看不到。您可以在交互式Python会话中对此进行测试:

    print(cde)
    
  • 对于Python3.x,问题在于

    >>> import random
    >>> a = random.random()
    >>> a
    0.10981364144091466
    >>> print a
    0.109813641441
    
    cde
    属于
    内置类型。float
    ,而

    cde = random.random()
    
    tst
    属于
    内置.str类型。因此,比较这两个值将始终返回
    False

另外一个问题是,比较浮点数是否相等(
==
)并不总是可靠的。打印的十进制值与内部二进制值不完全匹配

我建议生成一个随机整数,并将输入也强制转换为整数:

tst = input("Whats the code?\n") 

此代码适用于Python2.x和3.x,但对于Python2.x,最好使用
raw\u input()
而不是
input()
。您可以只使用
str()
而不是
int()
,但使用整数而不是强制转换到
str
有一个好处,即您还可以轻松地进行数值较小/较大的比较。

问题取决于您的Python版本:

  • 对于Python2.x,问题是

    import random  
    cde = random.random()  
    print(cde)  
    tst = input("Whats the code?\n")  
    if str(tst) == str(cde):  // cast to a common type, string or a long, float
        print("Welcome")  
    else:  
        print("Imposter!!!")
    
    仅打印
    cde
    的前12位小数。因此,如果您只是为
    tst
    键入,在大多数情况下它将不匹配,因为还有几个数字,您就是看不到。您可以在交互式Python会话中对此进行测试:

    print(cde)
    
  • 对于Python3.x,问题在于

    >>> import random
    >>> a = random.random()
    >>> a
    0.10981364144091466
    >>> print a
    0.109813641441
    
    cde
    属于
    内置类型。float
    ,而

    cde = random.random()
    
    tst
    属于
    内置.str类型。因此,比较这两个值将始终返回
    False

另外一个问题是,比较浮点数是否相等(
==
)并不总是可靠的。打印的十进制值与内部二进制值不完全匹配

我建议生成一个随机整数,并将输入也强制转换为整数:

tst = input("Whats the code?\n") 


此代码适用于Python2.x和3.x,但对于Python2.x,最好使用
raw\u input()
而不是
input()
。您可以使用
str()
而不是
int()
,但是使用整数而不是对
str
进行强制转换的好处是,您还可以轻松地进行数值大小比较。

tst
是str,而
cde
是float。没有人询问Abdul使用的是什么python版本。Python版本3.0中的输入与以前的实现不同。看到他使用的是
input
而不是
raw\u input
表明这是Python 3…@hiroprogator不,不清楚他是否使用Python 3:
input()
确实存在于Python 2中,
raw\u input()
在许多情况下都是更好的选择,因为Python 2中的
input()
会自动尝试将输入作为Python code.oops进行计算。你说得对。
tst
是str,而
cde
是float。没有人问Abdul使用的是什么python版本。Python版本3.0中的输入与以前的实现不同。看到他使用的是
input
而不是
raw\u input
表明这是Python 3…@hiroprogator不,不清楚他是否使用Python 3:
input()
确实存在于Python 2中,
raw\u input()
在许多情况下都是更好的选择,因为Python 2中的
input()
会自动尝试将输入作为Python code.oops进行计算。您是对的。这将无法按预期工作:
random.random()
在中返回一个
浮点值[0,1)…使用float对其进行了测试,但失败了,因为它向下截断了输入数字。我知道它返回一个float,只是打印它的类型会使它失去不起作用的非永久性。但是如果你考虑使用long-should-work,你会将它们都强制转换为long-should-work,这有更多的存储空间,因此如果两个都是t,则不会发生舍入哼哼是浮动的。尝试了几次,似乎都很有效,如果你需要说服力的话,我可以上传一个单元测试?关于取整你是对的,但是:python 3不再有
long
;只需
int
并在[0,1 ]到<代码> int <代码>总是返回0.0。我不会考虑将它转换成int。只更新POST到Python 2。字符串替换绝对是最容易实现的。这将无法按预期工作:<代码>随机。()(代码)>返回<代码>浮点<