Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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 为什么我的';如果';使用代码!='';当我输入0时返回true,这应该是一个假值?_Python_If Statement - Fatal编程技术网

Python 为什么我的';如果';使用代码!='';当我输入0时返回true,这应该是一个假值?

Python 为什么我的';如果';使用代码!='';当我输入0时返回true,这应该是一个假值?,python,if-statement,Python,If Statement,新手在这里学习python。在网上学习课程时遇到了一些问题: 为什么我的“如果”代码与!=''一起使用当我输入0时返回true,这应该是一个假值 这是密码 print('Enter a name') name = input() if name != '': print('Thank you for entering a name, ' + name) else: print('You didn\'t enter a name') 输出为: Enter a name 0 Tha

新手在这里学习python。在网上学习课程时遇到了一些问题:

为什么我的“如果”代码与!=''一起使用当我输入0时返回true,这应该是一个假值

这是密码

print('Enter a name')
name = input()
if name != '':
    print('Thank you for entering a name, ' + name)
else:
    print('You didn\'t enter a name')
输出为:

Enter a name
0
Thank you for entering a name, 0

这怎么可能是错误的?

您没有
0
,您有
'0'
,一个长度为1的字符串。任何非空字符串都被视为true:

>>> name = input()
0
>>> name
'0'
>>> len(name)
1
>>> type(name)
<class 'str'>
>>> bool(name)  # truth value
True
您必须将字符串转换为整数:

>>> int(name)
0
>>> type(int(name))
<class 'int'>
>>> bool(int(name))
False
input()函数将您的0作为名称,然后您的名称为“0”, 而不是“”。更常见的方法是:

if len(name) > 0:
    print('Thank you for entering a name, ' + name)
else:
    print('You didn\'t enter a name')
试试这个:

import re

name = input()
if re.match('[a-zA-Z]+', name):  # returns None if not match, a match object otherwise.
    print("Thank you for entering your name, {}.".format(name))
else:
    print("Oops! You didn't entered a valid name.")

这都是真的,但即使他们有
0
,它也不等于
'
。如果我输入:int(0)而不是0会发生什么?是的,这就是他们实际代码输出的原因*谢谢…,0`我如何使其返回false?@lsebrary:
name!='当您输入
0
时,0'
将返回false。但同样,如果您只想知道用户是否输入了名称,那么这不是一个很好的测试。谁能说
'0'
不是一个名字呢?0,这应该是一个虚假的值,你没有测试
名字的真实性;您正在测试它是否为空字符串。换句话说,
False
也不等于
'
。只有当您将某个内容强制转换为布尔值时,它是否为False才相关。这里没有这样的演员阵容
bool(int(input))
将随着
input='0'
而变为
False
bool('')
。什么是有效名称?或者如果name:
反勾用于小于一行的代码段,则只需
。四个空格缩进应该用于整行或多行代码块——请参见我的编辑。这样可以突出显示语法,彩色背景一直延伸到右边缘。@LseLibrary:
如果名称:
如果名称!='':
如果len(name)>0:
都测试相同的东西,如果
name
始终是字符串。但是,
如果name:
是Pythonic形式。
if len(name) > 0:
    print('Thank you for entering a name, ' + name)
else:
    print('You didn\'t enter a name')
import re

name = input()
if re.match('[a-zA-Z]+', name):  # returns None if not match, a match object otherwise.
    print("Thank you for entering your name, {}.".format(name))
else:
    print("Oops! You didn't entered a valid name.")