day04回顾:
-
字符串格式化表达式
“格式化字符串” % 参数
“格式化字符串” % (参数1, 参数2,…)
“%d” % 20 # 生成’20’%s %d %f %7.2f
% [ - + 0 宽度 . 精度] 类型码 -
while 语句
while 布尔表达式:
语句块1
else:
语句块2 -
break 语句
死循环
while True:
if xxxx:
break -
循环语句:
while 语句
for 语句
day05笔记:
for 语句
作用:
用来遍历可迭代对象的数据元素
-
可迭代对象:
字符串 str
(以下后面会讲)
列表 list
元组 tuple
字典 dict
集合 set
… -
语法:
for 变量列表 in 可迭代对象:
语句块1(重复执行)
else:
语句块2- 说明:
- else 子句可以省略(同while类似)
- 当在循环内部用break终止循环时,else子句部分的语句不会执行
示例见:
for.py
-
练习:
任意输入一段字符串- 计算这个字符串中’a’ 这个字符的个数,并打印出来
- 计算出空格的个数,并打印出来
(要求: 用for语句实现,不允许使用 S.count方法)
思考:
用while语句能否实现上述功能?
- range 函数:
作用
用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)
函数 说明 range(stop) 用来生成 0~stop 之间内的整数,直到stop为止(不包含stop) range(start, stop[,step]) 用来生成start~stop之间的整数,直到stop为止(不包含stop),每个整数间隔step,且step可以是负数 -
说明:
此对象可用于for语句来进行迭代取出其中的元素 -
示例:
range(4) # 生成 0 1 2 3
range(3, 6) # 生成 3 4 5
range(1, 10, 2) # 生成 1 3 5 7 9
range(5, 0, -2) # 生成 5 3 1
range(5, 0, -1) # 生成 5 4 3 2 1
-
练习:
-
用for语句打印 1~20的整数,打印在一行内.
-
用for语句打印 1~20的整数,每行打印5个,打印4行.
-
求 100 以内有哪儿些数与自身+ 1的乘积再对11求余结果等于8?
x * (x+1) % 11 == 8 -
输入一段字符串,判断您输入的字符串中有几个中文字符:
(注: 中文字符的编码值一定大于127)
提示: 用ord(x) 函数可以返回一个字符的编码值
-
-
for语句的注意事项:
-
for 语句range调用顺序:
示意:
请问此程序打印的结果是什么?为什么?
i = 6
for x in range(1, i):
print(‘x=’, x, ‘i=’, i)
i -= 1 -
for语句变量列表里的变量可能不被创建
for x in range(4, 0):
print(x)
else:
print(“循环结束后x的值是”, x) # 报错 -
for语句中用break语句中断执行时,else子句不会执行
示例:
for x in range(10):
print(x)
if x == 3:
break
else:
print(“for语句结束”)
-
-
for 语句嵌套:
示例:
for x in “ABC”:
for y in “123”:
print(x + y) -
练习:
写一个程序,打印26个大写英文字母 和 26个小写英文字母
ABCDEFG…XYZabcdefg…XYZchr(i) 数字转为字符
“A” --> 65
‘a’ --> 97 -
continue 语句
- 问题:
如何让程序不再向下执行本次循环,重新开始一次新的循环 - 作用:
用于循环语句(while,for语句)中, 不再执行本次循环内continue之后的语句,重新开始一次新的循环 - 说明:
- 在for语句中执行continue语句,将会从可迭代对象中取下一个数据,绑定变量后开始一次新的循环
- 在while语句中,执行continue语句,将会直接跳转到while语句真值表达式处,重新判断循环条件
语法:
continue
- 问题:
-
练习:
-
输入一个整数代表开始用begin绑定
输入一个整数代表结束用end绑定
打印 begin~ end(不包含end) 之间的全部奇数 -
求 1~100之间所有不能被2,3,5,7整除的数
- 打印这些数
- 打印这些数的和
-
-
循环小结:
while 语句
for 语句
字符串 str
range() 函数返回的对象
break 语句
continue 语句 -
列表 list
问题:-
列表的定义:
列表是一种容器
列表是可以被改变的序列
列表是由一系列特定元素组成的,元素与元素之间可能没有任何的关联关系,但他们之间有先后顺序关系 -
python3中序列的类型 (sequence)
字符串 str
列表 list
— 以下后面会讲 —
元组 tuple
字节串 bytes
字符数组 bytearray -
创建空列表的字面值:
[] # 创建空列表的表达式 -
创建非空列表的字面值:
L = [1, 2, 3, 4]
L = [‘北京’, ‘上海’, ‘深圳’]
L = [1, ‘Two’, 3.14, ‘四’]
L = [1, 2, [3.1, 3.2], 4] -
列表的构造(创建) 函数 list
list() # 生成一个空的列表 等同于 []
list(iterable) 用可迭代对象创建一个列表
示例:
L = list() # L 绑定空列表 []
L = list(“hello”) # L绑定[‘h’,‘e’,‘l’,‘l’,‘o’]
L = list(range(7, 10)) # L =[7,8,9] -
列表的运算:
算术运算:
+ += * *=
+ 用于拼接列表
lx = [1, 2, 3]
ly = [4, 5, 6]
lz = lx + ly # lz = [1,2,3,4,5,6]
+= 用原列表与右侧列表拼接,再用变量绑定列表
语法:
L += 可迭代对象
示例:
L = [1, 2, 3]
L += [4, 5, 6] # L=[1,2,3,4,5,6]
L += “ABC” # L=[1,2,3,4,5,6,‘A’,‘B’,‘C’]
L += range(10, 15) -
* 用于生成重复的列表
x = [1, 2] * 3 # x=[1,2,1,2,1,2] -
*= 用原列表生成重复列表,并用变量绑定生成的列表
x = [1,2]
x *= 3 # x = [1,2,1,2,1,2] -
列表的比较运算
运算符:
< <= > >= == !=
说明:
列表的比较规则与字符串的比较规则相同
列表要求每两个元素能依次进行比较,否则会出现类型错误
示例:
x = [1, 2, 3]
y = [1, 3, 2]
x < y # True
x != y # True
[1, ‘Two’] > [‘Two’, 1] # TypeError
[1, “Two”, 3.14] < [1, “二”, 5.6] # True -
列表是可迭代对象
L = [1, 3, 5, 7]
for x in L:
print(x) # 1 3 5 7
-
-
练习:
- 写一个程序, 让用户输入很多个正整数,当输入负数时结束输入
将用户输入的数存在于列表 L 中, 打印这个列表
如:
请输入: 1
请输入: 2
请输入: 3
请输入: 4
请输入: -1
打印:
[1, 2, 3, 4]
-
列表的in / not in 运算符
判断一个值是否存在于列表中,如果存在返回True,否则返回False
说明:
同字符串的in/not in类似,但只能判断单个元素是否存在于列表中
示例:
x = [1, ‘Two’, 3, “Four”]
3 in x # True
“3” in x # False
4 not in x # True -
列表的索引操作:
语法:
列表[整数表达式]
用法:
等同于字符串的索引
索引分为正向索引和反向索引,规则写字符串规则完全相同
示例:
x = [1, “二”, 3, “Four”]
print(x[0]) # 1
print(x[1]) # 二
print(x[-1]) # Four -
列表的索引赋值操作:
列表是可变的序列,可以通过索引赋值改变列表中的元素
语法:
列表[整数表达式] = 表达式
示例:
x = [1, “二”, 3, “Four”]
x[1] = 2 # 将列表的第二个元素改为2
x[-1] = 4
print(x) # [1, 2, 3, 4] -
列表的切片:
语法:
列表[(开始索引b):(结束索引e)(: (步长s))]
说明:
列表切片取值返回一个列表,规则等同于字符串规则
示例:
x = [0, 1, 2, 3, 4, 5, 6, 7, 8]
y = x[1:9:2] # 奇数 -
切片的赋值操作
作用:
可以改变原列表的排序,可以插入和修改数据
可以用切片改变列表对应的元素的值
语法:
列表[切片] = 可迭代对象
注: 赋值运算符的右侧必须是一个可迭代对象
示例:
- 写一个程序, 让用户输入很多个正整数,当输入负数时结束输入
L = [2.2, 3.3, 4.4]
L[0:1] = [1, 2] # L = [1,2,3.3,4.4]
L[2:] = [3, 4, 5] # L = [1,2,3,4,5]
L[::] = [30, 40] # L = [30, 40]
L[0:0] = [10, 20] # L =[10,20,30,40]
L = [3, 4]
L[1:1] = [3.1, 3.2] #L=[3,3.1,3.2,4]
L =[3, 4]
L[2:2] = [5,6,7] # L=[3,4,5,6,7]
L = [3, 5]
L[1:1] = "AB" # L=[3, 'A', 'B', 5]
L = [3, 5, 10]
L[1:2] = range(4, 10)
- 切片注意事项:
对于步长不等于1的切片赋值,赋值运算符的右侧的可迭代对象提供的元素个数一定要等于切片切出的段数
如:
L = [1, 2, 3, 4, 5, 6]
L[::2] = “ABC” # 对的
L[::2] = “ABCD” # 错的
- 练习:
- 写程序输入一个三角形的宽和高,打印相应的三角形:
如:
- 写程序输入一个三角形的宽和高,打印相应的三角形:
输入: 3
1)
*
**
***
2)
*
**
***
3)
***
**
*
4)
***
**
*
-
写一个程序,任意输入一个整数,判断这个数是否为素数(prime)
素数(也叫质数), 只能被1和自身整除的正整数
如: 2 3 5 7 11 13 17 …
153 370 …示:
153 370 …用排除法: 当判断x是否为素数时,只要让x分别除 153 370 …以2, 3, 4, 5… x-1,只要有任何一个数能整数,则说明x不是素数,否则x为素数 -
编写程序求下列多项式的值:
Sn = 1/1 - 1/3 + 1/5 - 1/7 + …- 求1000000个这样的分数相加的和是多少?
- 将上一步的和乘以4打印出来,是多少?
-
算出 100 ~ 999之间的水仙花数(Narcissistic Number)
水仙花数是指百位的3次方 + 十位的3次方 + 个位的3次方等于原数的整数
如:
153 = 13 + 53 + 3**3
答案:
153 370 …