一般编程语言都有循环语句,循环语句允许我们执行一个语句或语句组多次。
break
用于跳出本层循环continue
用于跳出本次循环,继续执行下一次循环pass
空语句,用于占位,为了保持程序结构的完整性
嵌套循环
# Python 语言允许在一个循环体里面嵌入另一个循环。
# for 循环嵌套语法
while循环
# 格式
# while 循环条件:
# 循环体
以下4个累加练习用到i和sum_res两个变量:
# 定义一个自增变量(用于循环体中)
i = 0
# 定义一个存储累加和的变量(sum)
sum_res = 0
【练习1】求1到100的累加和
while i <= 100:
print('当前执行的循环是第{}次'.format(i))
sum_res += i # 累加
i += 1 # 自增
print('当前i的值是{}'.format(i))
print(sum_res)
—— 当前执行的循环是第0次
当前i的值是1
当前执行的循环是第1次
当前i的值是2
当前执行的循环是第2次
...
当前i的值是99
当前执行的循环是第99次
当前i的值是100
当前执行的循环是第100次
当前i的值是101
5050
【练习2】计算1~100之间偶数的累加和
while i <= 100:
if i % 2 == 0:
sum_res += i
i += 1 # 注意此处的语句!!!
print(sum_res)
——2550
【练习3】累加和大于1000时输出sum_res
while i <= 100:
sum_res += i # 注意此处的语句!!!
if sum_res > 1000:
break
i += 1
print(sum_res)
—— 1035
【练习4】计算1~100之间偶数的累加和
while i <= 100:
if i % 2 != 0: # 当为奇数时,i=i+1,跳过计算回到循环开头
i += 1 # 注意此处的语句!!!
continue
sum_res += i
i += 1 # 注意此处的语句!!!
print(sum_res)
—— 2500
- while循环的嵌套
# 格式:
while expression:
while expression:
statement(s)
statement(s)
【练习】在控制台输出下面图形:
# *
# * *
# * * *
# * * * *
# * * * * *
# 方法一:
print(''' # print(''' ''')可实现跨行输出
*
* *
* * *
* * * *
* * * * *
''')
—— *
* *
* * *
* * * *
* * * * *
# 方法二:
i = 0
while i <= 5:
j = 1
while j <= i:
print('*', end=' ')
j += 1
print(end='\n')
i += 1
—— *
* *
* * *
* * * *
* * * * *
# 结论:1. 里层循环负责每行的输出,
# 2. 外层循环负责换行
【练习】九九乘法表(while循环)
i = 1
while i <= 9:
j = 1
while j < i+1:
print('{}x{}={}'.format(j, i, i*j), end=' ')
j += 1
print(end='\n')
i += 1
# 结论:要搞懂自增是在哪个环节进行的,此方法容易搞糊涂,不推荐在明确执行次数时使用,反而推荐在不明确执行次数时使用。
for循环
# 语法格式:iterable可迭代的
# 格式:
# for iterating_var in sequence:
# statements(s)
# 例:
for letter in '123':
print(letter)
—— 1
2
3
# 取出字符串:
for zifuchuan in '梁番薯梁非凡':
print(zifuchuan, end='\t') # 逐个元素输出
print('\n') # 换行
i = 0
name = '梁番薯梁非凡'
while i < len(name):
print(name[i], end='\t')
i += 1
# 上面的循环无法进行计数
# ----------------------------------------
# *** 拓展***
# 迭代器:range() # 左闭右开
# Python函数range()让你能够轻松地生成一系列的数字。例如,可以像下面这样使用函数range()来打印一系列的数字:
# for可用于循环计数
for x in range(10):
print(x)
# 相等于:
# for x in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
# print(x)
—— 梁 番 薯 梁 非 凡
梁 番 薯 梁 非 凡 0 # 当在print()函数中声明end的值时,接下来的元素输出时会接在后面。
1
2
3
4
5
6
7
8
9
- for循环的嵌套
# 格式
for iterating_var in sequence:
# for iterating_var in sequence:
# statements(s)
# statements(s)
# 例:
for num in range(10,20): # 迭代 10 到 20 之间的数字
for i in range(2,num): # 根据因子迭代
if num%i == 0: # 确定第一个因子
j=num/i # 计算第二个因子
print ('%d 是一个合数' % num)
break # 跳出当前循环
else: # 循环的 else 部分
print ('%d 是一个质数' % num)
—— 10 是一个合数
11 是一个质数
12 是一个合数
13 是一个质数
14 是一个合数
15 是一个合数
16 是一个合数
17 是一个质数
18 是一个合数
19 是一个质数
【练习】九九乘法表(for循环)
for i in range(1, 10):
for j in range(1, i+1):
print('{}x{}={}'.format(j, i, j*i), end=' ')
# print('{}x{}={}\t'.format(i, j, i*j), end='') # 用\t时,相当于tab,后面end等于空值即可
print(end='\n')
# 结论:明确执行的次数时,用for循环更通俗易懂
用for循环或while循环打印九九乘法表的结果皆为下图显示:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
【插曲】随机数的处理
import random
# random.randint(a, b) ,返回 [a, b] 之间的整数,包含 a 和 b
# 例如:
random.randint(12, 20) # 生成的随机数n: 12 <= n <= 20
random.randint(20, 20) # 结果永远是 20
random.randint(20, 10) # 该语句是错误的,下限必须小于上限
【练习】猜数字游戏
# 要求:
# 范围(0,100)
# 电脑生成数字
# 猜这个数字,提示猜大了还是猜小了,直到猜对为止
from random import randint
computer_number = randint(0, 100)
while True:
my_number = input('请输入一个数字')
if my_number in ['{}'.format(i) for i in range(1, 100)]:
my_number = int(my_number)
# print('Bingo!恭喜你猜对了!!!' if my_number == computer_number else ('oh no.猜大了,请重新猜~~' if my_number > computer_number else 'oh no.猜小了,请重新猜~~'))
# 三目运算符多用于不太复杂的情况下,要是循环中有“break”,“continue”,“pass”时不能使用三目运算符。
if my_number == computer_number:
print('Bingo!恭喜你猜对了!!!')
break
else:
if my_number > computer_number:
print('oh no.猜大了,请重新猜~~')
else:
print('oh no.猜小了,请重新猜~~')
else:
print('请输入0到100之间的数字!')
猜数字游戏效果如下:
请输入一个数字51
oh no.猜小了,请重新猜~~
请输入一个数字76
oh no.猜小了,请重新猜~~
请输入一个数字87
oh no.猜小了,请重新猜~~
请输入一个数字93
oh no.猜小了,请重新猜~~
请输入一个数字98
oh no.猜大了,请重新猜~~
请输入一个数字95
oh no.猜大了,请重新猜~~
请输入一个数字94
Bingo!恭喜你猜对了!!!
【作业1】输入n的值,求出n的阶乘。
math = int(input('请输入需要计算的阶乘:'))
i = 1
sum_factorial = 1
print('{}! = 1'.format(math), end='')
while i <= math-1:
i += 1
print('x{}'.format(i), end='')
for i in range(1, math+1):
sum_factorial *= i
if math >= 2:
print(' = {}'.format(sum_factorial))
—— 0! = 1
1! = 1
2! = 1x2 = 2
10! = 1x2x3x4x5x6x7x8x9x10 = 3628800
【作业2】折纸上月球
# 大家都看过科幻片《火星救援The Martian》吧,
# 电影里航天员们在太空中碰到各种情况都是靠计算机模拟、计算来解决问题的。
# 我们在地球上也可以靠高大上的Python语言来解决问题。
# 现在问题来了:我们都知道,月亮在一个椭圆形的轨道上绕地球公转,
# 因此两者的距离是不断变化的,它们的最小距离是363300公里(千米)。
# 现在我们都想去月球旅游(地球玩腻了,想换个口味),
# 但是坐火箭上天一次就带辣么几个人,我们等不及。
# 好消息,好消息,厂家现在开发出逆天神技——折纸上月球!
# 只需一张很大的A4纸,厚度为0.088毫米,折一次就0.176毫米,折两次就0.352毫米……多折几次就很高了。
# 穿上冲锋衣,拿上登山杖,带上自拍杆,我们爬着就可以上月球发朋友圈了。
# 我就想问一句:要上月球,我们到底需要折多少次?
import math
distance = 36330000000 # 厘米
fold = 0.0088 # 厘米
# # times = pow(2, 1/(distance//0.0088))
# times = math.sqrt(distance/fold)
fold_times = math.log(distance/fold, 2)
print('要上月球,我们到底需要折{}次'.format(fold_times))
—— 要上月球,我们到底需要折41.90872307553917次
【作业3】篮球弹跳高度的运算
# 书呆子就是书呆子,打个篮球脑子也不闲着。
# 这种人说好听的叫‘geek’,说不好听的就是叫‘nerd’。
# 这不,书呆子看着篮球在想:如果篮球从某一高度落下,每次落地后反弹回原来高度的一半再落下。
# 那么球在第10次落地时,共经过多少米呢? 第10次反弹多高?
# (你问我这个题是不是瞎编的?当然是了,你什么时候见过书呆子打篮球?)
# 输入:输入一个整数h,单位是米,表示球的初始高度。
# 输出:输出包含两行:
# 第1行:到球第10次落地时,一共经过的距离。
# 第2行:第10次弹跳的高度。
# 例如输入:20 对应输出:第一行:59.921875 第二行:0.01953125
# 20 = 0.01953125*2**10
# 59.921875 = 20 + 0.01953125 +
height_start = int(input('请输入球的初始高度:'))
sum_distance = 0
for i in range(9):
sum_distance += height_start/2**i
i += 1
print('球第10次落地时,一共经过的距离为{}'.format(height_start + sum_distance))
height_10 = height_start/2**10
print('第十次的反弹高度为:{}'.format(height_10))
—— 请输入球的初始高度:20
球第10次落地时,一共经过的距离为59.921875
第十次的反弹高度为:0.01953125