循環結構 : while 循環結構的特色:減小代碼的冗餘,提升代碼的效率
注意:只要是循環必定要有判斷條件退出循環,否則就成了死循環,程序會一直在內存執行,直到內存耗盡,暴斃.....
語法形式:
while 條件表達式:
code1
code2
(一)打印數字1~10
i = 1 # 定義一個初始化的變量
# 寫一個循環的條件
while i <= 10:
# 代碼體,寫邏輯
print(i)
i += 1 # 程序每跑一遍,i就+1,直到1=10,循環停下來
執行結果:
1
2
3
4
5
6
7
8
9
10
(二) 計算1~100的累加和 ?
寫法一:
i = 1
total = 0
while i <= 100:
total += i
i += 1
print(total)
執行結果:
5050
寫法二:
i = 1
total = 0 # 初始化一個變量
flag = True # 寫一個標誌符
while flag: # 只有爲真的時候纔會循環
total += i
i += 1
# 當i位101的時候,爲了不在回到循環判斷中,直接在此處終止
if i == 101:
flag = False # 更改標誌符狀態
print(total)
執行結果:
5050
(三)打印一行十個小星星
(1)最簡單的方法:功能的確實現了,可是看起來比較low
print("*"*10)
執行結果:
**********
(2)升級版:用循環寫
i = 0
while i < 10:
print("*", end="") # end=''以什麼結尾,這裏以空制符串結尾,保證星星不會換行,打印在一排
i += 1
執行結果:
**********
(3)進階版:
i = 0
strvar = ''
while i < 10:
strvar += "*"
i += 1
print(strvar)
執行結果:
**********
(四)while和if的混合使用
(1)要求:打印一行十個小星星 奇數個打印★ 偶數個打印☆
i = 0
while i < 10:
if i % 2 == 0:
print("★", end="")
else:
print("☆", end="")
i += 1
執行結果:
★☆★☆★☆★☆★☆
(2)要求:一個循環 打印十行十列隔列變色小星星
i = 0
while i < 100:
if i % 2 == 0:
print("☆", end="")
else:
print("★", end="")
if i % 10 == 9: # 換行,i是從0開始的,i逢9就要開始換行
print()
i += 1
執行結果:
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★
(五)while循環的嵌套(多個while循環)
(1)用兩個循環打印十行十列變色小星星
i = 0
while i < 10: # 外循環
j = 0
while j < 10: # 內循環
if i % 2 == 0: # 控制行
print("★", end="")
else:
print("☆", end="")
j += 1 # 程序運行一次,j+1,一直知足內循環,因此外循環走一次,內循環走十次
print() # 換行,外面的循環每執行一次,就打印一個換行
i += 1
執行結果:
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
(2)打印99乘法口訣表
i = 1
while i <= 9:
j = 1
while j <= i:
print("%d*%d=%-2d" % (j, i, i * j), end=" ") # end這裏有空格
j += 1
print() # 換行
i += 1
執行結果:是否是beautiful
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
做業:本身下去試一下99乘法口訣的其餘打發,好比,方向相反的乘法口訣
(3)百錢買百雞,公雞1塊錢一隻,母雞3塊錢一隻,小雞5毛錢一隻,100塊錢買100只雞.而且三種雞都要買到,有多少種買法?
x = 1
while x < 99: # 每種雞最多買98只
y = 1
while y < 33:
z = 1
while z < 99:
# 三款雞加一塊兒是100只 三款雞價格加一塊兒是100塊 兩個條件同時知足
if (x + y + z == 100) and (x + 3 * y + 0.5 * z == 100):
print(x, y, z)
z += 1
y += 1
x += 1
執行結果:
5 19 76
10 18 72
15 17 68
20 16 64
25 15 60
30 14 56
35 13 52
40 12 48
45 11 44
50 10 40
55 9 36
60 8 32
65 7 28
70 6 24
75 5 20
80 4 16
85 3 12
90 2 8
95 1 4