在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 語句(5)
標準庫 (4)
如何成為 Python 高手
標準庫 (6)
標準庫 (3)
類(2)
Pandas 使用 (2)
xml
用 tornado 做網(wǎng)站 (5)
文件(1)
練習(xí)
列表(3)
從小工到專家
除法
錯誤和異常 (2)
函數(shù)(1)
用 tornado 做網(wǎng)站 (7)
為做網(wǎng)站而準備
函數(shù)練習(xí)
標準庫 (8)
Pandas 使用 (1)
回顧 list 和 str
字典(1)
用 tornado 做網(wǎng)站 (3)
字符串(1)
函數(shù)(2)
寫一個簡單的程序
將數(shù)據(jù)存入文件
語句(5)
SQLite 數(shù)據(jù)庫
集成開發(fā)環(huán)境(IDE)
集合(1)
類(1)
用 tornado 做網(wǎng)站 (6)
用 tornado 做網(wǎng)站 (2)
自省
語句(4)
錯誤和異常 (1)
用 tornado 做網(wǎng)站 (4)
集合(2)
列表(1)
標準庫 (1)
生成器
mysql 數(shù)據(jù)庫 (1)
第三方庫
實戰(zhàn)
運算符
類(3)
字典(2)
語句(1)
數(shù)和四則運算
語句(2)
文件(2)
MySQL 數(shù)據(jù)庫 (2)
電子表格
迭代器
mongodb 數(shù)據(jù)庫 (1)
特殊方法 (2)
特殊方法 (1)
字符編碼
編寫模塊
用 tornado 做網(wǎng)站 (1)
標準庫 (5)
函數(shù)(4)
類(5)
字符串(2)
關(guān)于 Python 的故事
函數(shù)(3)
字符串(4)
處理股票數(shù)據(jù)
常用數(shù)學(xué)函數(shù)和運算優(yōu)先級
字符串(3)
為計算做準備
多態(tài)和封裝
類(4)
迭代
語句(3)
錯誤和異常 (3)
分析 Hello
Python 安裝
標準庫 (2)
列表(2)
元組

語句(5)

while,翻譯成中文是“當...的時候”,這個單詞在英語中,常常用來做為時間狀語,while ... someone do somthing,這種類型的說法是有的。在 Python 中,它也有這個含義,不過有點區(qū)別的是,“當...時候”這個條件成立在一段范圍或者時間間隔內(nèi),從而在這段時間間隔內(nèi)讓 Python 做好多事情。就好比這樣一段情景:

while 年齡大于 60 歲:-------->當年齡大于 60 歲的時候
    退休            -------->凡是符合上述條件就執(zhí)行的動作

展開想象,如果制作一道門,這道門就是用上述的條件調(diào)控開關(guān)的,假設(shè)有很多人經(jīng)過這個們,報上年齡,只要年齡大于 60,就退休(門打開,人可以出去),一個接一個地這樣循環(huán)下去,突然有一個人年齡是 50,那么這個循環(huán)在他這里就停止,也就是這時候他不滿足條件了。

這就是 while 循環(huán)。寫一個嚴肅點的流程,可以看下圖:

http://wiki.jikexueyuan.com/project/start-learning-python/images/12501.png" alt="" />

做猜數(shù)字游戲

前不久,有一個在校的大學(xué)生朋友(他叫李航),給我發(fā)郵件,讓我看了他做的游戲,能夠?qū)崿F(xiàn)多次猜數(shù),直到猜中為止。這是一個多么喜歡學(xué)習(xí)的大學(xué)生呀。

我在這里將他寫的程序恭錄于此,如果李航同學(xué)認為此舉侵犯了自己的知識產(chǎn)權(quán),可以告知我,我馬上撤下此代碼。

#! /usr/bin/env Python
#coding:UTF-8           

import random

i=0
while i < 4:
    print'********************************'
    num = input('請您輸入 0 到 9 任一個數(shù):')       #李同學(xué)用的是 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ū)別于李同學(xué)

程序用 num_input 變量接收了輸入的內(nèi)容。但是,請列位看官一定要注意,看到這里想睡覺的要打起精神了,我要分享一個多年編程經(jīng)驗:

請牢記:任何用戶輸入的內(nèi)容都是不可靠的。

這句話含義深刻,但是,這里不做過多的解釋,需要各位在隨后的編程生涯中體驗了。為此,我們要檢驗用戶輸入的是否符合我們的要求,我們要求用戶輸入的是 1 到 100 之間的整數(shù),那么就要做如下檢驗:

  1. 輸入的是否是整數(shù)
  2. 如果是整數(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í)行此處語句

再看看李航同學(xué)的程序,在循環(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ù)了
    ...

觀察李同學(xué)的程序,還有一點需要向列位顯明的,那就是在條件表達式中,兩邊最好是同種類型數(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,101)

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 or 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,跳出循環(huán),執(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 則是要從當前位置(即 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í)行結(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

for...else

除了有 while...else 外,還可以有 for...else。這個循環(huán)也通常用在當跳出循環(huán)之后要做的事情。

#!/usr/bin/env python
# coding=utf-8

from math import sqrt

for n in range(99, 1, -1):
    root = sqrt(n)
    if root == int(root):
        print n
        break

else:
    print "Nothing."

讀 讀者是否能夠讀懂這段代碼的含義?

閱讀代碼是一個提升自己編程水平的好方法。如何閱讀代碼?像看網(wǎng)上新聞那樣嗎?一目只看自己喜歡的文字,甚至標題看不完就開始噴。

絕對不是這樣,如果這樣,不是閱讀代碼呢。閱讀代碼的最好方法是給代碼做注釋。對,如果可能就給每行代碼做注釋。這樣就能理解代碼的含義了。

上面的代碼,讀者不妨做注釋,看看它到底在干什么。如果把 for n in range(99, 1, -1)修改為 for n in range(99, 81, -1)看看是什么結(jié)果?


總目錄   |   上節(jié):語句(4)   |   下節(jié):文件(1)

如果你認為有必要打賞我,請通過支付寶:qiwsir@126.com,不勝感激。

上一篇:語句(3)下一篇:標準庫 (4)