欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

跟老齊學(xué)Python之用while來循環(huán)

 更新時(shí)間:2014年10月02日 15:43:19   投稿:hebedich  
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),可以告知我,我馬上撤下此代碼。

復(fù)制代碼 代碼如下:

#! /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'''您猜大了!\n哈哈,正確答案是:%s\n您還有%s次機(jī)會(huì)!''' %(xnum,x)
    elif num < xnum:
        print'''您猜小了!\n哈哈,正確答案是:%s\n您還有%s次機(jī)會(huì)!''' %(xnum,x)
    print'********************************'

    i += 1

我們就用這段程序來分析一下,首先看while i<4,這是程序中為猜測限制了次數(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之間吧。

復(fù)制代碼 代碼如下:

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之間。
為此,要做:

復(fù)制代碼 代碼如下:

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)之前。

復(fù)制代碼 代碼如下:

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ù)字程序重寫一下:

復(fù)制代碼 代碼如下:

#!/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"

以上供參考,看官還可改進(jìn)。

break和continue

break,在上面的例子中已經(jīng)出現(xiàn)了,其含義就是要在這個(gè)地方中斷循環(huán),跳出循環(huán)體。下面這個(gè)簡要的例子更明顯:

復(fù)制代碼 代碼如下:

#!/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的時(shí)候,執(zhí)行循環(huán)體中的break,跳出玄幻,執(zhí)行最后的打印語句,得到結(jié)果:

復(fù)制代碼 代碼如下:

8 is even number

如果a=9,則要執(zhí)行else里面的的print,然后a=0,循環(huán)就在執(zhí)行一次,又break了,得到結(jié)果:

復(fù)制代碼 代碼如下:

9 is odd number
0 is even number

而continue則是要從當(dāng)前位置(即continue所在的位置)跳到循環(huán)體的最后一行的后面(不執(zhí)行最后一行),對(duì)一個(gè)循環(huán)體來講,就如同首尾銜接一樣,最后一行的后面是哪里呢?當(dāng)然是開始了。

復(fù)制代碼 代碼如下:

#!/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í)候自己也糊涂了。

復(fù)制代碼 代碼如下:

while...else

這兩個(gè)的配合有點(diǎn)類似if ... else,只需要一個(gè)例子列為就理解了,當(dāng)然,一遇到else了,就意味著已經(jīng)不在while循環(huán)內(nèi)了。

復(fù)制代碼 代碼如下:

#!/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é)果:

復(fù)制代碼 代碼如下:

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

相關(guān)文章

  • 詳解python中sort排序使用

    詳解python中sort排序使用

    這篇文章主要介紹了python中sort排序使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python設(shè)置windows桌面壁紙的實(shí)現(xiàn)代碼

    python設(shè)置windows桌面壁紙的實(shí)現(xiàn)代碼

    每天換一個(gè)壁紙,每天好心情。喜歡的朋友可以參考下
    2013-01-01
  • Python簡單實(shí)現(xiàn)enum功能的方法

    Python簡單實(shí)現(xiàn)enum功能的方法

    這篇文章主要介紹了Python簡單實(shí)現(xiàn)enum功能的方法,簡單分析了Python實(shí)現(xiàn)enum功能的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • 教你python制作自己的模塊的基本步驟

    教你python制作自己的模塊的基本步驟

    這篇文章主要介紹了python如何制作自己的模塊,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Python matplotlib實(shí)用繪圖技巧匯總

    Python matplotlib實(shí)用繪圖技巧匯總

    這篇文章主要給大家介紹了關(guān)于Python matplotlib實(shí)用繪圖技巧的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python 制作磁力搜索工具

    python 制作磁力搜索工具

    這篇文章主要介紹了如何用python 制作磁力搜索工具,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 使用tensorflow實(shí)現(xiàn)線性svm

    使用tensorflow實(shí)現(xiàn)線性svm

    這篇文章主要為大家詳細(xì)介紹了使用tensorflow實(shí)現(xiàn)線性svm的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python面向?qū)ο笾鄳B(tài)原理與用法案例分析

    Python面向?qū)ο笾鄳B(tài)原理與用法案例分析

    這篇文章主要介紹了Python面向?qū)ο笾鄳B(tài)原理與用法,結(jié)合具體案例形式分析了Python多態(tài)的具體功能、原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • PyTorch手寫數(shù)字?jǐn)?shù)據(jù)集進(jìn)行多分類

    PyTorch手寫數(shù)字?jǐn)?shù)據(jù)集進(jìn)行多分類

    這篇文章主要介紹了PyTorch手寫數(shù)字?jǐn)?shù)據(jù)集進(jìn)行多分類,損失函數(shù)采用交叉熵,激活函數(shù)采用ReLU,優(yōu)化器采用帶有動(dòng)量的mini-batchSGD算法,需要的朋友可以參考一下
    2022-03-03
  • python通過函數(shù)名調(diào)用函數(shù)的幾種方法總結(jié)

    python通過函數(shù)名調(diào)用函數(shù)的幾種方法總結(jié)

    今天帶大家學(xué)習(xí)的是怎么使用python通過函數(shù)名調(diào)用函數(shù),文中對(duì)python通過函數(shù)名調(diào)用函數(shù)的幾種方法有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06

最新評(píng)論