python基础第九节
9.1 while循环
在程序中,循环功能和if条件判断一样,是程序最核心的逻辑功能。
用于在条件为真时重复执行一段代码块.
while循环的基本语法:
while 条件:
条件满足时,做的事情1
条件满足时,做的事情2
pass
注意:
1. 当条件的运算结果为True的时候, 会运行while代码块下的代码.
2. 若while后的条件一直为True, 则会一直循环运行while代码块下的代码.
3. 若为False, 则表示结束循环;所以需要设置循环终止的条件,否则将进入无限循环.
i = 1
string = 'hello world' # 现在需要打印100次
while i <=100:
print(f'{string}-{i}')
i += 1
案例1:
*
**
***
****
*****
******
*******
********
*********
**********
# 打印这样的一个高为10的直角三角形.
i = 1
while i <= 10:
print('*' * i)
i += 1
案例2: 求1-100的累加和.
i = 0
sum = 0
while i < 100:
sum += i+1
i += 1
print(sum)
# ---------------------
i = 1
sum = 0
while i <= 100:
sum += i
i += 1
print(sum)
案例3: 整数反转 12345 54321
# 案例3: 整数反转 12345 54321
num = 12345
str_num = str(num)
ver_num = int-1]
print(ver_num)
# 使用while 来做:
str_num = '12345'
str_count = len(str_num)
ver_num = ""
i = 0
while i < len(str_num):
ver_num += str_num[len(str_num)- i - 1]
i += 1
# 直接用str_count做计次器
ver_num = ""
str_count = len(str_num)
while str_count > 0:
ver_num += str_num[str_count-1]
str_count -= 1
print(ver_num)
9.2 while循环的嵌套
当我们需要在while循环内执行另一个循环时,我们可以使用while循环嵌套的形式
while循环嵌套的基本语法
while 条件1:
条件1满足时,做的事情1
条件1满足时,做的事情2
pass
while 条件2:
条件2满足时,做的事情1
条件2满足时,做的事情2
pass
# 第一个while循环将重复执行内部代码块,直到条件1不再满足为止。在内部代码块中,我们有另一个while循环,它将重复执行内部代码块,直到条件2不再满足为止。这种嵌套的循环结构可以用于处理许多问题.
# 需要注意的是,在使用嵌套循环时,我们需要仔细考虑内部和外部循环之间的交互,以确保程序能够正确地执行。另外,需要注意的是,循环嵌套可能会导致程序的执行速度变慢,因此我们应该尽可能地避免不必要的循环嵌套.
案例1: 打印99乘法表
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
# 解:
# 关键在于寻找内部循环和外部循环
# xr 1 - 9 对应行数
xr = 1
while xr <=9:
# xl 1 - 9
xl = 1
while xl <= xr:
print(f"{xl}x{xr} = {xl*xr}",end='\t')
xl += 1
xr += 1
print('')
# 有一个彩票中奖号码是0-999. 千分之一的概率.
# 有一个人第一天买一注, 第二天买2注, 第三天买3注..... 彩票号码都是随机购买.
# 写一个程序来模拟这个人买彩票的过程, 一直记录到中奖为止.
# 购买一注彩票2元, 奖金1000元, 输出此人买彩票盈亏多少.
"""
1 1
2 1 2
3 1 2 3
4 1 2 3 4
必须先要知道他买了多少注彩票.
"""
import random
# 天数: n
# 中奖号码 x
x = random.randint(0,999)
# 循环号码 i
# 若每天彩票中奖号码不一致
day = 1
sign = False
total = 0
while sign == False:
luck_num = random.randint(0,999)
print(f'第{day}天开奖号码: {luck_num}')
print(f"第{day}天,我买了{c}注")
c = 1
while c <= day:
x_num = random.randint(0,999)
if x_num == luck_num:
print(f"第{day}天, 第{c}注中奖了, 中奖号码是{x_num}")
c = day # 一旦中奖, 跳出小循环
sign = True # 一旦中奖, 跳出大循环
total += 1 # 中奖注数
else:
total += 1 # 未中奖注数
c += 1
day += 1
money = 1000 - total*2
print(f'盈亏:{money}')
# 若每天彩票中奖号码一致
# n = 1
# while x not in u:
# u = []
# c = 1
# while c <= n:
# i = random.randint(0,999) # 中奖号码
# u.append(i)
# c += 1
# n += 1
# print(x,u)
# money = 1000 - (1+n)*n/2*2
# print(money)
9.3 作业
"""
1. 编写一个程序, 使用while循环计算1-100内所有偶数的和. (包含1和100)
"""
i = 1
total = 0
while i <= 100:
if i%2 == 0:
total += i
i += 1
print(total)
2550
"""
2. 编写一个程序求得任意2个正整数的最小公倍数.
"""
num1 = int(input("起输入第2个整数"))
num2 = int(input("起输入第2个整数"))
i = max(num1,num2)
while not (i%num1 == 0 and i % num2 == 0):
i += 1
print(f"最小公倍数为:{i}")
最小公倍数为:10
"""
3. 将前一节课中的猜幸运数字的题, 优化为: 猜1-100之间的数, 可以猜任意次, 但是在用户猜错了的时候,
程序会给出”猜大了”或是”猜小了”的提示, 直到用户猜中为止.
前一节课题目:
3. 有一个1-10之间的幸运数字, 用户有3次机会去猜这个幸运数字, 3次以内猜中, 则获得7折折扣, 3次猜不中, 则输出”很遗憾, 您没有猜中.”
"""
luck_num = random.randint(1,100) # 30
guess_num = random.randint(1,100) # 50
sign = True
n = 1
minus = 1
maxim = 100
while sign:
if guess_num == luck_num:
print(f'恭喜,第{n}次你猜中了幸运数字{guess_num}')
sign = False
elif guess_num > luck_num:
print(f'第{n}次猜测{guess_num},猜大了')
maxim = guess_num
guess_num = random.randint(minus,maxim)
else:
print(f'第{n}次猜测{guess_num},猜小了')
minus = guess_num
guess_num = random.randint(minus,maxim)
n += 1
# 另一个写法: python 3.8以后加入的语法, 不用sign来跳出
luck_num = random.randint(1,100) # 30
guess_num = random.randint(1,100) # 50
sign = True
n = 1
minus = 1
maxim = 100
while (guess_num:=random.randint(minus,maxim)) != luck_num:
if guess_num == luck_num:
print(f'恭喜,第{n}次你猜中了幸运数字{guess_num}')
sign = False
elif guess_num > luck_num:
print(f'第{n}次猜测{guess_num},猜大了')
maxim = guess_num
else:
print(f'第{n}次猜测{guess_num},猜小了')
minus = guess_num
n += 1
第1次猜测25,猜大了
第2次猜测1,猜小了
第3次猜测24,猜大了
第4次猜测16,猜大了
第5次猜测11,猜大了
第6次猜测6,猜大了
恭喜,第7次你猜中了幸运数字5
luck_num = random.randint(1,100) # 30
guess_num = random.randint(1,100) # 50
sign = True
n = 1
minus = 1
maxim = 100
while (guess_num:=random.randint(minus,maxim)) != luck_num:
if guess_num > luck_num:
print(f'第{n}次猜测{guess_num},猜大了')
maxim = guess_num
else:
print(f'第{n}次猜测{guess_num},猜小了')
minus = guess_num
n += 1
# if guess_num == luck_num:
print(f'恭喜,第{n}次你猜中了幸运数字{guess_num}')
sign = False
第1次猜测70,猜大了
第2次猜测12,猜小了
第3次猜测33,猜小了
第4次猜测50,猜大了
第5次猜测44,猜大了
第6次猜测35,猜小了
第7次猜测42,猜大了
第8次猜测38,猜小了
恭喜,第9次你猜中了幸运数字39