python基础语言与应用第五章_Python基础 第5章 条件、循环及其他语句(1)

1. print和import

1.1 打印多个参数

可用 + 连接多个字符串,可保证被连接字符串前无空格;

可用sep=“_”,自定义各种分隔符;

1 print("I","wish","to","register","a","complaint",sep="_")2 结果:3 I_wish_to_register_a_complaint

可自定义结束字符串,以替换默认的换行符;

1 print('Hello,',end='')2 print('World!')3 结果:4 Hello,World!

1.2 导入时重命名

导入某个模块时,通常使用如下方式:

1 方法1:importsomemodule2 方法2:from somemodule importsomefunction3 方法3:from somemodule importsomefuction,anotherfunction,yetanotherfunction4 方法4:from somemodule import *

如果导入的两个模块,都包含同一个函数,可用按如下方法调用函数:

1 module1.open(...)2 module2.open(...)

也可以在语句末尾加as子句并指定别名

3 import math as foobar

4 foobar.sqrt(4)

2. 赋值

2.1 序列解包(可迭代对象解包)

将一个序列(或任何可迭代对象)解包,并将得到的值存储在一系列变量中。解释如下:

1 values = 1,2,3

2 print(values)3 x,y,z =values4 print(x)5 结果:6 (1, 2, 3)7 1

(1)同时(并行)给多个变量赋值

1 x,y,z = 1,2,3

2 print(x,y,z)

结果:

1 2 3

(2)交换多个变量的值

1 x,y,z = 1,2,3

2 x,y =y,x3 print(x,y,z)4 结果:5 2 1 3

*** 序列解包,在使用返回元组(或其他序列或可迭代对象)的函数或方法时很有用。

eg:随机从字典中获取或删除一个键-值对,用方法popitem,它随机获取一个键-值对并以元组的方式返回。然后将返回的元组解包到两个变量中。

1 scoundre = {'name':'Robin','girlfriend':'Marion'}2 key, value =scoundre.popitem()3 print(key)4 print(value)5 结果:6 girlfriend7 Marion

(3)用星号运算符(*)收集多余的值,这样无需确保值和变量的个数相同

1 a,b,*rest = [1,2,3,4,5]2 print(rest)3 结果:4 [3, 4, 5]5

# 带星号的变量可以放在其他位置

6 name = "Albus Precival Wulfric Brain Dumbledore"

7 first, *middle, last =name.split()8 print(middle)9 结果:10 ['Precival', 'Wulfric', 'Brain']

赋值语句的右边可以是任何类型的序列,但带星号(*)的变量最终包含的总是一个列表。

1 a, *b, c = "abc"

2 print(a,b,c)3 结果:4 a ['b'] c

(4)链式赋值

用于将多个变量关联到同一个值,链式赋值是一种快捷方式。

1 x = y =somefunction()2

3 #上述代码与下面等价

4 y =somefunction5 x = y

(5)增强赋值

如代码 x = x + 1,可直接将右边表达式中的运算符(+)移到赋值运算符(=)前面,写成 x += 1。该方式称为增强赋值,适用于所有标准运算符。增强赋值,可让代码更紧凑、更简洁,增加可读性。

3. 代码块 - 缩进

代码块是通过缩进代码(即前面加空格)来创建的。

也可使用制表符,但标准做法是只使用空格来缩进,且每级缩进4个空格。

4. 条件和条件语句

(1) False,None,0,"",(),[],{},这些值均将被解释器视为假。

(2)if语句

(3)else子句

(4)elif子句

(5)代码块嵌套

5. 循环

(1)while循环

1 name = ''

2 while notname:3 name = input('plz enter your name:')4 print('Hllo, {}!'.format(name))5 结果:6 plz enter your name:elon7 Hllo, elon!

并未像书中所说:回车后再次出现提示信息。

书中修复该现象方法:将while not name 改为 while not name or name.isspace()或while not name.strip()。

(2)for 循环

该函数,可为序列(或其他可迭代对象)中每个元素执行代码块。基本上,可迭代对象是可使用for循环进行遍历的对象。

1 words = ['this','is','an','ex','parrot']2 for word inwords:3 #用end=' '替代print默认输出的换行符合

4 print(word, end=' ')5 结果:6 this is an ex parrot

只要能使用for循环,就不用使用while循环!!!

创建范围函数range(0,10),起始位置为0,不包含结束位置(10)

1 print(list(range(0,10)))2 结果:3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

(3)迭代字典

1)遍历字典的所有关键字

1 d = {'x':1,'y':2,'z':3}2 for key ind:3 print(key,end=',')4 print(key, 'corresponds to', d[key])5 结果:6 x, x corresponds to 1

7 y, y corresponds to 2

8 z, z corresponds to 3

2)遍历字典的所有值,d.values()

1 for value ind.values():2 print(value)3 结果:4 1

5 2

6 3

3)遍历字典,返回键-值对,d.items()

1 for key,value ind.items():2 print(key, 'corresponds to', value)3 结果:4 x corresponds to 1

