0%

python日常:循环结构

引言:今日学习循环结构

for-in循环

用for-in计算1~100求和结果

1
2
3
4
sum = 0
for x in range(0,101):
sum += x
print(sum)

5050

※注意※:
1.”+=”的意思是两边相加,值赋予左边
2.用到了range 类型 ,range(101)可以产生一个0到100的整数序列、range(1,100,2)可以产生一个1到99的奇数序列,其中的2是步长,即数值序列的增量

以此类推可以计算1~100的偶数求和

1
2
3
4
sum = 0
for x in range(2,101,2):
sum += x
print(sum)

2550

也可根据昨天学的if语句分支结构计算0~100的偶数求和

1
2
3
4
5
sum = 0
for x in range(0,101,2):
if x % 2 == 0 :
sum += x
print(sum)

2550

※注意※:
if-in循环用于计算知道循环执行次数或者要对一个容器进行迭代,如果不知道循环多少次,就要用到while循环。

while循环

while循环可以通过一个能够产生或转换出bool值的表达式来控制循环,True循环继续,False循环结束

猜数字游戏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import random
anser = random.randint(1,99)
counter = 0
while True :
counter += 1
number = int(input('请输入你猜的数字:'))
if anser > number :
print('大一点')
elif anser < number :
print('小一点')
else:
print('恭喜你猜对了')
break
print('你一共猜了%d次' % counter)
if counter > 7 :
print('你咋猜的啊??????')

请输入你猜的数字:50
大一点
请输入你猜的数字:60
大一点
请输入你猜的数字:80
小一点
请输入你猜的数字:76
小一点
请输入你猜的数字:72
小一点
请输入你猜的数字:65
大一点
请输入你猜的数字:69
小一点
请输入你猜的数字:67
大一点
请输入你猜的数字:68
恭喜你猜对了
你一共猜了9次
你咋猜的啊??????

※注意※:
1.注意python语法使用缩进来结束if或者while,while循环结束要用break来结束循环(要在嵌套结构里结束)
2.第二个if结构不要再第一个if结构里

循环结构嵌套输出九九乘法表

1
2
3
4
for i in range(1, 10):
for j in range(1, i + 1):
print('%d*%d=%d' % (i, j, i * j), end='\t')
print()

1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
(markdown语法真是够了,要加那么多转义反斜杠…)

**※注意※:
1.end=’’用法:例如print(“#”,end=” \n”),默认换行,print(“#”,end=” “)则在循环中不换行
2.python的转移符号:

\(在行尾时)     续行符
\\    反斜杠符号
\‘    单引号
\“    双引号
\a    响铃
\b    退格(Backspace)
\e    转义
\000    空
\n    换行
\v    纵向制表符
\t    横向制表符
\r    回车
\f    换页
\oyy   八进制数,yy代表的字符,例如:\o12代表换行
\xyy   十六进制数,yy代表的字符,例如:\x0a代表换行
\other   其它的字符以普通格式输出**

练习

输入一个正整数判断是不是素数

1
2
3
4
5
6
7
8
9
10
11
12
13
from math import sqrt

num = int(input('请输入一个正整数: '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print('%d是素数' % num)
else:
print('%d不是素数' % num)

请输入一个正整数: 3
3是素数

**※注意※:
1.判断是否为素数:在一般领域,对正整数n,如果用2到sqrt(n)之间的所有整数去除,均无法整除,则n为质数
质数大于等于2 不能被它本身和1以外的数整除

疑问:for-in前用 is_prime = True,for-in里用is_prime = False 结束,最后判断的时候为什么用is_prime和num不等于1做条件?
猜想:for-in里如果可以整除,is_prime为False,就是为0.然后在下面判断is_prime和num是否为1,来判断是否为素数**

输入两个正整数,计算最大公约数和最小公倍数

1
2
3
4
5
6
7
8
9
x = int(input('x = '))
y = int(input('y = '))
if x > y:
x, y = y, x
for factor in range(x, 0, -1):
if x % factor == 0 and y % factor == 0:
print('%d和%d的最大公约数是%d' % (x, y, factor))
print('%d和%d的最小公倍数是%d' % (x, y, x * y // factor))
break

x = 28
y = 42
28和42的最大公约数是14
28和42的最小公倍数是84

**※注意※:
1.最大公约数计算:一个数可以整除另外两个数,那么这个数是另外两个数的最大公约数

2.(a,b)[a,b]=ab(a,b均为整数),(a,b)为最大公约数,[a,b]为最小公倍数

疑问:range(x, 0, -1)x到0之间取值,步数为-1是怎么取值的
解答:表示从x开始,到0为止(不包括0),取其中所有的整数 (为什么不用range(0,x,1)?**

打印三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
row = int(input('请输入行数: '))
for i in range(row):
for _ in range(i + 1):
print('*', end='')
print()


for i in range(row):
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()

for i in range(row):
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()

请输入行数: 3
x
xx
xxx
 x
 xx
xxx
 x
 xxx
xxxxx

※注意※:
1.for _ in range()的 _ 的意思是只要这次for循环结束之后,就不管了。咱要的只是循环这个过程
2.还需要多练,一开始看不懂,看了10分钟才明白

-------------本文结束感谢您的阅读-------------
+ +