一、基本概念
1、Python語言支持的運算符類型
算數運算符、比較運算符、賦值運算符、邏輯運算符、位運算符、成員運算符、身份運算符、運算符優先級
2、計算順序
運算符優先級表決定了哪個運算符在別的運算符之前計算,若是要改變計算的順序,使用圓括號。
3、結合規律
運算符通常由左向右結合,即相同優先級的運算符按照從左向右的順序計算。
In [2]: 3*4-2+6/2Out[2]: 13In [3]: 3*4-(2+6)/2Out[3]: 8
二、運算符優先級表
運算符 | 描述 |
lambda | lambda表達式 |
or | 布爾“或” |
and | 布爾“與” |
not x | 布爾“非” |
in,not in | 成員測試 |
is,is not | 同一性測試 |
<,<=,>,>=,!=,== | 比較 |
| | 按位或 |
^ | 按位異或 |
& | 按位與 |
>>,<< | 移位 |
+,- | 加法與減法 |
*,/,% | 乘法、除法、取餘 |
+x,-x | 正負號 |
~x | 按位翻轉 |
** | 指數 |
x.attribute | 屬性參考 |
x[index] | 下標 |
x[index:index] | 尋址段 |
f(arguments...) | 函數調用 |
(expression,...) | 綁定或元組顯示 |
[expression,...] | 列表顯示 |
{key:datum,...} | 字典顯示 |
'expression,...' | 字符串轉換 |
三、運算符相關函數
1、內建函數
cmp():比較兩個數的大小
type():返回數字對象的類型
str():將數字轉換爲字符串
int():將變量的值的類型轉換爲整型的
In [4]: cmp(5,6) Out[4]: -1In [5]: cmp(6,6) Out[5]: 0 In [6]: cmp(9,6) Out[6]: 1
解析:cmp()是將圓括號裏的第一個數和第二數進行比較,<(輸出-1)、=(輸出0)、>(輸出1)
In [8]: str(123) Out[8]: '123'In [9]: str(0xFF) Out[9]: '255'In [10]: type(123666666666666666666666666) Out[10]: long In [12]: a=456In [13]: type(a) Out[13]: int In [14]: str(a) Out[14]: '456'
2、數值工廠函數
int():返回一個字符串或者數值對象的整型表示
long():返回一個字符串或者數值對象的長整型表示
float():返回一個字符串或者數值對象的浮點型表示
bool():返回對象的布爾值
In [17]: int(3.1415926) Out[17]: 3In [18]: long(56) Out[18]: 56LIn [19]: float(8) Out[19]: 8.0In [20]: bool(0) Out[20]: False In [21]: bool(1) Out[21]: True In [22]: bool(123) Out[22]: True
3、功能函數
abs():返回給定參數的絕對值
coerce():返回一個包含類型轉換完畢的兩個數值元素的元組
divmod():將除法和取餘運算結合起來,返回一個包含商和餘數的元組
pow():可以進行指數運算
round():用於對浮點型進行四捨五入運算
In [24]: abs(-123) #|-123|=123Out[24]: 123In [25]: coerce(12,23) Out[25]: (12, 23) In [26]: divmod(10,3) #10除以3等於3餘1Out[26]: (3, 1) In [27]: pow(2,3) #2^3=8Out[27]: 8In [28]: round(3.1415926) Out[28]: 3.0In [29]: round(5.678) Out[29]: 6.0
4、數字進制轉換函數
hex():將數字轉換成十六進制數並以字符串形式返回
oct():將數字轉換成八進制數並以字符串形式返回
bin():將數字轉換成二進制數並以字符串形式返回
In [30]: hex(123) Out[30]: '0x7b'In [31]: oct(9) Out[31]: '011'In [32]: bin(9) Out[32]: '0b1001'
注意:
1、Python中進制顯示
二進制binary--0b
八進制octal--0
十進制decimal
十六進制hex--0x
2、在shell中 0開頭的數認爲是八進制的數
[root@localhost ~]# echo $((08*2))-bash: 08: value too great for base (error token is "08") [root@studying ~]# echo $((07*2))14[root@localhost ~]# echo $((09*2))-bash: 09: value too great for base (error token is "09")
解析:在shell中0開頭的數被解釋爲八進制的數值(八進制數個位最大是7)
[root@localhost ~]# echo $((9*2))18[root@localhost ~]# echo $((10#09*2))18
解決辦法:在數值的前面註釋10#表示該數爲十進制數
四、腳本實例之運算符
腳本練習1:分數成績的判斷
#!/usr/bin/pythonu_grade=raw_input("please input your grade:")if u_grade.isdigit(): if 90<=int(u_grade)<=100: print "your grade is",u_grade,"A" elif 80<=int(u_grade)<=89: print "your grade is",u_grade,"B" elif 70<=int(u_grade)<=79: print "your grade is",u_grade,"C" elif 60<=int(u_grade)<=69: print "your grade is",u_grade,"D" elif 0<=int(u_grade)<=59: print "your grade is",u_grade,"E" else: print "please input the range of number 0-100"else: print "It's not a valid number,try again"
腳本練習2:用戶信息的按條件獲取
#!/usr/bin/pythonimport os f=os.popen('cat /etc/passwd')for i in f: u_list=i.split(":") if 500<int (u_list[2])<2000: print "%s uid is %s "%(u_list[0],u_list[2])
腳本練習3:加、減、乘、除、取餘運算
#!/usr/bin/python#coding=utf-8num1=raw_input("please input the first number:x=") num2=raw_input("請輸入第二個數字:y=")#優化方向:進行數值的大小判斷,合理運算if num1.isdigit() and num2.isdigit(): print "x*y=",int(num1)*int(num2) print "x+y=",int(num1)+int(num2) print "x-y=",int(num1)-int(num2) print "x/y=",int(num1)/int(num2) print "x%y=",int(num1)%int(num2)else: print "please input two number"
五、注意事項
1、加法問題
對於兩對象的相加,則相加項的格式必須相同否則報錯,相加:數值相加、元素增加……
In [20]: a=[1,2,3] In [21]: b=["zhang","jia","cai"] In [22]: a+b #加法方式的內容追加,前後相加的格式必須相同Out[22]: [1, 2, 3, 'zhang', 'jia', 'cai'] In [23]: c=123In [24]: d="123"In [25]: c+d---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-25-99d6dddc327d> in <module>()----> 1 c+d TypeError: unsupported operand type(s) for +: 'int' and 'str'
2、乘法問題
對於乘法中的*,如果數字相乘則爲其本意=數與數的乘積運算,如果字符串*一個數字則表示字符串的重複顯示,如下:
In [27]: a=123In [28]: a*3Out[28]: 369In [29]: b="123"In [30]: b*3Out[30]: '123123123'