本文以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)
i 是临时变量,用于存储循环结构依次拿取的循环变量
range( )函数可生成1个可迭代对象 在一定数值范围内按照一定的步长生成数
range(100) # 生成从0到99内整数
range(1,100) # 生成从1到99内整数
range(1,100,2) # 可以产生一个1到99的奇数序列,其中2是步长,即数值序列的增量。
下面一个例子说明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)
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("次数已用尽!")
beak 和 continue 以及嵌套
在while循环中,我们发现跳出循环可以不将while后接的布尔值变化,直接使用break来跳出循环。关键词break、continue都可以达成跳出循环的功能,但两者还有一定的区分:
break跳出的是它所在的循环,即break该循环就不继续。
continue只是跳出此次循环,仍执行剩余代码
例如
for i in range(1, 10):
if i % 2 == 0:
continue
print(i)
打印出来结果是 1、3、5、7、9
而假如使用break的话如下:
for i in range(1, 10):
if i % 2 == 0:
break
print(i)
打印出来的则只有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 输入一个正整数判断是不是素数
提示:素数指的是只能被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 = False
官方解法:
"""
输入一个正整数判断它是不是素数
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)
练习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))
官方代码如下:
"""
输入两个正整数计算它们的最大公约数和最小公倍数
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))
break
练习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))
官方代码如下:
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()
本文在作者学习完文字内容后,以列出标题大纲的方式让自己填充内容,以求对学习的内容有一个复习的作用,同时对照文字学习材料进行修正,尽量保证不误人子弟。如有错误之处还请朋友们多多指正,谢谢!