跟老齊學Python之用while來循環(huán)
在python中,它也有這個含義,不過有點區(qū)別的是,“當...時候”這個條件成立在一段范圍或者時間間隔內(nèi),從而在這段時間間隔內(nèi)讓python做好多事情。就好比這樣一段情景:
while 年齡大于60歲:-------->當年齡大于60歲的時候
退休 -------->凡是符合上述條件就執(zhí)行的動作
展開想象,如果制作一道門,這道門就是用上述的條件調(diào)控開關的,假設有很多人經(jīng)過這個們,報上年齡,只要年齡大于60,就退休(門打開,人可以出去),一個接一個地這樣循環(huán)下去,突然有一個人年齡是50,那么這個循環(huán)在他這里就停止,也就是這時候他不滿足條件了。
這就是while循環(huán)。寫一個嚴肅點的流程,可以看下圖:
再做猜數(shù)字游戲
本教程有一講,是跟看官一同做一個小游戲,在里面做了一個猜數(shù)的游戲,當時遇到了一個問題,就是只能猜一兩次,如果猜不到,程序就不能繼續(xù)運行了。
前不久,有一個在校的大學生朋友(他叫李航),給我發(fā)郵件,讓我看了他做的游戲,能夠?qū)崿F(xiàn)多次猜數(shù),直到猜中為止。這是一個多么喜歡學習的大學生呀。
我在這里將他寫的程序恭錄于此,單元李航同學不要見怪,如果李航同學認為此舉侵犯了自己的知識產(chǎn)權,可以告知我,我馬上撤下此代碼。
#! /usr/bin/env python
#coding:UTF-8
import random
i=0
while i < 4:
print'********************************'
num = input('請您輸入0到9任一個數(shù):') #李同學用的是python3
xnum = random.randint(0,9)
x = 3 - i
if num == xnum:
print'運氣真好,您猜對了!'
break
elif num > xnum:
print'''您猜大了!\n哈哈,正確答案是:%s\n您還有%s次機會!''' %(xnum,x)
elif num < xnum:
print'''您猜小了!\n哈哈,正確答案是:%s\n您還有%s次機會!''' %(xnum,x)
print'********************************'
i += 1
我們就用這段程序來分析一下,首先看while i<4,這是程序中為猜測限制了次數(shù),最大是三次,請看官注意,在while的循環(huán)體中的最后一句:i +=1,這就是說每次循環(huán)到最后,就給i增加1,當bool(i<4)=False的時候,就不再循環(huán)了。
當bool(i<4)=True的時候,就執(zhí)行循環(huán)體內(nèi)的語句。在循環(huán)體內(nèi),讓用戶輸入一個整數(shù),然后程序隨機選擇一個整數(shù),最后判斷隨機生成的數(shù)和用戶輸入的數(shù)是否相等,并且用if語句判斷三種不同情況。
根據(jù)上述代碼,看官看看是否可以修改?
為了讓用戶的體驗更爽,不妨把輸入的整數(shù)范圍擴大,在1到100之間吧。
num_input = raw_input("please input one integer that is in 1 to 100:") #我用的是python2.7,在輸入指令上區(qū)別于李同學
程序用num_input變量接收了輸入的內(nèi)容。但是,請列位看官一定要注意,看到這里想睡覺的要打起精神了,我要分享一個多年編程經(jīng)驗,請牢記:任何用戶輸入的內(nèi)容都是不可靠的。這句話含義深刻,但是,這里不做過多的解釋,需要各位在隨后的編程生涯中體驗了。為此,我們要檢驗用戶輸入的是否符合我們的要求,我們要求用戶輸入的是1到100之間的整數(shù),那么就要做如下檢驗:
輸入的是否是整數(shù)
如果是整數(shù),是否在1到100之間。
為此,要做:
if not num_input.isdigit(): #str.isdigit()是用來判斷字符串是否純粹由數(shù)字組成
print "Please input interger."
elif int(num_input)<0 and int(num_input)>=100:
print "The number should be in 1 to 100."
else:
pass #這里用pass,意思是暫時省略,如果滿足了前面提出的要求,就該執(zhí)行此處語句
再看看李航同學的程序,在循環(huán)體內(nèi)產(chǎn)生一個隨機的數(shù)字,這樣用戶每次輸入,面對的都是一個新的隨機數(shù)字。這樣的猜數(shù)字游戲難度太大了。我希望是程序產(chǎn)生一個數(shù)字,直到猜中,都是這個數(shù)字。所以,要把產(chǎn)生隨機數(shù)字這個指令移動到循環(huán)之前。
import random
number = random.randint(1,100)
while True: #不限制用戶的次數(shù)了
...
觀察李同學的程序,還有一點需要向列位顯明的,那就是在條件表達式中,兩邊最好是同種類型數(shù)據(jù),上面的程序中有:num>xnum樣式的條件表達式,而一邊是程序生成的int類型數(shù)據(jù),一邊是通過輸入函數(shù)得到的str類型數(shù)據(jù)。在某些情況下可以運行,為什么?看官能理解嗎?都是數(shù)字的時候,是可以的。但是,這樣不好。
那么,按照這種思路,把這個猜數(shù)字程序重寫一下:
#!/usr/bin/env python
#coding:utf-8
import random
number = random.randint(1,100)
guess = 0
while True:
num_input = raw_input("please input one integer that is in 1 to 100:")
guess +=1
if not num_input.isdigit():
print "Please input interger."
elif int(num_input)<0 and int(num_input)>=100:
print "The number should be in 1 to 100."
else:
if number==int(num_input):
print "OK, you are good.It is only %d, then you successed."%guess
break
elif number>int(num_input):
print "your number is more less."
elif number<int(num_input):
print "your number is bigger."
else:
print "There is something bad, I will not work"
以上供參考,看官還可改進。
break和continue
break,在上面的例子中已經(jīng)出現(xiàn)了,其含義就是要在這個地方中斷循環(huán),跳出循環(huán)體。下面這個簡要的例子更明顯:
#!/usr/bin/env python
#coding:utf-8
a = 8
while a:
if a%2==0:
break
else:
print "%d is odd number"%a
a = 0
print "%d is even number"%a
a=8的時候,執(zhí)行循環(huán)體中的break,跳出玄幻,執(zhí)行最后的打印語句,得到結果:
8 is even number
如果a=9,則要執(zhí)行else里面的的print,然后a=0,循環(huán)就在執(zhí)行一次,又break了,得到結果:
9 is odd number
0 is even number
而continue則是要從當前位置(即continue所在的位置)跳到循環(huán)體的最后一行的后面(不執(zhí)行最后一行),對一個循環(huán)體來講,就如同首尾銜接一樣,最后一行的后面是哪里呢?當然是開始了。
#!/usr/bin/env python
#coding:utf-8
a = 9
while a:
if a%2==0:
a -=1
continue #如果是偶數(shù),就返回循環(huán)的開始
else:
print "%d is odd number"%a #如果是奇數(shù),就打印出來
a -=1
其實,對于這兩東西,我個人在編程中很少用到。我有一個固執(zhí)的觀念,盡量將條件在循環(huán)之前做足,不要在循環(huán)中跳來跳去,不僅可讀性下降,有時候自己也糊涂了。
while...else
這兩個的配合有點類似if ... else,只需要一個例子列為就理解了,當然,一遇到else了,就意味著已經(jīng)不在while循環(huán)內(nèi)了。
#!/usr/bin/env python
count = 0
while count < 5:
print count, " is less than 5"
count = count + 1
else:
print count, " is not less than 5"
執(zhí)行結果:
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
相關文章
python如何解析復雜sql,實現(xiàn)數(shù)據(jù)庫和表的提取的實例剖析
這篇文章主要介紹了python如何解析復雜sql,實現(xiàn)數(shù)據(jù)庫和表的提取的實例剖析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python畫圖——實現(xiàn)在圖上標注上具體數(shù)值的方法
今天小編就為大家分享一篇python畫圖——實現(xiàn)在圖上標注上具體數(shù)值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07pandas使用fillna函數(shù)填充NaN值的代碼實例
最近在工作中遇到一個問題,pandas讀取的數(shù)據(jù)中nan在保存后變成空字符串,所以下面這篇文章主要給大家介紹了關于pandas使用fillna函數(shù)填充NaN值的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07python?pipreqs工具生成requirements.txt文件使用詳解
這篇文章主要為大家介紹了python?pipreqs工具生成requirements.txt文件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12Django利用cookie保存用戶登錄信息的簡單實現(xiàn)方法
這篇文章主要介紹了Django利用cookie保存用戶登錄信息的簡單實現(xiàn)方法,結合實例形式分析了Django框架使用cookie保存用戶信息的相關操作技巧,需要的朋友可以參考下2019-05-05