Python學(xué)習(xí)筆記
Day_04-循環(huán)結(jié)構(gòu)
應(yīng)用場(chǎng)景
我們?cè)诔绦蚓帉?xiě)過(guò)程中,往往會(huì)需要一些重復(fù)性的執(zhí)行動(dòng)作,比如要求每隔一秒輸出某個(gè)語(yǔ)句或字符串等待,尤其是數(shù)量眾多的時(shí)候,我們不能手動(dòng)輸入特別多重復(fù)的語(yǔ)句。一來(lái),工作量大大增加,而來(lái)造成程序語(yǔ)句特別冗長(zhǎng),可閱讀性大大降低。
這種情況下,就要用到循環(huán)結(jié)果來(lái)解決問(wèn)題了。
Python語(yǔ)言中有兩種循環(huán)格式,一種是for...in...結(jié)構(gòu),一種是while結(jié)構(gòu)。
for...in...循環(huán)
如果明確知道需要循環(huán)的次數(shù)或者對(duì)一個(gè)容器進(jìn)行迭代,推薦使用for...in...循環(huán)。
舉例1,求1—100的和。
"""
calculate sum from 1 to 100
version:0.1
author:chris
"""
Sum = 0
for i in range(101):
Sum += i
print("Sum = %d" %(Sum))
輸出結(jié)果為:
Sum = 5050
range()的用法:
range(101)產(chǎn)生一個(gè)0到100的整數(shù)序列
range(1,100)產(chǎn)生一個(gè)1到99的整數(shù)序列
range(1,100,2)產(chǎn)生一個(gè)1到99的,步長(zhǎng)為2的序列,及1到99之間的奇數(shù)序列
range(2,101,2)產(chǎn)生一個(gè)2到100的,步長(zhǎng)為2的序列,即2到100之間的偶數(shù)序列
舉例2,分別求0—100之間的偶數(shù)和及奇數(shù)和。我在上面的例題中做一個(gè)修改,代碼如下:
"""
calculate sum from 1 to 100
version:0.1
author:chris
"""
Sum = 0
for i in range(101):
Sum += i
print("Sum = %d" %(Sum))
Sum_odd = 0
for j in range(1,100,2):
Sum_odd += j
print("Sum_odd = %d" %(Sum_odd))
Sum_even = 0
for k in range(2,101,2):
Sum_even += k
print("Sum_even = %d" %(Sum_even))
輸出結(jié)果如下:
Sum = 5050
Sum_odd = 2500
Sum_even = 2550
while循環(huán)
如果我們要構(gòu)造出不知道循環(huán)次數(shù)的循環(huán)結(jié)構(gòu),推薦使用while循環(huán)。該循環(huán)通過(guò)一個(gè)能夠產(chǎn)生或轉(zhuǎn)換出bool值的表達(dá)式來(lái)控制循環(huán),如果bool值為T(mén)rue,則循環(huán)繼續(xù),如果bool為False,則循環(huán)結(jié)束。
例題,猜數(shù)字游戲。
"""
guess a random number in (0, 100)
version:0.1
author:chris
"""
import random
number_rdm = random.randint(1, 100)
i = 0
while True:
x = int(input("Please input a number: "))
i += 1
if x > number_rdm:
print("too big!")
continue
elif x < number_rdm:
print("too small!")
continue
else:
print("Bingo!You are right!")
print("Total times you used = %d" % i)
break
運(yùn)行結(jié)果如下:
Please input a number: 50
too small!
Please input a number: 80
too big!
Please input a number: 65
too big!
Please input a number: 60
too big!
Please input a number: 55
too small!
Please input a number: 56
too small!
Please input a number: 57
too small!
Please input a number: 58
too small!
Please input a number: 59
Bingo!You are right!
Total times you used = 9
continue 和 break
continue和break是在循環(huán)內(nèi)部使用的兩個(gè)有用的語(yǔ)句。
continue: 跳過(guò)循環(huán)的這一次操作,進(jìn)行下一次的循環(huán)操作
break: 停止執(zhí)行整個(gè)循環(huán)。
從上面的猜數(shù)字游戲中我們可以看出來(lái),當(dāng)while循環(huán)條件為真的時(shí)候,程序向下執(zhí)行第一個(gè)語(yǔ)句,輸入給計(jì)算機(jī)輸入一個(gè)數(shù)字,這時(shí)候輸入次數(shù)就是1,計(jì)算機(jī)根據(jù)你給的數(shù)據(jù)告訴你是比他給的隨機(jī)數(shù)是大了還是小了。注意這里要是沒(méi)有continue或者break,程序就會(huì)重復(fù)執(zhí)行輸出打了還是小了的語(yǔ)句,就會(huì)變成死循環(huán)。所以continue或者break的作用就是從該循環(huán)語(yǔ)句中及時(shí)跳過(guò)或者終止,方便進(jìn)行下一次循環(huán)。
在看一個(gè)Vamei的小例子:
for i in range(10):
if i == 2:
continue
print (i)
運(yùn)行結(jié)果如下:
0,1,3,4,5,6,7,8,9 #程序跳過(guò)了2
換成break來(lái)看看:
for i in range(10):
if i == 2:
break
print (i)
運(yùn)行結(jié)果如下:
0,1 #只打印0和1,后續(xù)被終止了。
練習(xí)題
1. 用循環(huán)嵌套輸出九九乘法表。
說(shuō)明:1英寸=2.54厘米,或者1in=2.54cm。
# -*- coding: utf-8 -*-
"""
輸出九九乘法表
version:0.1
author:chris
"""
for i in range(1, 10):
for j in range(1, i+1):
print('%d*%d=%d' % (i, j, i * j), end = '\t')
print("")
輸出結(jié)果如下:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
2. 輸入一個(gè)正整數(shù)判斷是不是素?cái)?shù)。
在一般領(lǐng)域,對(duì)正整數(shù)n,如果用2到
之間的所有整數(shù)去除,均無(wú)法整除,則n為質(zhì)數(shù)。
# -*- coding: utf-8 -*-
"""
判斷一個(gè)數(shù)是不是素?cái)?shù)
version:0.1
author:chris
"""
from math import sqrt
n = int(input("請(qǐng)輸入一個(gè)整數(shù):"))
j = int(sqrt(n))
for i in range(2, j + 1):
if n % i == 0:
print("你輸入的整數(shù)不是素?cái)?shù)!")
break
else:
print("你輸入的整數(shù)是素?cái)?shù)!")
break
3. 輸出一下圖形。
*
**
***
****
*****
*
**
***
****
*****
*
***
*****
*******
*********
代碼如下:
# -*- coding: utf-8 -*-
"""
輸出*型圖案
version:0.1
author:chris
"""
row = int(input("請(qǐng)輸入行數(shù):"))
for i in range(row):
for j 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()
小結(jié)
這一節(jié)中學(xué)習(xí)了for循環(huán)和while循環(huán)語(yǔ)句的基本用法,總的感覺(jué),在理解是還沒(méi)有完全吃透,需要好好琢磨作者的幾個(gè)例題,然后下來(lái)再找一些相關(guān)的學(xué)習(xí)內(nèi)容加深以下。