循环语句进阶
1. while 语句嵌套
嵌套示意:
while 真值表达式:
⋯⋯
while 真值表达式:
⋯⋯
else:
⋯⋯
⋯⋯
else:
⋯⋯
练习: 打印1-20的整数,打印在一行显示,每一个数字之间用一个空格隔开 1 2 3 4 5 6 7 8 9 ⋯⋯ 打印十行
x = 1
while x <= 10:
y = 1
while y <= 20:
print(y, end=" ")
y += 1
print()
x += 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
练习: 输入一个数,打印指定宽度的正方形比如输入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("请输入数值:"))
i = 1
while i <= n:
j = 0
while j < n:
print(i + j, end=' ')
j += 1
else:
print()
i += 1
else:
print("结束!")
请输入数值: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
结束!
练习: 写一个程序, 输入一个开始整数值用变量begin绑定, 输入一个结束整数值用变量end绑定, 打印从begin 到 end(不包括end)的每一个整数,每8个打印在一行内, 如:
请输入开始值:5
请输入结束值:100
5 6 7 8 9 10 11 12
13 14 15 16⋯⋯
⋯⋯
begin = int(input("输入begin:"))
end = int(input("输入end:"))
n = end - begin
i = 0
while i <= (n // 8):
j = 0
while j < 8:
print(begin, sep=" ", end=" ")
j += 1
begin += 1
else:
print()
i += 1
输入begin:5
输入end:30
5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
练习: 写程序用while语句生成如下字符串:
ABCDEFG⋯⋯XYZ
AaBbCcDdEeFfGg⋯⋯XxYyZz
n1 = ord('A')
n2 = ord('a')
i = 0
while i < 26:
print(chr(n1 + i), end = "")
i += 1
else:
print()
i = 0
while i < 26:
print(chr(n1 + i), chr(n2 + i), sep="", end = "")
i += 1
else:
print()
ABCDEFGHIJKLMNOPQRSTUVWXYZ
AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
2. break 语句
作用:
用于循环语句(while,for)中,用来终止当前循环语句的执行。
说明:
break 语句执行后,此循环语句的break之后的语句将不再执行
break 语句通常和if语句组合使用
break 语句终止循环时,循环语句的else子句的语句将不会被执行
break 语句只能终止当前循环语句的执行,如果有循环嵌套时,不会跳出嵌套外重循环
break 语句只能在循环语句(while,for语句)内部使用,不能用来终止单独的if语句,除非if在循环内嵌套
练习: 写一个程序,输入一系列数,把这些数加起来,当输入0时结束
s = 0
i = 0
while i < 10:
x = int(input("输入一个数字(输入0结束):"))
if x == 0:
break
s += x
i += 1
print("和为:", s)
输入一个数字(输入0结束):2
输入一个数字(输入0结束):3
输入一个数字(输入0结束):4
输入一个数字(输入0结束):0
和为: 9
3. 死循环:
死循环是指条件一直成立的循环
死循环通常用break语句来终止循环
死循环的else子句永远不会执行
4. for 语句:(可迭代循环)
作用:
用来遍历序列或可迭代对象的每个元素, 不重复的查看每一个元素
可迭代对象是指能依次获取数据的对象(包括所有的容器类):
字符串 str
列表 list
元组 tuple
字典 dict
集合 set
迭代器等⋯⋯
for 语法:
for 变量列表 in 可迭代对象:
语句块1
⋯⋯
else:(当可迭代对象提供数据失败才执行else部分)
语句块2
⋯⋯
说明:
1、变量用可迭代对象每次给出的元素依次赋值,然后执行语句块1
2、可迭代对象不能提供数据元素后,执行else子句部分语句,然后退出循环
3、else 子句部分可以省略(同while语句一样)
4、当在循环内用break终止循环时,else子句不会执行
练习: 任意输入一段字符串, 计算出字符'a'和空格的个数,并打印出来
s = input("请输入字符串:")
i = 0
j = 0
for x in s:
if x == 'a':
i += 1
if x == ' ':
j += 1
else:
print(i)
print(j)
请输入字符串:adfads dfadfa adfaf a
7
6
5. 内置函数(5) range函数
函数意义:
range(stop) 从零开始生成一个整数后做加1操作,直至stop为止(不包含stop)
range(start, stop[, step]) 从start开始,每次生成一个整数后移动step,直到stop为止(不包含stop,且step可以是负值)
作用:
用来生成一系列整数的可迭代对象(整数序列生成器)
range(4) # 生成0, 1, 2, 3
range(3, 6) # 生成3, 4, 5
range(1, 10, 2) # 生成1, 3, 5, 7, 9
range(5, 0) # 不生成任何整数
range(5, 0, -2) # 生成5, 3, 1
练习:写一个程序, 输入一个开始整数值用变量begin绑定, 输入一个结束整数值用变量end绑定, 打印从begin 到 end(不包括end)的每一个整数,每8个打印在一行内
请输入开始值:5
请输入结束值:100
5 6 7 8 9 10 11 12
13 14 15 16⋯⋯
s1 = int(input("请输入begin:"))
s2 = int(input("请输入end:"))
count = 0
for i in range(s1, s2):
print(i, end = " ")
count += 1
if count % 8 == 0:
print()
else:
print()
请输入begin:5
请输入end:50
5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44
45 46 47 48 49
实例:模拟打印进度条
import sys
import time
for i in range(20):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)
else:
print()
####################
6. for 语句的嵌套:
for x in X:
for y in Y:
语句
while True:
for z in Z:
语句
练习: 已知有字符串“ABC”和字符串“123”,用以上两个字符串生成如下字符串
“A1”,“A2”,“A3”,“B1”,“B2”,“B3”,“C1”⋯⋯
for x in "ABC":
for y in "123":
print(x + y, ", ", end="", sep="")
A1, A2, A3, B1, B2, B3, C1, C2, C3,
练习:输入一个数,打印指定宽度的正方形, 如输入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 x in range(1, n + 1):
for y in range(x, n + x):
print(y, end = " ")
else:
print()
请输入:8
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9 10
4 5 6 7 8 9 10 11
5 6 7 8 9 10 11 12
6 7 8 9 10 11 12 13
7 8 9 10 11 12 13 14
8 9 10 11 12 13 14 15
7. continue 语句:
作用:
用于循环语句中(while,for)中,当continue执行后, 不再执行本次循环内continue之后的语句,重新开始一次新的循环
continue说明:
在for语句中执行continue语句,将会从可迭代对象中取下一个元素,绑定变量后再次进行循环;
在while语句中,执行continue将会直接跳转到while语句的真值表达式处重新判断循环条件(避免死循环,在continue之前要进行循环变量的改变)
练习:用两种循环实现打印0-10之间的所有奇数
for x in range(11):
if x % 2 == 0:
continue
print(x)
1
3
5
7
9
练习:写程序,输入一个正整数,判断这个数是否是素数(prime)
n = int(input("请输入:"))
if n == 2:
print("It's a prime")
else:
i = 2
while i <= n // 2:
if n % i == 0:
print("It's not a prime")
break
i += 1
else:
print("It's a prime")
请输入:4
It's not a prime
练习:把判断一个数是否为素数的算法,改用while循环
x = int(input("请输入一个整数:"))
if x == 1:
print(x, "不是素数")
else:
i = 2
while i < x:
if x % i == 0:
print(x, "不是素数!")
break
i += 1
else:
print(x, "素数")
请输入一个整数:5
5 素数
练习:用字符串*号 打印三角形,要求输入一个整数,此整数代表三角形的高度,打印三角形, 如输入:3
*
***
*****
n = int(input("请输入数字:"))
for x in range(n):
s = "*" * (2 * x + 1)
print(s.center(n * 2))
请输入数字:5
*
***
*****
*******
*********
算出100 - 1000以内的水仙花数(Narcissistic Nnmber)水仙花数是指百位的3次方加十位的三次方加个位的三次方等于原数字。例如:153 = 1**3 + 5**3 + 3**3
for x in range(100, 1000):
s = str(x)
b = 0
for i in s:
b += int(i) ** 3
else:
if x == b:
print(x)
153
370
371
407
练习: 求100以内的全部素数(primes)并打印循环嵌套
for x in range(2, 100):
for i in range(2, x):
if x % i == 0:
break
else:
print(x, "It's a prime")
2 It's a prime
3 It's a prime
5 It's a prime
7 It's a prime
11 It's a prime
13 It's a prime
17 It's a prime
19 It's a prime
23 It's a prime
29 It's a prime
31 It's a prime
37 It's a prime
41 It's a prime
43 It's a prime
47 It's a prime
53 It's a prime
59 It's a prime
61 It's a prime
67 It's a prime
71 It's a prime
73 It's a prime
79 It's a prime
83 It's a prime
89 It's a prime
97 It's a prime
练习:输入一段字符串,把字符串按Unicode值从小到大排列后组成新的字符串:
输入:BACED <回车>
输出:ABCDE
s = input("输入:")
L = sorted(s)
# print("".join(L))
out_str = ''
for x in L:
out_str += x
print("输出", out_str)
输入:BACED
输出 ABCDE
练习: 用while语句,实现如下功能:
把1-100之间的数(包含100)中的奇数添加到一个列表odds中,把偶数添加到一个列表evens中,打印两个列表
odds = []
evens = []
i = 1
while i <= 100:
if i % 2 == 1:
odds.append(i)
else:
evens.append(i)
i += 1
else:
print(odds)
print(evens)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
练习: 用while语句,实现如下功能:
猴子吃桃子问题:
有一只小猴子,摘了很多桃。第一天吃了一半,感觉不饱又吃了一个第二天又吃了剩下的一半,感觉不饱又吃了一个.......... 以此类推, 到第十天,发现只剩下一个了,请问第一天摘了多少桃子
s = 1
i = 1
while i < 10:
s = (s + 1) * 2
i += 1
else:
print(s)
1534
练习:
完全数:
1+2+3=6
1*6=6
2*3=6
1,2,3都为6的因数, 完全数是指除自身以外的所有因数之和相加等于自身的数求3个完全数并打印
n = 2
while n < 10000:
i = 2
s = 1
j = 1
while i < n:
if n % i == 0:
s += i
i += 1
else:
if s == n:
print(n)
n += 1
6
28
496
8128
同名公众号: 庄AC