为什么当我输入 0 时,带有 != 的"if"代码返回 true,这应该是一个假值?



>新手在这里学习Python。在线上课,在这里遇到了一些麻烦:

为什么当我输入 0 时,带有 != '' 的"if"代码返回 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

因为它是一个包含单个字符的字符串,所以它也不等于'',空字符串和您的if name != '':测试通过。

你有一个字符串,因为在 Python 3 中,input()总是返回字符串。

如果你有一个值为 0int 对象,那么是的,它将是 false-y:

>>> falsey = 0
>>> type(falsey)
<class 'int'>
>>> bool(falsey)
False

您必须将字符串转换为整数:

>>> int(name)
0
>>> type(int(name))
<class 'int'>
>>> bool(int(name))
False

但是,当您询问某人的名字时,转换为整数没有多大意义。名称是文本,而不是数字。

因此,除非您有明确、具体的理由来进一步验证用户输入的内容以检查该值是否为实际名称,否则在此处测试数字0是没有意义的。只要坚持你所拥有的,也许只是使用:

if name:
    # ... name is not empty

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.")

相关内容

最新更新