摘要:我在這里將他寫的程序恭錄于此,單元李航同學(xué)不要見怪,如果李航同學(xué)認(rèn)為此舉侵犯了自己的知識(shí)產(chǎn)權(quán),可以告知我,我馬上撤下此代碼。我用的是,在輸入指令上區(qū)別于李同學(xué)程序用變量接收了輸入的內(nèi)容。
while,翻譯成中文是“當(dāng)...的時(shí)候”,這個(gè)單詞在英語中,常常用來做為時(shí)間狀語,while ... someone do somthing,這種類型的說法是有的。在python中,它也有這個(gè)含義,不過有點(diǎn)區(qū)別的是,“當(dāng)...時(shí)候”這個(gè)條件成立在一段范圍或者時(shí)間間隔內(nèi),從而在這段時(shí)間間隔內(nèi)讓python做好多事情。就好比這樣一段情景:
while 年齡大于60歲:-------->當(dāng)年齡大于60歲的時(shí)候 退休 -------->凡是符合上述條件就執(zhí)行的動(dòng)作
展開想象,如果制作一道門,這道門就是用上述的條件調(diào)控開關(guān)的,假設(shè)有很多人經(jīng)過這個(gè)們,報(bào)上年齡,只要年齡大于60,就退休(門打開,人可以出去),一個(gè)接一個(gè)地這樣循環(huán)下去,突然有一個(gè)人年齡是50,那么這個(gè)循環(huán)在他這里就停止,也就是這時(shí)候他不滿足條件了。
這就是while循環(huán)。寫一個(gè)嚴(yán)肅點(diǎn)的流程,可以看下圖:
再做猜數(shù)字游戲本教程有一講,是跟看官一同做一個(gè)小游戲,在里面做了一個(gè)猜數(shù)的游戲,當(dāng)時(shí)遇到了一個(gè)問題,就是只能猜一兩次,如果猜不到,程序就不能繼續(xù)運(yùn)行了。
前不久,有一個(gè)在校的大學(xué)生朋友(他叫李航),給我發(fā)郵件,讓我看了他做的游戲,能夠?qū)崿F(xiàn)多次猜數(shù),直到猜中為止。這是一個(gè)多么喜歡學(xué)習(xí)的大學(xué)生呀。
我在這里將他寫的程序恭錄于此,單元李航同學(xué)不要見怪,如果李航同學(xué)認(rèn)為此舉侵犯了自己的知識(shí)產(chǎn)權(quán),可以告知我,我馬上撤下此代碼。
#! /usr/bin/env python #coding:UTF-8 import random i=0 while i < 4: print"********************************" num = input("請(qǐng)您輸入0到9任一個(gè)數(shù):") #李同學(xué)用的是python3 xnum = random.randint(0,9) x = 3 - i if num == xnum: print"運(yùn)氣真好,您猜對(duì)了!" break elif num > xnum: print"""您猜大了! 哈哈,正確答案是:%s 您還有%s次機(jī)會(huì)!""" %(xnum,x) elif num < xnum: print"""您猜小了! 哈哈,正確答案是:%s 您還有%s次機(jī)會(huì)!""" %(xnum,x) print"********************************" i += 1
我們就用這段程序來分析一下,首先看while i<4,這是程序中為猜測(cè)限制了次數(shù),最大是三次,請(qǐng)看官注意,在while的循環(huán)體中的最后一句:i +=1,這就是說每次循環(huán)到最后,就給i增加1,當(dāng)bool(i<4)=False的時(shí)候,就不再循環(huán)了。
當(dāng)bool(i<4)=True的時(shí)候,就執(zhí)行循環(huán)體內(nèi)的語句。在循環(huán)體內(nèi),讓用戶輸入一個(gè)整數(shù),然后程序隨機(jī)選擇一個(gè)整數(shù),最后判斷隨機(jī)生成的數(shù)和用戶輸入的數(shù)是否相等,并且用if語句判斷三種不同情況。
根據(jù)上述代碼,看官看看是否可以修改?
為了讓用戶的體驗(yàn)更爽,不妨把輸入的整數(shù)范圍擴(kuò)大,在1到100之間吧。
num_input = raw_input("please input one integer that is in 1 to 100:") #我用的是python2.7,在輸入指令上區(qū)別于李同學(xué)
程序用num_input變量接收了輸入的內(nèi)容。但是,請(qǐng)列位看官一定要注意,看到這里想睡覺的要打起精神了,我要分享一個(gè)多年編程經(jīng)驗(yàn),請(qǐng)牢記:任何用戶輸入的內(nèi)容都是不可靠的。這句話含義深刻,但是,這里不做過多的解釋,需要各位在隨后的編程生涯中體驗(yàn)了。為此,我們要檢驗(yàn)用戶輸入的是否符合我們的要求,我們要求用戶輸入的是1到100之間的整數(shù),那么就要做如下檢驗(yàn):
輸入的是否是整數(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,意思是暫時(shí)省略,如果滿足了前面提出的要求,就該執(zhí)行此處語句
再看看李航同學(xué)的程序,在循環(huán)體內(nèi)產(chǎn)生一個(gè)隨機(jī)的數(shù)字,這樣用戶每次輸入,面對(duì)的都是一個(gè)新的隨機(jī)數(shù)字。這樣的猜數(shù)字游戲難度太大了。我希望是程序產(chǎn)生一個(gè)數(shù)字,直到猜中,都是這個(gè)數(shù)字。所以,要把產(chǎn)生隨機(jī)數(shù)字這個(gè)指令移動(dòng)到循環(huán)之前。
import random number = random.randint(1,100) while True: #不限制用戶的次數(shù)了 ...
觀察李同學(xué)的程序,還有一點(diǎn)需要向列位顯明的,那就是在條件表達(dá)式中,兩邊最好是同種類型數(shù)據(jù),上面的程序中有:num>xnum樣式的條件表達(dá)式,而一邊是程序生成的int類型數(shù)據(jù),一邊是通過輸入函數(shù)得到的str類型數(shù)據(jù)。在某些情況下可以運(yùn)行,為什么?看官能理解嗎?都是數(shù)字的時(shí)候,是可以的。但是,這樣不好。
那么,按照這種思路,把這個(gè)猜數(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以上供參考,看官還可改進(jìn)。
break和continuebreak,在上面的例子中已經(jīng)出現(xiàn)了,其含義就是要在這個(gè)地方中斷循環(huán),跳出循環(huán)體。下面這個(gè)簡(jiǎ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"%aa=8的時(shí)候,執(zhí)行循環(huán)體中的break,跳出玄幻,執(zhí)行最后的打印語句,得到結(jié)果:
8 is even number如果a=9,則要執(zhí)行else里面的的print,然后a=0,循環(huán)就在執(zhí)行一次,又break了,得到結(jié)果:
9 is odd number 0 is even number而continue則是要從當(dāng)前位置(即continue所在的位置)跳到循環(huán)體的最后一行的后面(不執(zhí)行最后一行),對(duì)一個(gè)循環(huán)體來講,就如同首尾銜接一樣,最后一行的后面是哪里呢?當(dāng)然是開始了。
#!/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其實(shí),對(duì)于這兩東西,我個(gè)人在編程中很少用到。我有一個(gè)固執(zhí)的觀念,盡量將條件在循環(huán)之前做足,不要在循環(huán)中跳來跳去,不僅可讀性下降,有時(shí)候自己也糊涂了。
while...else這兩個(gè)的配合有點(diǎn)類似if ... else,只需要一個(gè)例子列為就理解了,當(dāng)然,一遇到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í)行結(jié)果:
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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37345.html
摘要:不管是還是,所發(fā)起的循環(huán),在編程中是經(jīng)常被用到的。這里重點(diǎn)是復(fù)習(xí)并展示一下它的循環(huán)中,做為計(jì)數(shù)器的使用。通過上述實(shí)例,主要是讓看官理解在循環(huán)中計(jì)數(shù)器的作用。是用于并行遍歷的函數(shù)。一種方法是通過循環(huán),分別從兩個(gè)中取出元素,然后求和。 不管是while還是for,所發(fā)起的循環(huán),在python編程中是經(jīng)常被用到的。特別是for,一般認(rèn)為,它要比while快,而且也容易寫(是否容易,可能因人而...
摘要:其實(shí),迭代器遠(yuǎn)遠(yuǎn)不止上述這么簡(jiǎn)單,下面我們隨便列舉一些,在中還可以這樣得到迭代對(duì)象中的元素。 跟一些比較牛X的程序員交流,經(jīng)常聽到他們嘴里冒出一個(gè)不標(biāo)準(zhǔn)的英文單詞,而loop、iterate、traversal和recursion如果不在其內(nèi),總覺得他還不夠牛X。當(dāng)讓,真正牛X的絕對(duì)不會(huì)這么說的,他們只是說循環(huán)、迭代、遍歷、遞歸,然后再問這個(gè)你懂嗎?。哦,這就是真正牛X的程序員。不過,...
摘要:在的模板中,功能還是很不少的,本講介紹模板語法先。然后在模板中,利用語句,依次顯示得到的列表中的元素。的代碼不變,只修改模板的代碼,重點(diǎn)理解模板中的語句寫法。這樣就是實(shí)現(xiàn)了模板中變量的使用。 Come to me, all you that are weary and are carrying heavy burdens, and I will give you rest. Ta...
摘要:在講述有關(guān)的時(shí)候,提到做游戲的事情后來這個(gè)事情一直沒有接續(xù)。現(xiàn)在就是開始做那個(gè)游戲的時(shí)候了。游戲過程描述程序運(yùn)行起來,隨機(jī)在某個(gè)范圍內(nèi)選擇一個(gè)整數(shù)。我們現(xiàn)在做一個(gè)很小的程序,也是這樣來做。這個(gè)游戲還沒有完呢,即使用了循環(huán),后面還會(huì)繼續(xù)。 在講述有關(guān)list的時(shí)候,提到做游戲的事情,后來這個(gè)事情一直沒有接續(xù)。不是忘記了,是在想在哪個(gè)階段做最合適。經(jīng)過一段時(shí)間學(xué)習(xí),看官已經(jīng)不是純粹小白了,...
摘要:函數(shù)的基本結(jié)構(gòu)中的函數(shù)基本結(jié)構(gòu)函數(shù)名參數(shù)列表語句幾點(diǎn)說明函數(shù)名的命名規(guī)則要符合中的命名要求。在中,將這種依賴關(guān)系,稱之為多態(tài)。不要期待在原處修改的函數(shù)會(huì)返回結(jié)果比如一定要之用括號(hào)調(diào)用函數(shù)不要在導(dǎo)入和重載中使用擴(kuò)展名或路徑。 在本教程的開始部分,就已經(jīng)引入了函數(shù)的概念:《永遠(yuǎn)強(qiáng)大的函數(shù)》,之所以那時(shí)候就提到函數(shù),是因?yàn)槲矣X得函數(shù)之重要,遠(yuǎn)遠(yuǎn)超過一般。這里,重回函數(shù),一是復(fù)習(xí),二是要在已經(jīng)...
閱讀 3085·2021-11-18 10:02
閱讀 3364·2021-11-02 14:48
閱讀 3418·2019-08-30 13:52
閱讀 585·2019-08-29 17:10
閱讀 2109·2019-08-29 12:53
閱讀 1434·2019-08-29 12:53
閱讀 1052·2019-08-29 12:25
閱讀 2193·2019-08-29 12:17