5 y corresponds to 2

6 z corresponds to 3

***字典元素的排列顺序不确定,如果所处理的键或值顺序非常重要,可将键或值存储在一个列表中,并对列表排序,再迭代。

(4)迭代工具

1)并行迭代 - zip内置函数,缝合序列

如,需同时迭代两个序列,方法(1)如下:

1 names = ['anne','beth','george','damon']2 ages = [12,45,32,99]3

4 for i inrange(len(names)):5 print(names[i], 'is', ages[i], 'years old')6 结果:7 anne is 12years old8 beth is 45years old9 george is 32years old10 damon is 99 years old

方法(2):用zip函数解包

1 names = ['anne','beth','george','damon']2 ages = [12,45,32,99]3

4 #用zip缝合两个序列

5 ziptool =list(zip(names,ages))6 print(ziptool)7 #缝合后,在循环中将元组解包

8 for name,age inzip(names,ages):9 print(name, 'is', age, 'years old')10 结果:11 [('anne', 12), ('beth', 45), ('george', 32), ('damon', 99)]12

13 anne is 12years old14 beth is 45years old15 george is 32years old16 damon is 99 years old

***函数zip可用于“缝合”任意数量的序列

***使用zip函数缝合时,当序列长度不同时,函数zip将在最短的序列用完后停止“缝合”

1 listzip = list(zip(range(5), range(1000)))2 print(listzip)3 结果:4 [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

2)迭代时获取索引

使用内置函数enumerate,该函数能迭代索引-值对,其中的索引是自动提供的。

1 names = ['anne','beth','george','damon']2 print(enumerate(names))3

4 for index,string inenumerate(names):5 if 'geo' instring:6 names[index] = '[censored]' # 将包含'geo'的元素替换为'[censored]' 7 print(string,'\'s index is', index)8

9 print(names)10 11 结果:12

13 george 's index is 2

14 15 ['anne', 'beth', '[censored]', 'damon']

3)反向迭代和排序后再迭代

1 lists = [4, 3, 5, 8, 6, 7]2 print(sorted(lists))3 print(list(reversed(lists)))4 结果:5 [3, 4, 5, 6, 7, 8]6 [7, 6, 8, 5, 3, 4]7

8 words = 'Hello, world!'

9 print(sorted(words))10 结果:11 [' ', '!', ',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']12

13 print(list(reversed(words)))14 reversed_words = ''.join(reversed(words))15 print(reversed_words)16 结果:17 ['!', 'd', 'l', 'r', 'o', 'w', ' ', ',', 'o', 'l', 'l', 'e', 'H']18 !dlrow ,olleH19

20 #reversed和sorted,不会就地修改对象,而是返回反转和排序后的版本

21 print(words)22 结果:Hello, world!

*** 要按字母表排序,可先转换为小写。可将sort或sorted的key参数设置为str.lower

1 print(sorted("aBC", key=str.lower))2 结果:3 ['a', 'B', 'C']

(5)跳出循环

1)break - 结束(跳出)循环

1 from math importsqrt2

3 for n in range(99, 0, -1):4 root =sqrt(n)5 if root ==int(root):6 print(n)7 break

8

9 结果:81

2)continue

结束当前迭代,并跳到下一次迭代开头(跳过循环体中余下语句,但不结束循环)。

continue不如break用得多。

3)while True/break

while True导致循环永不结束,但将条件放在了循环体内的一条if语句中,而这条if语句将在条件满足时调用break。(避免在代码中过多使用break)

1 whileTrue:2 word = input('please enter a word:')3 if notword:4 break

5 print('The word is', word)6 结果:7 please enter a word: elon8 The word iselon9 please enter a word:

(6)循环中的else子句

通常,循环中使用break是因为“发现”了什么或“出现”了什么情况。若要判断循环是提前结束还是正常结束:

1)可在循环开始前定义一个布尔变量并将其设置为False,再在跳出循环时设置为True。便可在循环后用一条if语句来判断循环是否提前结束。

1 from math importsqrt2 break_out =False3 for x in range(99,81,-1):4 root =sqrt(x)5 if root ==int(root):6 break_out =True7 print(x)8 break

9 if notbreak_out:10 print("I don't break out!")11 结果:12 I don't break out!

模板:

1 #模板

2 break_out =False3 for x inseq:4 do_something()5 ifcondtion(x):6 break_out =True7 break

8 do_something_else()9 if notbreak_out:10 print("I don't break out!")

2)***简单的方法,在循环中添加一条else子句,它仅在没有调用Break时才执行。

1 from math importsqrt2 for n in range(99,81,-1):3 root =sqrt(n)4 if root ==int(root):5 print(n)6 break

7 else:8 print("Don't find it!")9

10 结果:Don't find it!

20190830

治军之道,以勤字为先。身勤则强,佚则病;家勤则兴,懒则衰;国勤则治,怠则乱;军勤则胜,惰则败。惰者,暮气也,常常提其朝气为要。——曾文正公,巳未二月

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值