Python基础--循环语句进阶

循环语句进阶

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值