python條件和循環(huán)的使用方法
前面已經(jīng)介紹過(guò)幾種基本語(yǔ)句(print,import,賦值語(yǔ)句),下面我們來(lái)介紹條件語(yǔ)句,循環(huán)語(yǔ)句。
一. print和import的更多信息
1.1 使用逗號(hào)輸出
A.打印多個(gè)表達(dá)式,用逗號(hào)隔開(kāi),會(huì)在每個(gè)參數(shù)之間插入一個(gè)空格符:
>>> print 'age:',42
age: 42
B.同時(shí)輸出文本和變量值,卻又不希望使用字符串格式化:
>>> name = 'Peter'
>>> greeting = 'Hello'
>>> print greeting,',',name
Hello , Peter
上面的例子中會(huì)在逗號(hào)前加入一個(gè)空格,我們可以這樣優(yōu)化:
>>> print greeting + ',',name
Hello, Peter
注意,如果在結(jié)尾處加上逗號(hào),那么接下來(lái)的語(yǔ)句會(huì)與前一句在同一行打印:
>>> print 'Hello,',
print 'world'
Hello,world
1.2 把某件事作為另一件事導(dǎo)入
從模塊導(dǎo)入函數(shù)時(shí),可以使用:
整個(gè)模塊導(dǎo)入:import somemodule
導(dǎo)入其中一個(gè)函數(shù):from somemodule import somefunction
導(dǎo)入其中幾個(gè)函數(shù):from somemodule import somefunction,anotherfunction,yetanotherfunction
導(dǎo)入全部函數(shù):from somemodule import *
如果某2個(gè)模塊都有相同名字的函數(shù),比如叫open函數(shù),那么可以這樣給函數(shù)或者模塊提供別名:
>>> import math
>>> import math as foobar
>>> foobar.sqrt(4)
2.0
>>> from math import sqrt as foobar2
>>> foobar2(4)
2.0
二. 賦值魔法
就算是不起眼的賦值語(yǔ)句也有一些特殊的技巧。
2.1 序列解包
序列解包就是將多個(gè)值的序列解開(kāi),然后放到變量的序列中。
>>> #'多個(gè)賦值操作同時(shí)進(jìn)行'
>>> x,y,z = 1,2,3
>>> print x,y,z
1 2 3
>>> #'交換2個(gè)或多個(gè)變量'
>>> x,y = y,x
>>> print x,y
2 1
>>> #'當(dāng)函數(shù)或方法返回元組時(shí)'
>>> s = {'a':1,'b':2,'c':3}
>>> key,value = s.popitem()
>>> print key,value
a 1
最后一個(gè)例子可以看出,它允許函數(shù)返回一個(gè)以上的值并打包成元組,然后通過(guò)一個(gè)復(fù)制語(yǔ)句很容易進(jìn)行訪問(wèn)。
注意:解包的序列中元素?cái)?shù)量必須和放置在賦值符合=左邊的變量數(shù)量完全一致,否則會(huì)引發(fā)異常。
2.2 鏈?zhǔn)劫x值
鏈?zhǔn)劫x值是將同一個(gè)值賦給多個(gè)變量的捷徑。
>>> x = y = 'sss'
2.3 增量賦值
增量賦值可以讓代碼更緊湊簡(jiǎn)練。
對(duì)于+,-,*,/,%等標(biāo)準(zhǔn)運(yùn)算符都適用:
>>> x = 2
>>> x += 1
>>> x *= 2
>>> x
6
>>> #對(duì)其他數(shù)據(jù)類型也適用
>>> f = 'foo'
>>> f += 'bar'
>>> f
'foobar'
三. 語(yǔ)句塊:縮排的樂(lè)趣
語(yǔ)句塊是條件為真時(shí)執(zhí)行一次或多次的一組語(yǔ)句。在python中,冒號(hào)(:)用來(lái)標(biāo)識(shí)語(yǔ)句塊的開(kāi)始,塊中的每一個(gè)語(yǔ)句都是縮進(jìn)的。當(dāng)回退到和已經(jīng)閉合的塊一樣的縮進(jìn)量時(shí),就表示當(dāng)前塊已經(jīng)結(jié)束了。
四. 條件和條件語(yǔ)句
4.1 這就是布爾變量的作用
下面的值在作為布爾表達(dá)式的時(shí)候,會(huì)被解釋器看作假(False):
False None 0 “” () [] {}
其他的一切值都被解釋為真,包括特殊值True。
4.2 條件執(zhí)行和if語(yǔ)句
如果條件判斷為真,那么后面的語(yǔ)句塊就會(huì)被執(zhí)行,也可以加入elif進(jìn)行多個(gè)條件檢查。作為if的一部分,還有else子句。
當(dāng)然,我們可以在if語(yǔ)句里面嵌套使用if語(yǔ)句。
num = input ('enter a number? ')
if num > 0:
if num > 50:
print"num > 50"
elif num > 10:
print "num > 10"
else:
print "num > 0"
else:
print "num <= 0"
4.3 更復(fù)雜的條件
下面我們回到條件本身,因?yàn)樗鼈儾攀菞l件執(zhí)行真正有趣的部分。
4.3.1. 比較運(yùn)算符
x == y; x < y; x > y; x >= y; x <= y;
x != y; x is y; x is not y; x in y; x not in y;
4.3.2. is:同一性運(yùn)算符
>>> x = y = [1,2,3]
>>> z = [1,2,3]
>>> x is y
True
>>> x is z
False
>>> x == z
True
由此看出,使用==運(yùn)算符來(lái)判定兩個(gè)對(duì)象是否相等,使用is判定兩者是否同一個(gè)對(duì)象。
4.3.3. in:成員資格運(yùn)算符
name = raw_input("what is your name?")
if 's' in name:
print 'your name contains the letter s'
else:
print 'your name does not contain the letter s'
4.3.4.字符串和序列比較
字符串可以按照字符順序排列進(jìn)行比較。
>>> 'alpha' < 'beta'
True
字符是按照本身的順序值排列的,一個(gè)字母的順序值可以用ord函數(shù)查到。
其他的序列也可以用同樣的方式進(jìn)行比較,不過(guò)比較的是元素的其他類型。
>>> [1,2] > [2,1]
False
>>> [1,[2,3]] < [1,[3,2]]
True
4.3.5. 布爾運(yùn)算符
and運(yùn)算符是所謂的布爾運(yùn)算符,它連接2個(gè)布爾值,并且在兩者都為真時(shí)返回真,否則返回假。與它同類的還有2個(gè)運(yùn)算符,or和not。
number = raw_input("enter a number?")
if number <=10 and number >= 1:
print "great!"
4.3.6. 斷言
if語(yǔ)句有個(gè)近親,工作方式類似于:
if not condition:
crash program
這是因?yàn)榕c其讓程序在晚些時(shí)候崩潰,不如在錯(cuò)誤條件出現(xiàn)時(shí)直接讓它崩潰。語(yǔ)句中使用的關(guān)鍵字是assert。它確保程序中的某個(gè)條件為真時(shí)才能讓程序正常工作。
>>> age = -1
>>> assert 0 < age < 100
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
assert 0 < age < 100
AssertionError
五. 循環(huán)
5.1 while循環(huán)
while語(yǔ)句非常靈活,可以在任何條件為真的情況下重復(fù)執(zhí)行一個(gè)代碼塊。
name = ''
while not name:
name = raw_input('please enter your name: ')
print 'hello,%s!' % name
5.2 for循環(huán)
當(dāng)要為一個(gè)集合(序列和其他可迭代對(duì)象)的每個(gè)元素都執(zhí)行一個(gè)代碼塊時(shí),我們就需要for循環(huán)了。
5.2.1.循環(huán)遍歷字典元素
一個(gè)簡(jiǎn)單的for語(yǔ)句就能循環(huán)字典的所有鍵,就像處理序列一樣:
d = {'x':1,'y':2,'z':3}
for key in d:
print key,'corrensponds to ',d[key]
5.2.2.一些迭代工具
A.并行迭代
names = ['a','b','c','d']
ages = [12,23,45,32]
#循環(huán)索引迭代
for i in range(len(names)):
print names[i],'is',ages[i],'years old.'
#內(nèi)建zip函數(shù)迭代
for name,age in zip(names,ages):
print name,'is',age,'years old.'
B.編號(hào)迭代
有時(shí)候迭代序列中的對(duì)象時(shí),同時(shí)要獲取當(dāng)前對(duì)象的索引。
#index計(jì)數(shù)
index = 0
for string in strings:
if 'xxx' in string:
string[index] = 'sss'
index += 1
#內(nèi)建enumerate函數(shù)迭代
for index,string in strings:
if 'xxx' in string:
string[index] = 'sss'
C.翻轉(zhuǎn)和排序迭代
函數(shù)reversed和sorted,作用于任何序列或可迭代對(duì)象上,不是原地修改對(duì)象,而是返回翻轉(zhuǎn)或排序后的版本:
>>> sorted([2,6,3,7])
[2, 3, 6, 7]
>>> list(reversed('hello'))
['o', 'l', 'l', 'e', 'h']
5.3 跳出循環(huán)
一般情況下循環(huán)會(huì)一直執(zhí)行到條件為假,或者到序列元素用完時(shí)。但是有時(shí)候需要提前中斷一個(gè)循環(huán)。
5.3.1.break
結(jié)束循環(huán)可以使用break語(yǔ)句。
for i in range(0,10):
if i == 5:
print 'quit'
break
print i
5.3.2.continue
continue語(yǔ)句會(huì)讓當(dāng)前迭代結(jié)束,跳到下一輪循環(huán)的開(kāi)始。
for i in range(0,10):
if i % 2 == 0:
continue
print i
5.3.3.while True/break
比如當(dāng)用戶在提示符下輸入單詞時(shí)做一些事情,并在用戶不輸入單詞后結(jié)束循環(huán)。
while True:
word = raw_input('enter a word: ')
if not word:
break
print 'The word is '+ word
六. 列表推導(dǎo)式--輕量級(jí)循環(huán)
列表推導(dǎo)式是利用其他列表創(chuàng)建新列表的一種方法,工作方式類似于for循環(huán):
>>> [x**2 for x in range(10) if x % 3 == 0]
[0, 9, 36, 81]
>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)
七. 三人行
作為最后的結(jié)束,我們來(lái)看3個(gè)語(yǔ)句:pass,del和exec
pass:什么都不做,用來(lái)在代碼中做占位符使用,方便調(diào)試代碼。
if a == 'a':
print 'yes'
elif a == 'b':
pass
else:
print 'no'
del:刪除不再使用的對(duì)象,也就是用作垃圾收集。
>>> x = [1,2]
>>> y = x
>>> del x
>>> x
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
x
NameError: name 'x' is not defined
>>> y
[1, 2]
del刪除的只是名稱,而不是列表本身,所以上面的例子中,刪除x不會(huì)影響到y(tǒng)。
exec:動(dòng)態(tài)創(chuàng)造python代碼,然后將其作為語(yǔ)句執(zhí)行或作為表達(dá)式計(jì)算。但是這樣做是會(huì)有很嚴(yán)重的潛在安全漏洞,如果程序?qū)⒂脩籼峁┑囊欢蝺?nèi)容中的一部分字符串作為代碼執(zhí)行,程序可能會(huì)失去對(duì)代碼執(zhí)行的控制。
>>> exec "print 'hello,world'"
hello,world
- Python3單行定義多個(gè)變量或賦值方法
- python嵌套函數(shù)使用外部函數(shù)變量的方法(Python2和Python3)
- python if not in 多條件判斷代碼
- Python中條件判斷語(yǔ)句的簡(jiǎn)單使用方法
- Python中條件選擇和循環(huán)語(yǔ)句使用方法介紹
- Python3基礎(chǔ)之條件與循環(huán)控制實(shí)例解析
- Python入門篇之條件、循環(huán)
- 詳解Python中的條件判斷語(yǔ)句
- Python中的條件判斷語(yǔ)句與循環(huán)語(yǔ)句用法小結(jié)
- Python實(shí)現(xiàn)多條件篩選目標(biāo)數(shù)據(jù)功能【測(cè)試可用】
- Python3.5基礎(chǔ)之變量、數(shù)據(jù)結(jié)構(gòu)、條件和循環(huán)語(yǔ)句、break與continue語(yǔ)句實(shí)例詳解
相關(guān)文章
python中Pycharm 輸出中文或打印中文亂碼現(xiàn)象的解決辦法
本篇文章主要介紹了python中Pycharm 輸出中文或打印中文亂碼現(xiàn)象的解決辦法 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06python實(shí)現(xiàn)定制交互式命令行的方法
這篇文章主要介紹了python實(shí)現(xiàn)定制交互式命令行的方法,需要的朋友可以參考下2014-07-07使用Python實(shí)現(xiàn)微信拍一拍功能的思路代碼
這篇文章主要介紹了使用Python實(shí)現(xiàn)微信“拍一拍”的思路代碼,,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Python with語(yǔ)句上下文管理器兩種實(shí)現(xiàn)方法分析
這篇文章主要介紹了Python with語(yǔ)句上下文管理器兩種實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python上下文管理器的相關(guān)概念、功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-02-02Django高并發(fā)負(fù)載均衡實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Django高并發(fā)負(fù)載均衡實(shí)現(xiàn)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04python控制臺(tái)中實(shí)現(xiàn)進(jìn)度條功能
這篇文章主要介紹了python控制臺(tái)中實(shí)現(xiàn)進(jìn)度條功能的方法,想要了解的朋友可以參考一下2015-11-11