Python基础-第009课:布尔值、格式化字符串、循环

Python基础-第009课:布尔值、格式化字符串、循环

观看视频

9.1 布尔值

用作布尔表达式时,下面的值将被解析器视为假(False),而其它的各种值视为真,
False 、 None 、0、 “” 、 () 、[]、 {}
bool函数与list、str和tuple一样,可用来转换其他的值。

>>> bool('I think, therefore I am') 
True 
>>> bool(42) 
True 
>>> bool('') 
False 
>>> bool(0) 
False 

注意 虽然[]和""都为假(即bool([]) == bool("") == False),但它们并不相等(即[] != "")。对其他各种为假的对象来说,情况亦如此(一个更显而易见的例子是() != False)。

9.1.1 更复杂的条件

1. 比较运算符

表9-1 Python比较运算符

表 达 式描 述
x == yx 等于y
x < yx小于y
x > yx大于y
x >= yx大于或等于y
x <= yx小于或等于y
x != yx不等于y
x is yx和y是同一个对象
x is not yx和y是不同的对象
x in yx是容器(如序列)y的成员
x not in yx不是容器(如序列)y的成员

与赋值一样,Python也支持链式比较:可同时使用多个比较运算符,如0 < age < 100


9.2 格式化字符串

用字符串的format()方法,每个替换字段都用花括号括起,其中可能包含名称,还可能包含有关如何对相应的值进行转换和格式设置的信息。
在最简单的情况下,替换字段没有名称或将索引用作名称。

>>> "{}, {} and {}".format("first", "second", "third") 
'first, second and third' 
>>> "{0}, {1} and {2}".format("first", "second", "third") 
'first, second and third' 

然而,索引无需像上面这样按顺序排列。

>>> "{3} {0} {2} {1} {3} {0}".format("be", "not", "or", "to") 
'to be or not to be' 

命名字段方法。

>>> from math import pi 
>>> "{name} is approximately {value:.2f}.".format(value=pi, name="π") 
'π is approximately 3.14.' 

当然,关键字参数的排列顺序无关紧要。在这里,我还指定了格式说明符.2f,并使用冒号将其与字段名隔开。它意味着要使用包含2位小数的浮点数格式。如果没有指定.2f,结果将如下:

>>> "{name} is approximately {value}.".format(name="π", value=pi) 
'π is approximately 3.141592653589793.' 

最后,如果变量与替换字段同名,还可使用一种简写。在这种情况下,可使用f字符串——在字符串前面加上f。

>>> from math import pi 
>>> f"π  is roughly {pi}." 
"π  is roughly 3.141592653589793." 

在这里,创建最终的字符串时,将把替换字段pi替换为变量pi的值。这与下面这个更明确一些
的表达式等价:

>>> "π is roughly {pi}.".format(pi=pi) 
"π is roughly 3.141592653589793." 

9.3 循环

看一个简单的例子,假设要打印1~100的所有数。同样,你可采用笨办法。

print(1) 
print(2) 
print(3) 
... 
print(9) 
print(10) 

但如果你愿意使用笨办法,就不会求助于Python了,不是吗?

9.4 while 循环

为避免前述示例所示的繁琐代码,能够像下面这样做很有帮助:

x = 1 
while x <= 10:  
   print(x) 
   x += 1 

你还可以使用循环来确保用户输入名字,如下所示:

name = '' 
while not name:  
    name = input('Please enter your name: ') 
print('Hello, {}!'.format(name)) 

请尝试运行这些代码,并在要求你输入名字时直接按回车键。你会看到提示信息再次出现,因为name还是为空字符串,这相当于假。

提示 如果你只是输入一个空格字符(将其作为你的名字),结果将如何呢?试试看。程序将接受这个名字,因为包含一个空格字符的字符串不是空的,因此不会将name视为假。这无疑是这个小程序的一个瑕疵,但很容易修复:只需将while not name改为:
while not name or name.isspace()while not name.strip()
即可。

9.5 for循环

while语句非常灵活,可用于在条件为真时反复执行代码块。这在通常情况下很好,但有时候你可能想根据需要进行定制。一种这样的需求是为序列(或其他可迭代对象)中每个元素执行代码块。

注意 基本上,可迭代对象是可使用for循环进行遍历的对象。以后将详细介绍可迭代对象和迭代器。就目前而言,只需将可迭代对象视为序列即可。为此,可使用for语句:

words = ['this', 'is', 'an', 'ex', 'parrot'] 
for word in words:  
   print(word) 

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
for number in numbers:  
   print(number) 

鉴于迭代(也就是遍历)特定范围内的数是一种常见的任务,Python提供了一个创建范围的内置函数。

>>> range(0, 10) 
range(0, 10) 
>>> list(range(0, 10)) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> tuple(range(0, 10)) 
(0, 1, 2, 3, 4, 5, 6, 7, 8,9)

范围类似于切片。它们包含起始位置(这里为0),但不包含结束位置(这里为10)。在很多情况下,你都希望范围的起始位置为0。实际上,如果只提供了一个位置,将把这个位置视为结束位置,并假定起始位置为0。

>>> range(10) 
range(0, 10) 

下面的程序打印数1~100:

for number in range(1,101):  
   print(number) 

注意,相比前面使用的while循环,这些代码要紧凑得多。

提示 只要能够使用for循环,就不要使用while循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚蓝慕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值