Python Day4 循环关键字和练习【零基础】

发布于:2023-02-17 ⋅ 阅读:(591) ⋅ 点赞:(0)

Day4 循环关键字

1. 循环关键字

1.1 continue和break

continue 和 break都是循环体关键字(只能出现在循环体中)
1)continue - 结束一次循环(当触发到continue时,结束当次循环,重头开始下一次循环)

  • 在执行循环的时候如果遇到continue,那么这一次结束循环,直接进入下一次循环
  • 或:条件语句成立时,continue被执行,continue后面的语句没机会执行,再进入下一次循环
    2)break - 结束整个循环(当触发到break时,打破整个循环,只有循环break之前执行的代码存活)
  • 在执行循环体的时候,如果遇到break,整个循环结束且不进入下一次循环
  • 或:条件语句成立时,break被执行,break后面的语句没机会执行,且不进入下一次循环

1.2 区分:

# continue
for i in range(7):
    if i == 5:
        continue
    print(i)

0
1
2
3
4
6

# break
for i in range(7):
    if i == 5:
        break
    print(i)

0
1
2
3
4

2. while使用套路

2.1 格式

while True:
    每次循环需要做的事情(需要重复执行的代码)
    if 循环结束条件:
        break

2.2 练习

猜数字游戏:
游戏开始计算机产生一个0-100随机数,
用户输入猜的数字直到猜对为止。

from random import randint
num = randint(0, 101)
sum1 = 0
while True:
    guess = int(input('请输入猜的数字:'))
    sum1 += 1
    if guess == num:
        if sum1 <= 5:
            print('猜对啦,天才!')
        elif sum1 <= 10:
            print('诶呦!不错哦!')
        else:
            print('猜对啦,脑子慢啦!')
        break
    elif guess > num:
        print('猜大啦,再小点!')
    else:
        print('猜小啦,再大点!')

请输入猜的数字:50
猜小啦,再大点!
请输入猜的数字:75
猜大啦,再小点!
请输入猜的数字:62
猜小啦,再大点!
请输入猜的数字:70
猜大啦,再小点!
请输入猜的数字:66
猜小啦,再大点!
请输入猜的数字:68
猜大啦,再小点!
请输入猜的数字:67
诶呦!不错哦!

3. else的用法

  1. 完整的for循环:
for 变量 in 序列:
    循环体
else:
    代码段
  1. 完整的while循环:
while 条件语句:
    循环体
else:
    代码段

1)else的存在不影响原循环的执行
2)如果else之前的循环自然死亡(没有条件被执行),那么else之后的代码就会被执行。
如果else之前的循环有遇到break,那么else之后的代码不会被执行。

for x in range(5):
    print(x, '====')
    if x > 3:
        break
    print(x, '++++')
else:
    print('else!')

0 ====
0 ++++
1 ====
1 ++++
2 ====
2 ++++
3 ====
3 ++++
4 ==== (break,没有++++)

4. 练习

4.1 基础题

  1. 根据输入的成绩的范围打印及格 或者不及格
score = int(input('请输入您的成绩:'))
if score >= 60:
    print('及格啦!')
else:
    print('不及格,下次加油!')

请输入您的成绩:59
不及格,下次加油!

  1. 根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!
age = int(input('请输入您的年龄:'))
if 0 <= age < 18:
    print('没成年!')
elif 18 <= age <= 150:
    print('成年啦!')
else:
    print('这不是人!')

请输入您的年龄:152
这不是人!

  1. 输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息a-b的结果不是奇数
a = int(input('请输入一个整数:'))
b = int(input('请输入一个整数:'))
if (a-b) % 2 == 1:
    print('a-b的结果为奇数')
else:
    print('a-b的结果不是奇数')

请输入一个整数:15
请输入一个整数:12
a-b的结果为奇数

  1. 使用for循环输出 0~100内所有3的倍数。
for i in range(1, 100):
    if i % 3 == 0:
        print(i, '是3的倍数')

优化:

for i in range(3, 100, 3):
    print(i, '是3的倍数')

3 是3的倍数
6 是3的倍数
9 是3的倍数
12 是3的倍数
15 是3的倍数
18 是3的倍数
21 是3的倍数
24 是3的倍数
27 是3的倍数
30 是3的倍数
33 是3的倍数
36 是3的倍数
39 是3的倍数
42 是3的倍数
45 是3的倍数
48 是3的倍数
51 是3的倍数
54 是3的倍数
57 是3的倍数
60 是3的倍数
63 是3的倍数
66 是3的倍数
69 是3的倍数
72 是3的倍数
75 是3的倍数
78 是3的倍数
81 是3的倍数
84 是3的倍数
87 是3的倍数
90 是3的倍数
93 是3的倍数
96 是3的倍数
99 是3的倍数

  1. 使用for循环输出100~200内个位数或者十位数能被3整除的数。
for i in range(101, 200):
    if i // 10 % 10 % 3 == 0 or i % 10 % 3 == 0:
        print(i, '符合条件')

优化:

for i in range(100, 200):
    ge = i % 10
    shi = i // 10 % 10
    if ge % 3 == 0 or shi % 3 == 0:
        print(i, '符合条件')

