jhu*_*ub1 6 python conditional boolean operand
我正在尝试创建一个函数,其中检查给定值(作为字符串传递)以查看数字位数是4还是6,并且它是一个数字.
我的第一个冲动是使用这段代码:
def number(x):
if (len(x) == (4 or 6)) and x.isdigit():
print "True"
else:
print "False"
Run Code Online (Sandbox Code Playgroud)
上面的代码只通过了下面的第一个测试......我不明白为什么它通过了这个,但没有其他测试:
number("1234")
Run Code Online (Sandbox Code Playgroud)
只有当我分离出len()函数时才能正常工作.
def number(x):
if (len(x) == 4 or len(x) == 6) and x.isdigit():
print "True"
else:
print "False"
## Checks
number("1234")
number("123456")
number("abcd")
number("abcdef")
number("1")
number("a")
Run Code Online (Sandbox Code Playgroud)
上面的代码通过了所有测试.
所以我的问题是:
谢谢你的帮助!
**这不是一个重复的问题,因为虽然这个问题与布尔运算符有相同的基本概念,但由于len(),isdigit()的使用以及如何最好地改进它的另一个问题(有人评论),问题本身是不同的返回的用法).但是,肯定会为另一个问题添加另一个视角.
您可以in像这样使用运算符:
def number(x):
if len(x) in (4, 6) and x.isdigit():
print "True"
else:
print "False"
Run Code Online (Sandbox Code Playgroud)
其中in一种用于在给定的容器容纳检查.请注意,4 or 6他们自己评估一些不受欢迎的东西,这就是你的第一个代码段失败的原因.你可以在python shell上查看它:
>>> 4 or 6
4
Run Code Online (Sandbox Code Playgroud)
它有助于检查这一行的逻辑:
if (len(x) == (4 or 6)):
Run Code Online (Sandbox Code Playgroud)
该(4 or 6)条款包含逻辑or短路.该值为4true,因此将对其进行求值并返回到==关系比较.
有效的方法or是对其左侧进行布尔真值计算,如果为真则返回其值.如果左侧不是布尔值true,则评估右侧并返回其值.
因为4 or ...在布尔意义上左侧是真的,所以从不评估右侧.Python甚至没有过去4 or.如果左侧值是假值(例如0),则将or评估该右侧的值.
要查看此操作,请尝试print 4 or 6.输出将是4.
因此,由于4是硬编码的真值,因此您的比较在语义上是相同的if (len(x) == 4)- 也就是说,因为4为真,所以6永远不会被评估.
我想你真正想知道的是,如果len(x)是4或6.您可以通过以下两种方式将其添加到代码中:
if(len(x) == 4 or len(x) == 6 ...
if(len(x) in (4,6) ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12704 次 |
| 最近记录: |