Discuss / Python / 关于前面出现的and

关于前面出现的and

Topic source

caizishuo

#1 Created at ... [Delete] [Delete and Lock User]

下面出现的and我不是特别理解,查了一些资料,希望对大家有点帮助。这是资料来源:参考资料

def not_empty(s):
    return s and s.strip()

list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
# 结果: ['A', 'B', 'C']

对于较为简单的:


x and y如果x是false,那么值就是x,否则就是y

x or y如果x是false, 那么值就是y, 否则就是x

而对于not,不同于and和or,它返回的是***布尔值***

not x如果x是false的话,那么值就是True,否则就是False


如果有多个andor,会怎么样呢?

and:如果存在则返回第一个falsy值,不然返回最后一个值。

or:如果存在则返回第一个truthy值,不然返回最后一个值。


现在距离我们得出and和or表达式的结果,就差理解***falsy***和***truthy***的值到底是啥了。

事实上,被认为是truthy的值,就是其作为ifwhile语句的判断式子,语句内代码能执行。


现在,我们可以对上面的代码为何使用and开始进行理解了。可以尝试将代码修改为下面的去理解。

def not_empty(s):
    return s.strip()

list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
# 结果: ['A', 'B', 'C']

显然,上面代码是报错的。但原本的代码则不会,这大概就是这里用and的用意了吧。

caizishuo

#2 Created at ... [Delete] [Delete and Lock User]

本次作业

#! /usr/bin/python
# -*- coding: utf-8 -*-
def is_palindrome(n):
    a = str(n)
    return a == a[::-1] 

if __name__ == '__main__':
    output = filter(is_palindrome, range(1, 1000))
    print('1~1000:', list(output))
    if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]:
        print('success')
    else:
        print('false')


  • 1

Reply