101 符合条件
102 符合条件
103 符合条件
104 符合条件
105 符合条件
106 符合条件
107 符合条件
108 符合条件
109 符合条件
110 符合条件
113 符合条件
116 符合条件
119 符合条件
120 符合条件
123 符合条件
126 符合条件
129 符合条件
130 符合条件
131 符合条件
132 符合条件
133 符合条件
134 符合条件
135 符合条件
136 符合条件
137 符合条件
138 符合条件
139 符合条件
140 符合条件
143 符合条件
146 符合条件
149 符合条件
150 符合条件
153 符合条件
156 符合条件
159 符合条件
160 符合条件
161 符合条件
162 符合条件
163 符合条件
164 符合条件
165 符合条件
166 符合条件
167 符合条件
168 符合条件
169 符合条件
170 符合条件
173 符合条件
176 符合条件
179 符合条件
180 符合条件
183 符合条件
186 符合条件
189 符合条件
190 符合条件
191 符合条件
192 符合条件
193 符合条件
194 符合条件
195 符合条件
196 符合条件
197 符合条件
198 符合条件
199 符合条件

  1. 使用for循环统计100~200中十位数是5的数的个数
count = 0
for i in range(100, 201):
    if i // 10 % 10 == 5:
        count += 1
print(count)

优化:

count = 0
for i in range(150, 160):
    count += 1
print(count)

10

  1. 使用for循环打印50~150中所有能被3整除但是不能被5整除的数
for i in range(50, 151):
    if i % 3 == 0 and i % 5 != 0:
        print(i, '能被3整除但是不能被5整除')

优化:

for i in range(51, 150, 3):
    if i % 5 != 0:
        print(i, '能被3整除但是不能被5整除')

51 能被3整除但是不能被5整除
54 能被3整除但是不能被5整除
57 能被3整除但是不能被5整除
63 能被3整除但是不能被5整除
66 能被3整除但是不能被5整除
69 能被3整除但是不能被5整除
72 能被3整除但是不能被5整除
78 能被3整除但是不能被5整除
81 能被3整除但是不能被5整除
84 能被3整除但是不能被5整除
87 能被3整除但是不能被5整除
93 能被3整除但是不能被5整除
96 能被3整除但是不能被5整除
99 能被3整除但是不能被5整除
102 能被3整除但是不能被5整除
108 能被3整除但是不能被5整除
111 能被3整除但是不能被5整除
114 能被3整除但是不能被5整除
117 能被3整除但是不能被5整除
123 能被3整除但是不能被5整除
126 能被3整除但是不能被5整除
129 能被3整除但是不能被5整除
132 能被3整除但是不能被5整除
138 能被3整除但是不能被5整除
141 能被3整除但是不能被5整除
144 能被3整除但是不能被5整除
147 能被3整除但是不能被5整除

  1. 使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
count = 0
for i in range(50, 151):
    if i % 3 == 0 and i % 5 != 0:
        count += i
print(count)

优化:

count = 0
for i in range(51, 151, 3):
    if i % 5 != 0:
        count += i
print(count)

2682

  1. 统计100以内个位数是2并且能够被3整除的数的个数。
count = 0
for i in range(100):
    if i % 10 == 2 and i % 3 == 0:
        count += 1
print(count)

优化:

count = 0
for i in range(2, 100, 10):
    if i % 3 == 0:
        count += 1
print(count)

3

注:优化代码是程序员的职业素养,就从现在开始养成吧!

4.2进阶题

  1. 输入任意一个正整数,求他是几位数?
num = int(input('请输入一个正整数:'))
count = 1
while num // 10 != 0:
    count += 1
    num //= 10
print('该整数为', count, '位数', sep='')

请输入一个正整数:1111
该整数为4位数

  1. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

    ⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。

for i in range(100, 1000):
    if (i // 100) ** 3 + (i % 100 // 10) ** 3 + (i % 10) ** 3 == i:
        print('水仙花数是:', i)

水仙花数是: 153
水仙花数是: 370
水仙花数是: 371
水仙花数是: 407

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = int(input('请输入一个素数:'))
for i in range(2, num):
    if num % i != 0:
        print(num, '是素数')
        break
    else:
        print(num, '不是素数')

优化:

num = int(input('请输入一个素数:'))
count = 0
for i in range(2, num):
    if num % i == 0:
        count += 1
        break
if count == 0:
    print(num, '是素数')
else:
    print('不是素数')

请输入一个素数:23
23 是素数

  1. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{j}*{i}={i * j}', end='\t')
    print()

>1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81

  1. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for i in range(0, 35):
    for j in range(0, 51):
        if 6 * i + 4 * j + (100 - i - j) == 200:
            print('大马有:', i, '匹,', '中马有:', j, '匹,', '小马有:', (100 - i - j), '匹。', sep='')

大马有:2匹,中马有:30匹,小马有:68匹。
大马有:5匹,中马有:25匹,小马有:70匹。
大马有:8匹,中马有:20匹,小马有:72匹。
大马有:11匹,中马有:15匹,小马有:74匹。
大马有:14匹,中马有:10匹,小马有:76匹。
大马有:17匹,中马有:5匹,小马有:78匹。
大马有:20匹,中马有:0匹,小马有:80匹。


网站公告

今日签到

点亮在社区的每一天
去签到