python用于循环结构的关键词_Python 100天练习 — Day4 循环结构

本文以GitHub上100天python从新手到大师为素材,规划为约100天的练习,每次的学习和总结均发在这里。有错误的地方还请朋友们指正。

应用场景

在编程的过程中,我们常常会遇到一些需要重复的地方,例如在模拟驾驶一辆车时,你需要让车时刻保持前进,这时候就需要循环这个操作,而不是重复手写无数行前进的的代码。

在Python中,使用 for - in 或 while 关键词来实现循环结构。

for - in 结构

for - in结构用于 已经知道要循环次数情况。

下面通过一个例子展示:

"""

从1到100求和

"""

total = 0

for i in range(101):

total += i

# print("总和为 %d" %total)1

2

3

4

5

6

7

8

9

i 是临时变量,用于存储循环结构依次拿取的循环变量

range( )函数可生成1个可迭代对象 在一定数值范围内按照一定的步长生成数

range(100) # 生成从0到99内整数

range(1,100) # 生成从1到99内整数

range(1,100,2) # 可以产生一个1到99的奇数序列,其中2是步长,即数值序列的增量。1

2

3

下面一个例子说明range的用法:

"""

求100内偶数和

"""

total = 0

for i in range(2,101,2):

total += i

print("百内偶数和为 %d" %total)

total = 0

for i in range(1,101):

if i % 2 == 0:

total += i

else:

pass

print(total)1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

while循环

while循环适合于不知道具体循环次数的情况,while后接一个可以转换或取布尔值的条件,如果该布尔值为True则继续执行循环,否则跳出循环。

下面通过一个例子来说明:

"""

猜数字游戏

计算机出一个1~100之间的随机数由人来猜

计算机根据人猜的数字分别给出提示大一点/小一点/猜对了

"""

import random

number = random.randint(0,100) # 选取随机被猜数

guess = False

counter = 0 # 记次数,如果超过7次跳出循环

while(guess == False):

guess_number = int(input("这次你猜是几?"))

counter += 1 # 次数+1

if guess_number > number:

print("你猜大了")

elif guess_number == number:

print("你猜对了!")

break # 跳出循环

else:

print("你猜小了!")

if counter > 7:

print("次数已用尽!")1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

beak 和 continue 以及嵌套

在while循环中,我们发现跳出循环可以不将while后接的布尔值变化,直接使用break来跳出循环。关键词break、continue都可以达成跳出循环的功能,但两者还有一定的区分:

break跳出的是它所在的循环,即break该循环就不继续。

continue只是跳出此次循环,仍执行剩余代码

例如

for i in range(1, 10):

if i % 2 == 0:

continue

print(i)1

2

3

4

打印出来结果是 1、3、5、7、9

而假如使用break的话如下:

for i in range(1, 10):

if i % 2 == 0:

break

print(i)1

2

3

4

打印出来的则只有1

和分支结构一样,循环结构也可以进行嵌套。下面用嵌套循环来输出九九乘法表:

"""

输出乘法口诀表(九九表)

"""

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

2

3

4

5

6

7

8

课后练习

今天的习题我的操作部分和文字资料内的解法不太一样,我都贴一下以免有错误。

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

提示:素数指的是只能被1和它本身整除的、大于1的整数

代码如下:

"""

练习1:输入一个正整数判断是否为素数

"""

from math import sqrt

num = int(input("请输入一个正整数: "))

is_prime = True

end_num = int(sqrt(num))

test_num = 2

while is_prime:

if num > 1 and num % test_num == 0 and test_num <= end_num:

print("%d 不是素数" %num)

break

elif test_num < end_num:

test_num += 1

else:

print("%d 是素数" %num)

is_prime = False1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

官方解法:

"""

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

Version: 0.1

Author: 骆昊

Date: 2018-03-01

"""

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)1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

练习2 输入两个正整数,计算他们的最大公约数和最小公倍数

代码如下:

num_1 = int(input("输入第一个正整数"))

num_2 = int(input("输入第二个正整数"))

gcd = 1

if num_1 > num_2:

num_1, num2 = num_2, num_1 # 互换

for i in range(num_1, 1, -1):

if num_1 % i == 0 and num_2 % i == 0:

gcd *= i

num_2 /= i

num_1 /= i

print("最大公约数为 %d" % gcd)

print("最小公倍数为 %d" % (num_1 * num_2 * gcd))1

2

3

4

5

6

7

8

9

10

11

12

官方代码如下:

"""

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

Version: 0.1

Author: 骆昊

Date: 2018-03-01

"""

x = int(input('x = '))

y = int(input('y = '))

# 如果x大于y就交换x和y的值

if x > y:

# 通过下面的操作将y的值赋给x, 将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))

break1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

练习3 打印如下所示的三角形图案。

代码如下:

"""

打印如下所示的三角形图案

*

**

***

****

*****

*

**

***

****

*****

*

***

*****

*******

*********

"""

for i in range(1,6):

print("*"*i)

for i in range(1,6):

print(" "*(5-i) + "*"*i)

for i in range(1,6):

print(" "*(5-i) + "*"*(2*i - 1))1

2

3

4

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

官方代码如下:

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()1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

本文在作者学习完文字内容后,以列出标题大纲的方式让自己填充内容,以求对学习的内容有一个复习的作用,同时对照文字学习材料进行修正,尽量保证不误人子弟。如有错误之处还请朋友们多多指正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值