摘要:邏輯運算符假設(shè),運算符描述實例布爾與如果為,返回,否則它返回的計算值。布爾或如果是,它返回,否則它返回的計算值。以為例,說明語句。逗號表示打印在同一行本來,在語句中,字符串后面會接一個符號。
運算符 算術(shù)運算符
前面已經(jīng)講過了四則運算,其中涉及到一些運算符:加減乘除,對應(yīng)的符號分別是:+ - * /,此外,還有求余數(shù)的:%。這些都是算術(shù)運算符。其實,算術(shù)運算符不止這些。根據(jù)中學(xué)數(shù)學(xué)的知識,也應(yīng)該想到,還應(yīng)該有乘方、開方之類的。
下面列出一個表格,將所有的運算符表現(xiàn)出來。
運算符 | 描述 | 實例 |
---|---|---|
+ | 加 - 兩個對象相加 | 10+20 輸出結(jié)果 30 |
- | 減 - 得到負數(shù)或是一個數(shù)減去另一個數(shù) | 10-20 輸出結(jié)果 -10 |
* | 乘 - 兩個數(shù)相乘或是返回一個被重復(fù)若干次的字符串 | 10 * 20 輸出結(jié)果 200 |
/ | 除 - x除以y | 20/10 輸出結(jié)果 2 |
% | 取余 - 返回除法的余數(shù) | 20%10 輸出結(jié)果 0 |
** | 冪 - 返回x的y次冪 | 10**2 輸出結(jié)果 100 |
// | 取整除 - 返回商的整數(shù)部分 | 9//2 輸出結(jié)果 4 , 9.0//2.0 輸出結(jié)果 4.0 |
以下假設(shè)a=10,b=20:
運算符 | 描述 | 實例 |
---|---|---|
== | 等于 - 比較對象是否相等 | (a == b) 返回 False。 |
!= | 不等于 - 比較兩個對象是否不相等 | (a != b) 返回 True. |
> | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 - 返回x是否小于y | (a < b) 返回 True。 |
>= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
<= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 True。 |
(假設(shè)a=10,b=20)
運算符 | 描述 | 實例 |
---|---|---|
and | 布爾"與" - 如果x為False,x and y返回False,否則它返回y的計算值。 | (a and b) 返回 20。 |
or | 布爾"或" - 如果x是True,它返回True,否則它返回y的計算值。 | (a or b) 返回 10。 |
not | 布爾"非" - 如果x為True,返回False。如果x為False,它返回True。 | not(a and b) 返回 false。 |
and
and,翻譯為“與”運算,但事實上,這種翻譯容易引起望文生義的理解。
先說一下正確的理解。
A and B,含義是:
首先運算A,如果A的值是True,就計算B,并將B的結(jié)果返回做為最終結(jié)果,如果B是False,那么A and B的最終結(jié)果就是False,如果B的結(jié)果是True,那么A and B的結(jié)果就是True;
如果A的值是False ,就不計算B了,直接返回A and B的結(jié)果為False.
簡單語句 print在Python 2中,print是一個語句,但是在Python 3中它是一個函數(shù)了。這點請注意。
以Python 2為例,說明print語句。如果說讀者使用的是Python 3,請自行將print xxx修改為print(xxx),其它不變。
print發(fā)起的語句,在程序中主要是將某些東西打印出來,還記得在講解字符串的時候,專門講述了字符串的格式化輸出嗎?那就是用來print的。
>>> print "hello, world" hello, world >>> print "hello","world" //逗號表示打印在同一行 hello world
本來,在print語句中,字符串后面會接一個n符號。即換行。但是,如果要在一個字符串后面跟著逗號,那么換行就取消了,意味著兩個字符串"hello","world"打印在同一行。
但是,在Python 3中情況有變。默認的end="n",如果不打算換行,可以在使用print()函數(shù)的時候,修改end這個參數(shù)的值。
>>> for i in [1,2,3,4]: print(i, end=",") 1,2,3,4,import
import引入模塊的方法,是Python編程經(jīng)常用到的。引用方法有如下幾種:
>>> import math >>> math.pow(3,2) 9.0
這是一種可讀性非常好的引用方式,并且不同模塊的同名函數(shù)不會產(chǎn)生沖突。
>>> from math import pow >>> pow(3,2) 9.0
這種引用方法,比較適合于引入模塊較少的時候。如果引入模塊多了,可讀性就下降了,會不知道那個函數(shù)來自那個模塊。
>>> from math import pow as pingfang >>> pingfang(3,2) 9.0
將從某個模塊引入的函數(shù)重命名,比如講pow充命名為pingfang,然后使用pingfang()就相當于在使用pow()了
>>> from math import pow, e, pi >>> pow(e,pi) 23.140692632779263
引入了math模塊里面的pow,e,pi,pow()是一個乘方函數(shù),e是那個歐拉數(shù);pi就是π.
>>> from math import * >>> pow(3,2) 9.0 >>> sqrt(9) 3.0
一下將math中的所有函數(shù)都引過來了。不過,這種方式的結(jié)果是讓可讀性更降低了。僅適用于模塊中的函數(shù)比較少的時候,并且在程序中應(yīng)用比較頻繁。
事實上,不僅函數(shù)可以引入,模塊中還可以包括常數(shù)等,都可以引入。在編程中,模塊中可以包括各樣的對象,都可以引入。
賦值a = 3
>>> x, y, z = 1, "python", ["hello", "world"] >>> x 1 >>> y "python" >>> z ["hello", "world"]
>>> a = "itdiffer.com", "python" >>> a ("itdiffer.com", "python")
原來是將右邊的兩個值裝入了一個元組,然后將元組賦給了變量a。
兩個變量的值對調(diào),python只要一行就完成了:
>>> a = 2 >>> b = 9 >>> a, b = b, a >>> a 9 >>> b 2
因為我前面已經(jīng)數(shù)次提到的Python中變量和對象的關(guān)系。變量相當于貼在對象上的標簽。這個操作只不過是將標簽換個位置,就分別指向了不同的數(shù)據(jù)對象。
還有一種賦值方式,被稱為“鏈式賦值”
>>> m = n = "I use python" >>> print m, n #Python 3:print(m, n) I use python I use python
用這種方式,實現(xiàn)了一次性對兩個變量賦值,并且值相同。
>>> id(m) 3072659528L >>> id(n) 3072659528L
用id()來檢查一下,發(fā)現(xiàn)兩個變量所指向的是同一個對象。
另外,還有一種判斷方法,來檢查兩個變量所指向的值是否是同一個(注意,同一個和相等是有差別的。在編程中,同一個就是id()的結(jié)果一樣。
>>> m is n True
這是在檢查m和n分別指向的對象是否是同一個,True說明是同一個。
>>> a = "I use python" >>> b = a >>> a is b True
這是跟上面鏈式賦值等效的。
但是:
>>> b = "I use python" >>> a is b False >>> id(a) 3072659608L >>> id(b) 3072659568L >>> a == b True
看出其中的端倪了嗎?這次a、b兩個變量雖然相等,但不是指向同一個對象。
還有一種賦值形式,如果從數(shù)學(xué)的角度看,是不可思議的,如:x = x + 1,在數(shù)學(xué)中,這個等式是不成立的。因為數(shù)學(xué)中的“=”是等于的含義,但是在編程語言中,它成立,因為"="是賦值的含義,即將變量x增加1之后,再把得到的結(jié)果賦值變量x.
這種變量自己變化之后將結(jié)果再賦值給自己的形式,稱之為“增量賦值”。+、-、*、/、%都可以實現(xiàn)類似這種操作。
為了讓這個操作寫起來省點事(要寫兩遍同樣一個變量),可以寫成:x += 1
>>> x = 9 >>> x += 1 >>> x 10
除了數(shù)字,字符串進行增量賦值,在實際中也很有價值。
>>> m = "py" >>> m += "th" >>> m "pyth" >>> m += "on" >>> m "python"條件語句 if語句
>>> a = 8 >>> if a == 8: //冒號是必須的 ... print a //四個空格的縮進是必須的 ... 8 >>>
必須要通過縮進方式來表示語句塊的開始和結(jié)束
縮進用四個空格也是必須的
if...elif...else#coding:utf-8 print "請輸入一個整數(shù)數(shù)字:" number = int(raw_input()) if number == 10: print "您輸入的數(shù)字是: %d" % number print "You are smart" elif number > 10: print "您輸入的數(shù)字是: %d" % number print "This number is more than 10." elif number < 10: print "您輸入的數(shù)字是: %d" % number print "This number is less than 10." else: print "Are you a human?" 結(jié)果打?。? 請輸入一個整數(shù)數(shù)字: 12 您輸入的數(shù)字是: 12 This number is more than 10. 請輸入一個整數(shù)數(shù)字: 10 您輸入的數(shù)字是: 10 You are smart 請輸入一個整數(shù)數(shù)字: 9 您輸入的數(shù)字是: 9 This number is less than 10.三元操作符
>>> name = "liuguoquan" if "deason" else "xiaoniu" >>> name "liuguoquan" >>> name = "liuguoquan" if "" else "xiaoniu" >>> name "xiaoniu" >>> name = "liuguoquan" if "xiaoniu" else "" >>> name "liuguoquan"
總結(jié)一下:A = Y if X else Z
根據(jù)上述例子可以看出:
如果X為真,那么就執(zhí)行A = Y
如果X為假,那么就執(zhí)行A = Z
>>> a = "python" if x > y else "java" >>> a "java" >>> a = "python" if x < y else "java" >>> a "python" >>>for循環(huán)
For循環(huán)的基本結(jié)構(gòu)是:
for 循環(huán)規(guī)則: //需要冒號
操作語句 //語句要縮進簡單的for循環(huán)
>>> hello = "liuguoquan" >>> for i in hello: ... print i ... l i u g u o q u a n or: >>> for i in range(len(hello)): ... print i ... 0 1 2 3 4 5 6 7 8 9range(start,stop,[,step])
range是個內(nèi)建函數(shù),一般形式是range(start,stop,[,step])
關(guān)于range()函數(shù)注意一下幾點:
該函數(shù)可以創(chuàng)建一個數(shù)字元素組成的列表
該函數(shù)最常用于for循環(huán)
函數(shù)的參數(shù)必須是整數(shù),默認從0開始
step默認值是1,不寫就是默認值
step是正數(shù),返回list最后的值不包含stop的值,即start + step的值小于stop;step是負數(shù),start + step的值大于stop;
step不能等于0
參數(shù)解釋:
start:開始數(shù)值,默認為0
stop:結(jié)束數(shù)值,必須要寫
step:變化的步長,默認是1,不能為0
正數(shù)
>>> range(9) [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> range(0,9) [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> range(0,9,1) [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> range(1,9) [1, 2, 3, 4, 5, 6, 7, 8] >>> range(1,9,2) [1, 3, 5, 7]
負數(shù)
>>> rang(-9) Traceback (most recent call last): File "獲取列表的索引值組成的列表", line 1, in NameError: name "rang" is not defined >>> range(0,-9,-1) [0, -1, -2, -3, -4, -5, -6, -7, -8] >>> range(0,-9,-2) [0, -2, -4, -6, -8] >>>
>>> lgq = ["I","am","a","Android"] >>> index = range(len(lgq)) >>> index [0, 1, 2, 3] >>>找出100以內(nèi)的能夠被3整除的正整數(shù)
#coding:utf-8 result = [] for n in range(1,100): if n % 3 == 0: result.append(n) print result or: print range(3,100,3) 結(jié)果打印: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]for對象
#coding:utf-8 name = "liuguoquan" print "str" for i in name: print i, print "list" name_list = list(name) print name_list for i in name_list: print i, print "set" name_set = set(name) print name_set for i in name_set: print i, print "tuple" name_tuple = set(name) print name_tuple for i in name_tuple: print i, print "dict" name_dict = {"name":"liuguoquan","sex":"male","age":"18"} print name_dict for i in name_dict: print i,"-->",name_dict[i] 結(jié)果打印: str: l i u g u o q u a n list: ["l", "i", "u", "g", "u", "o", "q", "u", "a", "n"] l i u g u o q u a n set: set(["a", "g", "i", "l", "o", "n", "q", "u"]) a g i l o n q u tuple ("l", "i", "u", "g", "u", "o", "q", "u", "a", "n") l i u g u o q u a n dict: {"age": "18", "name": "liuguoquan", "sex": "male"} age --> 18 name --> liuguoquan sex --> male字典遍歷的多種寫法
name_dict = {"name":"liuguoquan","sex":"male","age":"18"} print name_dict for i in name_dict: print i,"-->",name_dict[i]
注意到,上面的循環(huán),其實是讀取了字典的key。在字典中,有一個方法,dict.keys(),得到的是字典key列表。
#獲取字典key列表 for k in name_dict.keys(): print k #Python 3: print(k)
這種循環(huán)方法和上面的循環(huán)方法,結(jié)果是一樣的,但是,這種方法并不提倡,以為它在執(zhí)行速度上表現(xiàn)欠佳。
如果要獲得字典的value怎么辦?不要忘記dict.values()方法
for k,v in name_dict.items(): print k,"-->",v
用上面的方法,要把所有的內(nèi)容都讀入內(nèi)存,內(nèi)存東西多了,可能會出麻煩。為此,Python中提供了另外的方法。
for k,v in name_dict.iteritems(): #注意:僅在Python2中可用,Python 3中已經(jīng)做了優(yōu)化,d.items()即有同等功能。 print k,"-->",v
這里是循環(huán)一個迭代器,迭代器在循環(huán)中有很多優(yōu)勢。除了剛才的dict.iteritems()之外,還有dict.itervalues(),dict.iterkeys()供你選用(以上三個dict.iter*都只用在Python 2中,Python 3中已經(jīng)不需要了)
如何判斷一個對象是不可迭代的?>>> import collections
引入collections這個標準庫。要判斷數(shù)字321是不是可迭代的,可以這么做:
>>> isinstance(321, collections.Iterable) False
返回了False,說明321這個整數(shù)類型的對象,是不可迭代的。再判斷一個列表對象。
>>> isinstance([1,2,3], collections.Iterable) True
從返回結(jié)果,我們知道,列表[1,2,3]是可迭代的。
當然,并不是要你在使用for循環(huán)之前,非要判斷某個對象是否可迭代。因為至此,你已經(jīng)知道了字符串str、列表list、字典dict、元組tuple、集合set都是可迭代的。
zip()zip()——一個內(nèi)建函數(shù),Python 2中,參數(shù)是seq1, seq2, ...,意思是序列數(shù)據(jù);在Python 3中,參數(shù)需要時可迭代對象。這點差別,通常是沒有什么影響的,因為序列也是可迭代的。值得關(guān)注的是返回值,在Python 2中,返回值是一個列表對象,里面以元組為元素;而Python 3中返回的是一個zip對象。
通過實驗來理解上面的文檔:
Python 2: >>> a = "qiwsir" >>> b = "github" >>> zip(a, b) [("q", "g"), ("i", "i"), ("w", "t"), ("s", "h"), ("i", "u"), ("r", "b")] Python 3: >>> zip(a, b)>>> list(zip(a, b)) [("q", "g"), ("i", "i"), ("w", "t"), ("s", "h"), ("i", "u"), ("r", "b")]
如果序列長度不同,那么就以"the length of the shortest argument sequence"為準。
>>> c = [1, 2, 3] >>> d = [9, 8, 7, 6] >>> zip(c, d) #這是Python 2的結(jié)果,如果是Python 3,請仿照前面的方式顯示查看 [(1, 9), (2, 8), (3, 7)]
>>> s = {"name":"qiwsir"} >>> t = {"lang":"python"} >>> zip(s,t) [("name", "lang")]
zip是一個內(nèi)置函數(shù),它的參數(shù)必須是序列,如果是字典,那么鍵視為序列。然后將序列對應(yīng)的元素依次組成元組,做為一個列表的元素。
問題:有兩個列表,分別是:a = [1, 2, 3, 4, 5], b = [9, 8, 7, 6, 5],要計算這兩個列表中對應(yīng)元素的和。for循環(huán)實現(xiàn)
>>> a = [1, 2, 3, 4, 5] >>> b = [9, 8, 7, 6, 5] >>> c = [] >>> for i in range(len(a)): ... c.append(a[i]+b[i]) ... >>> c [10, 10, 10, 10, 10]
zip()實現(xiàn)
>>> d = [] >>> for x,y in zip(a,b): ... d.append(x+y) ... >>> d [10, 10, 10, 10, 10]問題:有一個字典,myinfor = {"name":"qiwsir", "site":"qiwsir.github.io", "lang":"python"},將這個字典變換成:infor = {"qiwsir":"name", "qiwsir.github.io":"site", "python":"lang"}
for循環(huán)
>>> myinfor = {"name":"qiwsir", "site":"qiwsir.github.io", "lang":"python"} >>> infor = {} >>> for k,v in myinfor.items(): ... infor[v]=k ... >>> infor {"python": "lang", "qiwsir.github.io": "site", "qiwsir": "name"}
zip()
>>> dict(zip(myinfor.values(), myinfor.keys())) {"python": "lang", "qiwsir.github.io": "site", "qiwsir": "name"}enumerate()
enumerate()也是內(nèi)建函數(shù)。
>>> seasons = ["Spring", "Summer", "Fall", "Winter"] >>> list(enumerate(seasons)) [(0, "Spring"), (1, "Summer"), (2, "Fall"), (3, "Winter")] >>> list(enumerate(seasons, start=1)) [(1, "Spring"), (2, "Summer"), (3, "Fall"), (4, "Winter")]如果要同時得到元素索引和元素怎么辦?
for循環(huán)
week = ["monday","sunday","friday"] for i in range(len(week)): print week[i] + " is " + str(i) #注意,i是int類型,如果和前面的用+連接,必須是str類型
enumerate
for (i,day) in enumerate(week): print day + " is " + str(i)問題:將字符串中的某些字符替換為其它的字符串。原始字符串"Do you love Canglaoshi? Canglaoshi is a good teacher.",請將"Canglaoshi"替換為"PHP".
raw = "Do you love Canglaoshi? Canglaoshi is a good teacher." print raw #1. 先將字符串轉(zhuǎn)換為列表 raw_list = raw.split(" ") print type(raw_list) print raw_list #2. 對列表中的字符串進行替換 for i,string in enumerate(raw_list): if "Canglaoshi" in string: raw_list[i] = "PHP" print raw_list #3. 將列表轉(zhuǎn)換為字符串 print " ".join(raw_list)列表解析
Python有一個非常強大的功能,就是列表解析,它這樣使用:
>>> squares = [x**2 for x in range(1, 10)] >>> squares [1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> mybag = [" glass"," apple","green leaf "] #有的前面有空格,有的后面有空格 >>> [one.strip() for one in mybag] #去掉元素前后的空格 ["glass", "apple", "green leaf"]
在很多情況下,列表解析的執(zhí)行效率高,代碼簡潔明了。是實際寫程序中經(jīng)常被用到的。
現(xiàn)在Python的兩個版本,對列表解釋上,還是有一點點差別的,請認真看下面的比較操作。
Python 2: >>> i = 1 >>> [ i for i in range(9)] [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> i 8 Python 3: >>> i = 1 >>> [i for i in range(9)] [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> i 1
先i = 1,然后是一個列表解析式,非常巧合的是,列表解析式中也用了變量i。這種情況,在編程中是常常遇到的,我們通常把i=1中的變量i稱為處于全局命名空間里面(命名空間,是一個新詞匯,暫且用起來,后面會講述),而列表解析式中的變量i是在列表解析內(nèi),稱為處在局部命名空間。在Python 3中,for循環(huán)里的變量不再與全局命名空間的變量有關(guān)聯(lián)了。
while語句 whilewhile i< 5: print i i += 1 print "quit" 0 1 2 3 4 quitbreak
i= 10 while i: if i % 2 == 0: break else: print "%d is odd number" %i i = 0 print "%d is even number" %i 10 is even numbercontinue
i= 10 while i: if i % 2 == 0: i -= 1 continue; # 繼續(xù)下一次循環(huán) else: print "%d is odd number" %i i -= 1 print "%d is even number" %iwhile...else
while...else有點類似if ... else,只需要一個例子就可以理解。 當然,一遇到else了,就意味著已經(jīng)不在while循環(huán)內(nèi)了。
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 5for...else
除了有while...else外,還可以有for...else。這個循環(huán)也通常用在當跳出循環(huán)之后要做的事情。
from math import sqrt for n in range(99, 1, -1): root = sqrt(n) if root == int(root): print n # 滿足此條件后,不執(zhí)行else break else: print "Nothing." # break不執(zhí)行就會執(zhí)行else
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38207.html
摘要:以下這些項目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當你每個步驟都能做到很優(yōu)秀的時候,你應(yīng)該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...
文章目錄 強烈推薦系列教程,建議學(xué)起來??! 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內(nèi)部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...
摘要:二高級賦值語句何為高級賦值語句就是常規(guī)的賦值方法進行操作是會報錯的,得進行一些更高級一點的操作。小技巧三舉例用賦值語句把列表進行每次減少個元素并輸出列表。 從Pyt...
摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現(xiàn)在也是一直保持著更新狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...
閱讀 3967·2021-11-24 09:38
閱讀 1234·2021-10-19 11:42
閱讀 1833·2021-10-14 09:42
閱讀 2159·2019-08-30 15:44
閱讀 547·2019-08-30 14:04
閱讀 2897·2019-08-30 13:13
閱讀 1956·2019-08-30 12:51
閱讀 963·2019-08-30 11:22