python基础(5)——for & continue & 列表
一、for 语句
1、作用:
用来遍历可迭代对象的数据元素
可迭代对象是指能依次获取数据元素的对象
2、可迭代对象包括:
字符串 str
---以下后面会讲---
列表 list
元组 tuple
...
3、for 语法:
for 变量列表 in 可迭代对象:
语句块1
else:
语句块2
4、示例:
s = "ABCD" for ch in s: print("ch--->>", ch)
5、练习:
1. 任意输入一段字符串,
1) 计算出输入字符'a'的个数,并打印出个数
2) 计算出空格的个数,并打印出个数
(要求用for语句,不允许用 str.count方法)
思考:
用while 语句能否实现上述功能
s = input("请输入一段字符串: ") count_a = 0 # 用来记录a的个数 for c in s: if c == 'a': count_a = count_a + 1 else: # else子句只有在可迭代对象不能提供数时才会执行 print('a的个数是:', count_a) count_blank = 0 for c in s: if c == ' ': count_blank += 1 print('空格的个数是:', count_blank)
6、for 语句说明:
else子句部分可以省略
当在循环内部用break终止循环时,else子句部分不会执行
示例:
# 输入一段字符串,判断这个字符串内是否有'H'这个字符,并 # 打印出结果 s = input("请输入: ") # for ch in s: # if ch == 'H': # print(s, "中含有字符'H'") # break # else: # print(s, "中不含有字符'H'") # 用while 实现 i = 0 # i代表字符串的索引下标 while i < len(s): ch = s[i] # 获取其中一个 if ch == 'H': print(s, "中含有字符'H'") break i += 1 else: print(s, "中不含有字符'H'")
1、range 函数
range(stop) 用来生成0~stop区间内的整数,直到stop为止(不包含stop)
range(start, stop[, step]) 用来生成start~stop区间内的整数,直到stop为止(不包含stop),每次生成整数后移动step
格式详见:
>>> help(range)
1、作用:
用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)
2、说明:
range返回的对象可以有for语句来进行依次迭代访问取出其中的整数
3、示意:
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(4, 0) # 空
4、示例:
for x in range(4): print(x) # 0, 1, 2, 3 else: print("可迭代对象已经不能再提供数据.for结束") for x in range(3, 6): print(x) print('----------------------------') for x in range(1, 10, 2): print(x)
5、练习:
1. 用 for语句打印 1 ~ 20 的整数,打印在一行内:
1 2 3 4 5 ..... 20
for i in range(1, 21): print(i, end=' ') else: print() # 换行
2. 计算 1 + 3 + 5 + 7 + ..... + 99 的和
分别用 for语句 和 while语句 实现
s = 0 # 用于记录和 for i in range(1, 100, 2): s += i print(s) s = 0 i = 1 while i < 100: s += i i += 2 print(s)
2、for 语句变量可能不被创建的问题:
for x in range(4, 0):
print(x)
print('x绑定', x)
# 此示例示意for语句的变量的创建和绑定问题 for x in range(4, 0): print(x) else: print("for 语句结束") # print('x绑定', x) # 报错 for x in range(0, 4): print(x) print('x绑定', x) # 3
3、for 注意问题:
见:
for_range_times.py
i = 6 for x in range(1, i): # for x in range(1, 6) print('x =', x, 'i=', i) i -= 1 # 请问打印结果是什么? # x = 1 i= 6 # x = 2 i= 5 # x = 3 i= 4 # x = 4 i= 3 # x = 5 i= 2
3、for 语句的嵌套:
# 此示例示意for语句的嵌套 for x in "ABC": for y in "123": print(x + y)
思考下列程序的打印次数:
for x in range(5):
for y in range(10):
print("hello") # 请问打印多少个hello?
练习:
1. 求: 100以内有哪儿些数与自身+1的乘积再对 11 求余等于8?
x * (x+1) % 11 == 8
for x in range(101): if x * (x + 1) % 11 == 8: print(x)
2. 输入一个数,打印如下正方形(用for实现)
请输入: 5
打印:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
n = int(input("请输入: ")) for line_number in range(1, n + 1): # print("1 2 3 4 5") for x in range(1, n + 1): print(x, end=' ') print() # 换行
3. 输入一个数,打印如下正方形
请输入: 5
打印:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
n = int(input("请输入: ")) for line_number in range(1, n + 1): for x in range(line_number, n + line_number): print("%2d" % x, end=' ') print()
4. 用程序生成如下字符串:
1) "ABCDEFG..... XYZ"
2) "AaBbCcDdEe......XxYyZz"
提示(可以使用 ord 和 chr函数)
参考 ascii编码
s = '' # 先创建一个空字符串 # for code in range(65, 65 + 26): for code in range(ord('A'), ord('Z') + 1): s += chr(code) # 用编码值生成字符串,追加到s末尾 print(s) s2 = '' for code in range(65, 65 + 26): s2 += chr(code) # 追加一个大写字母 s2 += chr(code + 32) # 追加一个对应的小写字母 print(s2)
5、打印全世界所有的文字
# 打印全世界所有的文字 for code in range(0, 65536): ch = chr(code) print(ch, end='')
5、continue 语句
1、作用:
用于循环语句(while,for)中,不再执行本次循环continue之后的语句,重新开始一次新的循环
2、语法:
continue
3、说明:
1. 在while语句中执行continue,将会直接跳转到while语句的真值表达式处重新判断循环条件
2. 在 for 语句中执行continue语句,将会从可迭代对象中取下一个元素,绑定变量后再次进行循环
4、示例:
# 此示例示意contine语句的用法和作用 for x in range(5): if x == 2: continue print(x)
# 打印10以内的奇数 for x in range(10): if x % 2 == 0: # 是偶数,跳过 continue print(x)
# 打印10以内的奇数 for x in range(10): if x % 2 == 0: # 是偶数,跳过 continue print(x)
5、练习:
1. 求 1 ~ 100之间,所有不能被2, 3, 5, 7 整除的数的和
(跳过能整除的,剩下的就是不能整除的)
#方法1 s = 0 for x in range(1, 101): if x % 2 == 0: continue if x % 3 == 0: continue if x % 5 == 0: continue if x % 7 == 0: continue s += x print('和是:', s) #方法2 s = 0 for x in range(1, 101): if x % 2 == 0 or x % 3 == 0 or x % 5 == 0 or x % 7 == 0: continue # print(x) s += x print('和是:', s)
6、while中使用continue示例见:
while_continue.py
# 此示例示意在while中使用contine语句 # 略过2 x = 0 while x < 5: if x == 2: x += 1 continue print(x) x += 1
7、循环小结:
四条语句:
while 语句
for 语句
break 语句
continue 语句
可迭代对象:
str 字符串
range() 函数返回的对象
二、列表 list
问题:
如何将计算机运算的数据临时保存在一个地方,同时又方便添加,删除和修改等操作
容器
1、列表的定义:
列表是一种容器
列表是可以被改变的序列
列表是由一系列特定元素组成的,元素与元素之间可能没有任何的关联关系,但他们之间有先后顺序关系
python3的中的序列类型:
字符串 str
列表 list
元组 tuple
字节串 bytes
字节数组 bytearray
2、列表的创建:
1、创建空列表的字面值表达式
[] # 创建一个空列表
L = [] 变量L绑定一个新创建的空列表
2、创建非空的列表的字面值:
L = [1, 2, 3, 4]#L绑定一个新创建且含有四个元素的列表
L = ['Beijing', 'Shanghai', 'Shenzhen']
L = [1, 'Two', 3.14, '四']
L = [1, 2, [3.1, 3.2, 3.2], 4]
3、列表的构造函数 list
list() 生成一个空的列表,等同于 []
list(iterable) 用可迭代对象创建一个列表
示例:
L = list() # L = []
L = list("hello") # L = ['h','e','l','l','o',]
L = list(range(5)) # L = [0, 1, 2, 3, 4]
3、列表的运算:
1、算术运算:
+ += * *= (运算规则与字符串的运算规则相同)
+ 用于拼接列表,生成新的列表
x = [1, 2, 3]
y = [4, 5, 6]
z = x + y # z = [1,2,3,4,5,6]
+= 用原列表与右侧可迭代对象追加来修改原列表
语法:
列表变量 += 可迭代对象
示例:
x = [1, 2, 3]
y = [4, 5, 6]
x += y # x = [1, 2, 3, 4, 5, 6]
x += "ABC" # x = [1,2,3,4,5,6,'A','B','C']
x = [1, 2, 3]
x += range(4, 6) # x = [1, 2, 3, 4, 5]
# += 是改变原来的列表对象,并不会创建新的列表
# list_add_equal.py
# 列表是可变的对象, += 是修改原来的对象 x = [1, 2, 3] print(id(x)) # 139805087766920 x += [4, 5, 6] print(id(x)) # 139805087766920 # 字符串是不可变的对象 += 是创建新的对象,让变量绑定新的对象 # sx += "123" 等同于 sx = sx + '123' sx = "ABC" print(id(sx)) # 139805112114904 sx += "123" # sx = 'ABC123' print(id(sx)) # 139805080811480
* 生成重复的列表
x = [1, 2] * 3 # x = [1,2,1,2,1,2]
*= 生成重复的列表,并改变对变量的绑定
x = [1, 2, 3]
x *= 4 # x = [1,2,3,1,2,3,1,2,3,1,2,3]
2、列表的比较运算:
运算符:
< <= > >= == !=
比较规则与字符串的比较规则相同
示例:
[1,2,3] < [1, 2, 4] # True
[1, 2, 3] < [3, 2, 1] # True
[1, 2, 3] == [3, 2, 1] # False
[2, 3] >= [1, 2, 3] # True
[1, "2"] > ['2', 1] # 报错
["ABC", 1, 2, 3] < ["123", 3, 2] #
3、列表是可迭代对象
L = [1, 3, 5, 7]
for x in L:
print(x) # 1 3 5 7
练习:
1. 输入三行文字,将这三行文字保存于列表L中,并打印
如:
请输入: abc<回车>
请输入: 1234<回车>
请输入: 你好<回车>
生成如下列表L = ['abc', '1234', '你好']
print(L) # ['abc', '1234', '你好']
a = input('请输入:') # abc b = input('请输入:') c = input('请输入:') # 方法1 # L = [] # L += [a] # L += [b] # L += [c] # 方法2 L = [a, b, c] print(L)
2. 输入任意行文字,存于列表中L中,当不输入内容直接回车后结束输入:
1) 打印L列表中的内容
2) 打印出您刚才输入了几行文字信息
3) 打印出您刚才输入了多少个字符数据
L = [] # 先创建一个列表容器准备放数据 while True: s = input("请输入: ") # 让用户循环输入字符串 # 等用户输入完毕后,判断这个字符串是否为空 if s == '': break # 不再输入 L += [s] # 1) 打印L列表中的内容 print('L=', L) # 2) 打印出您刚才输入了几行文字信息 # print("您刚才输入了%d行文字" % len(L)) lines = 0 for _ in L: lines += 1 print("您刚才输入了%d行文字" % lines) # 3) 打印出您刚才输入了多少个字符数据 char_count = 0 for aline in L: char_count += len(aline) print('您刚才输入了%d个字符' % char_count)
练习:
1. 写一个程序,任意输入一个数,判断这个数是否是素数(prime)
素数(也叫质数),是只能被1和自身整除的正整数
如: 2 3 5 7 11 13 17 19 ....
提示:
用排除法: 当判断x是否为素数时,只要让x分别除以2, 3, 4, 5 ... x-1,只要能整数则x不是素数,否则x是素数
x = int(input('请输入一个整数: ')) if x < 2: print(x, '不是素数') else: # n大于等于2 for i in range(2, x): if x % i == 0: # 如果整除 print(x, '不是素数') break else: print(x, '是素数')
2. 输入一个正整数(代表树干的高度)
打印如下一棵圣诞树
如:
输入: 2
打印:
*
***
*
*
如:
输入: 3
打印:
*
***
*****
*
*
*
n = int(input("请输入树干的高度: ")) # 打印树叶部分 for i in range(1, n + 1): stars = 2 * i - 1 # 星号个数 blanks = n - i # 空格数 print(' ' * blanks + '*' * stars) # 打印树干部分 for _ in range(n): print(' ' * (n - 1) + '*')
3. 算出100~999之间的水仙花数(Narcissistic Number)
水仙花数是指百位的3次方 + 十位的3次方 + 个位的3次方等于原数的整数
例如:
153 = 1**3 + 5**3 + 3 ** 3
答案:
153 370 ...
# 方法1 for x in range(100, 1000): bai = x // 100 # 百位 shi = x % 100 // 10 # 十位 ge = x % 10 if x == bai ** 3 + shi ** 3 + ge ** 3: print(x) 方法2 for x in range(100, 1000): s = str(x) # 转为字符串 bai = int(s[0]) shi = int(s[1]) ge = int(s[2]) if x == bai ** 3 + shi ** 3 + ge ** 3: print(x) # 方法3(循环嵌套) for bai in range(1, 10): for shi in range(10): for ge in range(10): # print(bai, shi, ge) x = bai * 100 + shi * 10 + ge if x == bai ** 3 + shi ** 3 + ge ** 3: print(x)
posted on 2018-10-12 17:15 破天荒的谎言、谈敷衍 阅读(896) 评论(0) 收藏 举报
浙公网安备 33010602011771号