本章要點:
- 單行註釋和多行註釋
- Python是弱類型語言
- Python變量的特徵
- Python變量命名規則
- Python關鍵字和內置函數
- Python支持的各種數值類型
- Python字符串入門
- 拼接字符串的方法
- repr和字符串
- 使用input和raw_input獲取用戶輸入
- 長字符串和原始字符串
- 字符串格式化
- 字符串的相關方法
- Python的賦值運算符
- Python的算術運算符
- Python的位運算符
- Python的擴展後的賦值運算符
- Python的索引運算符
- Python的比較運算符
- Python的邏輯運算符
- Python的三目運算符
- Python的in運算符
目錄
2.6.3 位運算符(&按位與、|按位或、^按位與或、~按位取反、<<左移、>>右移)6個
2.6.10 運算符的結合性和優先級(表達式運算中的運算順序)
2.1 單行註釋和多行註釋
- 單行註釋:Python使用(#)表示單行註釋的開始,跟在“#”後面直到這行結束爲止的代碼都將被解釋器忽略。
- 多行註釋:指一次性將程序中的多行代碼註釋掉,在Python中使用三個單引號(')或者三個雙引號(")將註釋的內容括起來。
例如:
#這是一行簡單的註釋
print("Hello World!")
'''
這裏面的內容全部是多行註釋
Python語言真的很簡單
'''
#print("這行代碼被註釋了,將不會被編譯、執行")
"""
這是三個雙引號括起來的多行註釋
Python同樣是允許的
"""
註釋的作用:(1)提高程序的可讀性;(2)是調試程序的重要方法。
2.2 變量
Python使用等號(=)作爲賦值運算符。
Python是弱類型語言,有兩個典型特徵:
- 變量無需聲明即可直接賦值;
- 變量的數據類型可以動態改變。
2.2.1 Python是弱類型語言
#定義一個數值類型變量
a=5
print(a)
#重新將字符串賦值給a變量
a='Hello,Charlie'
print(a)
print(type(a))
上面的程序中的type()函數的作用用於輸出傳入數據的類型。
2.2.2 使用print函數輸出變量
語法格式:print(value, ... , sep=' ',end='\n', file=sys.stdout, flush=False)
user_name = 'Charlie'
user_age = 8
#同時輸出多個變量和字符串
print("讀者名:",user_name,"年齡:",user_age)
#同時輸出多個變量和字符串,用sep指定分隔符
print("讀者名:",user_name,"年齡:",user_age,sep='|')
#設置end參數,指定輸出之後不再換行
print(40,'\t',end="")
print(50,'\t',end="")
print(60,'\t',end="")
f=open("poem.txt","w") #打開文件以便寫入
print('滄海月明珠有淚',file=f)
print('藍田日暖玉生煙',file=f)
#file參數指定print函數的輸出目標,默認值爲sys.stdout,代表了系統標準輸出——屏幕
#flush參數用於控制輸出緩存,保持爲False即可。
2.2.3 變量的命名規則
- 標識符可以由字母、數字、下劃線(_)組成,其中數字不能打頭。
- 標識符不能是Python關鍵字,但可以包含關鍵字。
- 標識符不能包含空格。
2.2.4 Python的關鍵字和內置函數
Python包含了如下表所示的關鍵字:
False | None | True | and | as |
assert | break | class | continue | def |
del | elif | else | except | finally |
for | from | global | if | import |
in | is | lambda | nonlocal | not |
or | pass | raise | return | try |
while | with | yield |
#導入keyword模塊
import keyword
#顯示所有關鍵字
keyword.kwlist
通過上面的程序可以查看Python所包含的關鍵字。
Python還提供瞭如下表的內置函數:
abs() | all() | any() | basestring() | bin() |
bool() | bytearry() | callable() | chr() | classmethod() |
cmp() | compile() | complex() | delattr() | dict() |
dir() | divmod() | enumerate() | eval() | execfile() |
file() | filter() | float() | format() | frozenset() |
getattr() | globals() | hasattr() | hash() | help() |
hex() | id() | input() | int() | isinstance() |
issubclass() | iter() | len() | list() | locals() |
long() | map() | max() | memoryview() | min() |
next() | object() | oct() | open() | ord() |
pow() | print() | property() | range() | raw_input() |
reduce() | reload() | repr() | reversed() | zip() |
round() | set() | setattr() | slice() | sorted() |
staticmethod() | str() | sum() | super() | tuple() |
type() | unichr() | unicode() | vars() | xrange() |
Zip() | _import_() | apply() | buffer() | coerce() |
intern() |
2.3 數值類型
2.3.1 整形
Python3的整形支持各種整數值,不管是小的整數值,還是大的整數值。Python的整形數值有4種表示形式:
- 十進制形式:最普通的整數就是十進制形式的整數。
- 二進制形式:以0b或0B開頭的整數就是二進制形式的整數。
- 八進制形式:以0o或0O開頭的整數就是八進制形式的整數。
- 十六進制形式:以0x或0X開頭的整數就是十六進制形式的整數。
例如:
#以0x或oX開頭的整數型數值是十六進制形式的整數
hex_value1 = 0x13
hex_value2 = 0XaF
print("hexValue1的值爲:",hex_value1)
print("hexValue2的值爲:",hex_value2)
#以0b或oB開頭的整數型數值是二進制形式的整數
bin_val = 0b111
print("bin_val的值爲:",bin_val)
bin_val = 0B101
print("bin_val的值爲:",bin_val)
#以0o或oO開頭的整數型數值是八進制形式的整數
oct_val = 0o54
print("oct_val的值爲:",oct_val)
oct_val = 0O17
print("oct_val的值爲:",oct_val)
#Python3.x允許爲數值(包括浮點型)增加下劃線作爲分隔符
one_million = 1_000_000
print(one_million)
price = 234_234_234 #price實際的值爲234234234
Android = 1234_1234 #android實際的值爲12341234
#Python的整形支持None值(空值)
a = None
print(a)
2.3.2 浮點型
浮點型數值用於保存帶小數點的數值,Python的浮點數有兩種表示形式:
- 十進制形式:
- 科學計數形式:只有浮點型數值纔可以使用科學計數形式表示。
Python不允許除以0(不管是整形值還是浮點型數值)。
例如:
af1 = 5.2356556
#輸出af1的值
print("af1的值爲:",af1)
af2 = 25.2345
print("af2的值爲:",af2)
f1 = 5.12e2
print("f1的值爲:",f1)
f2 = 5e3 #5×10的三次方
print("f2的值爲:",f2)
print("f2的類型爲:",type(f2)) #看到類型爲float
2.3.3 複數
複數的虛部用j或J來表示。不過需要導入cmath模塊(c代表complex),該模塊中包含了各種支持複數運算的函數。
例如:
ac1 = 3 + 0.2j
print(ac1)
print(type(ac1)) #輸出複數類型
ac2 = 4 - 0.1j
print(ac2)
#複數運行
print(ac1 + ac2) 輸出(7+0.1j)
#導入cmath模塊
import cmath
#sqrt()是cmath模塊下的函數,用於計算平方根
ac3 = cmath.sqrt(-1)
print(ac3) #輸出1j
2.4 字符串入門
Python3.x對中文支持較好,但Python2.x則要求在源程序中增加“#coding:utf-8”才能支持中文字符。
2.4.1 字符串和轉義字符
Python中的字符串要用單引號或者雙引號括起來,如果字符串內容本身包含了單引號或雙引號,就需要進行特殊處理。
- 使用不同的引號將字符串括起來;
- 對引號進行轉義。
str1 = 'Charlie'
str2 = "瘋狂軟件教育"
print(str1)
print(str2)
str3 = "I'm a coder"
str4 = '"Spring is here,let us jam!",said woodchuck.'
str5 = '"We are scared,Let\'s hide in the shade",says the bird'
print(str3)
print(str4)
print(str5)
2.4.2 拼接字符串
簡單使用還是上代碼吧!
s1 = "Hello," 'Charlie'
print(s1)
#將會輸出:Hello,Charlie
s2 = "Python"
s3 = "is Funny"
#使用+拼接字符串
s4 = s2 + s3
print(s4)
2.4.3 repr和字符串
使用str()和repr()函數可以將數值型轉換成字符串。
repr()函數的作用是會以Python表達式的形式來表示值。
例如:
s1 = "這本書的價格是:"
p = 99.8
#字符串直接拼接數值,程序報錯
#使用str()將數值轉換成字符串
print(s1 + str(p))
#使用repr()將數值轉換成字符串
print(s1 + repr(p))
st = "I will play my fife"
print(st)
print(repr(st))
#將會輸出以下內容:
#I will play my fife
#"I will play my fife"
2.4.4 使用input和raw_input獲取用戶輸入
input()函數(Python3.x):用於向用戶生成一條提示,然後獲取用戶輸入的內容,總是返回一個字符串。
raw_input函數(Python2.x中的函數等同於Python3.x中的input函數)
2.4.5 長字符串
Python使用三個引號括起來的長字符串完全可以賦值給變量,還允許使用轉義字符(\)把一行字符串寫成兩行。
s = '''"Let's go fishing",said Mary.
"OK,Let's go", said her brother.
they walked to a lake'''
print(s)
s2 = 'The quick brown fox \
jumps over the lazy dog'
print(s2)
2.4.6 原始字符串
原始字符串以“r”開頭,原始字符串不會把反斜線當成特殊字符。
s1 = r' G:\publishi\02\2.4'
print(s1)
#原始字符串包含的引號,同樣需要轉義
s2 = r'"Let\'s go",said Charlie'
print(s2)
s3 = r'Good Morning' '\\'
print(s2)
2.4.7 字節串(bytes):不可變序列
——字節串(bytes)由多個字節組成,以字節爲單位進行操作。
——字符串(str)由多個字符組成,以字符爲單位進行操作。
二者的區別與聯繫:
兩者除操作的數據單元不同之外,它們支持所有方法基本相同。
字節串(bytes)對象只負責以字節(二進制格式)序列來記錄數據。
二者可以互相轉換。
字符串轉換成bytes對象的三種方式:
- 以ASCⅡ字符爲內容,可以在字符串之前加b來構建字節串;
- 調用bytes()函數(其實是bytes的構造方法)將字符串按指定字符集轉換成字節串,如果不指定字符集,默認使用UTF-8字符集。
- 調用字符串本身的encode()方法將字符串按指定字符集轉換成字節串,如果不指定字符集,默認使用UTF-8字符集。
例如:
#創建一個空的bytes
b1=bytes()
#創建一個空的bytes值
b2=b''
#通過b前綴指定hello是bytes類型的值
b3=b'hello'
print(b3)
print(b3[0])
print(b3[2:4])
#調用bytes方法將字符串轉換成bytes對象
b4=bytes('我愛Python編程',encoding='utf-8')
print(b4)
#利用字符串的encode()方法編碼成bytes,默認使用UTF-8字符集
b5="學習Python很有趣".encode('utf-8')
print(b5)
#利用decode()方法將bytes對象解碼成字符串,默認使用UTF-8進行解碼
st=b5.decode('utf-8')
print(st) #學習Python很有趣
print(b4.decode('utf-8'))
2.5 深入使用字符串
2.5.1 轉義字符
轉義字符 | 說明 |
\b | 退格符 |
\n | 換行符 |
\r | 回車符 |
\t | 製表符 |
\" | 雙引號 |
\' | 單引號 |
\\ | 反斜線 |
例如:
s1 = 'Hello\nCharlie\nGood\nMorning'
print(s1)
s2 = '商品名\t\t單價\t\t數量\t\t總價'
s3 = '瘋狂Python講義\t108\t\t2\t\t216'
print(s2)
print(s3)
2.5.2 字符串格式化
Python提供“%”對各種類型的數據進行格式化輸出。
轉換說明符 | 說明 |
d,i | 轉換爲帶符號的十進制形式的整數 |
o | 轉換爲帶符號的八進制形式的整數 |
x | 轉換爲帶符號的十六進制形式的整數 |
X | 轉換爲帶符號的十六進制形式的整數 |
e | 轉換爲科學計數法表示的浮點數(e小寫) |
E | 轉換爲科學計數法表示的浮點數(E大寫) |
f,F | 轉換爲十進制形式的浮點數 |
g | 智能選擇使用f或e格式 |
G | 智能選擇使用F或E格式 |
C | 轉換爲單字符(只接受整數或單字符字符串) |
r | 使用repr()將變量或表達式轉換爲字符串 |
s | 使用str()將變量或表達式換轉爲字符串 |
例如:
#*****************************
#***程序名稱:format_test.py
#***程序功能:格式化字符串和佔位符的用法以及轉換說明符的用法。
#***編寫日期:2019-2-11
#*****************************
user = "Charli"
age = 8
#格式化字符串中兩個佔位符,第三部分也應該提供兩個變量
#轉換說明符(%)的用法:
print("%s is a %s years old boy" % (user , age))
num = -28
#使用轉換說明符指定轉換後的最小寬度
print("num is :%6i" % num)
print("num is :%6d" % num)
print("num is :%6o" % num)
print("num is :%6x" % num)
print("num is :%6X" % num)
print("num is :%6s" % num)
#Python允許在最小寬度之前添加一個標誌:-、+、0
#最小寬度爲0,左邊補0
num2 = 30
print("num2 is :%06d" % num2)
#最小寬度爲6,左邊補0,總是帶上符號
print("num2 is :%+06d" % num2)
#最小寬度爲6,左對齊
print("num2 is :%-6d" % num2)
#精度值
my_value = 3.001415926535
#最小寬度爲8,小數點後保留3位
print("my_value is: %8.3f" % my_value)
#最小寬度爲8,小數點後保留3位,左邊補0
print("my_value is: %08.3f" % my_value)
#最小寬度爲8,小數點後保留3位,左邊補0,始終帶符號
print("my_value is: %+08.3f" % my_value)
the_name = "Charlie"
#只保留3個字符,將輸出Cha
print("the name is: %.3s" % the_name)
#只保留2個字符,最小寬度爲10
print("the name is: %10.2s" % the_name)
2.5.3 序列相關的方法
Python字符串直接在方括號([])中使用索引即可獲取對應的字符,字符串中第一個字符的索引爲0、第二個字符的索引爲1,後面各字符以此類推。或者從後往前反向計算。
例如:
#*****************************
#***程序名稱:chars_test.py
#***程序功能:示範根據索引獲取字符串中的字符。
#***編寫日期:2019-2-11
#*****************************
s = 'crazyit.org is very good'
#獲取s中的索引2的字符
print(s[2]) #輸出a
#獲取s中從右邊開始,索引4的字符
print(s[-4]) #輸出g
#獲取s中從索引3到索引5的(不包含)的子串
print(s[3:5]) #輸出zy
#獲取s中從索引3到倒數第5個字符的子串
print(s[3:-5]) #輸出zyit.org is very
#獲取s中從倒數第6個字符到倒數第3個字符的子串
print(s[-6:-3]) #輸出y g
#判斷s是否包含'very'子串
print('very' in s)
print('fkit' in s)
#輸出s的長度
print(len(s)) #24
#輸出'test'的長度
print(len('test')) #4
#輸出s字符串中的最大字符
print(max(s)) #z
#輸出s字符串中的最小字符
print(min(s)) #空格
2.5.4 大小寫相關方法
Python字符串由內建的str類代表,在str類中與大小寫相關的常用方法如下:
- title():將每個單詞的首字母改爲大寫。
- lower():將整個字符串改爲小寫。
- upper():將整個字符串改爲大寫。
例如:
#*****************************
#***程序名稱:case_test.py
#***程序功能:示範了str與大小寫相關的常用方法。
#***編寫日期:2019-2-11
#*****************************
a = 'our domain is crazyit.org'
#每個單詞的首字母大寫
print(a.title())
#每個字母小寫
print(a.lower())
#每個字母大寫
print(a.upper())
在此處需要掌握兩個幫助函數:
- dir():列出指定類或模塊包含的全部內容(包括函數、方法、類、變量等)
- help():查看某個函數或方法的幫助文檔。
例如:
>>>dir(dir)
顯示如下內容:
其中以“_”開頭、“_”結尾的方法被約定成私有方法,不希望被外部直接調用。
如果希望查看某個方法的用法,則可以使用help()函數。例如:
2.5.5 刪除空白
str還提供瞭如下常用方法刪除空白。
- strip():刪除字符串前後的空白。
- lstrip():刪除字符串前後(左邊)的空白。
- rstrip():刪除字符串後面(右邊)的空白。
注:Python的str是不可變的(即字符串一旦形成,它所包含的字符串序列就不能發生任何改變),因此這三個方法只是返回字符串前面或後面空白被刪除之後的副本,並沒有真正改變字符串本身。
#*****************************
#***程序名稱:strip_test.py
#***程序功能:刪除空白。
#***編寫日期:2019-2-11
#*****************************
s = ' this is a puppy '
#刪除左邊的空白
print(s.lstrip())
#刪除右邊的空白
print(s.rstrip())
#刪除兩邊的空白
print(s.strip())
#再次輸出s,將會看到s並沒有改變
print(s)
#刪除字符串前後指定字符的功能
s2 = 'i think it is a scarecrow'
#刪除左邊的i、t、o、w字符
print(s2.lstrip('itow'))
#刪除右邊的i、t、o、w字符
print(s2.rstrip('itow'))
#刪除兩邊的i、t、o、w字符
print(s2.strip('itow'))
2.5.6 查找、替換相關方法
str提供瞭如下常用的執行查找、替換等操作的方法:
- startswith():判斷字符串是否以指定子串開頭。
- endswith():判斷字符串是否以指定子串結尾。
- find():查找指定子串在字符串中出現的位置,如果沒有找到指定子串,則返回-1。
- index():查找指定子串在字符串中出現的位置,如果沒有找到指定子串,則引發ValueError錯誤。
- replace():使用指定子串替換字符串中的目標子串。
- translate():使用指定的翻譯映射表對字符串執行替換。
例如:
#*****************************
#***程序名稱:search_test.py
#***程序功能:查找、替換相關方法
#***編寫日期:2019-2-11
#*****************************
s = 'crazyit.org is a good site'
#判斷s是否以crazyit開頭
print(s.startswith('crazyit'))
#判斷s是否以site結尾
print(s.endswith('site'))
#查找s中'org'出現的位置
print(s.find('org'))
#查找s中'org'出現的位置
print(s.index('org'))
#從索引9處開始查找'org'出現的位置
print(s.find('org',9)) #-1
#從索引9處開始查找'org'出現的位置
#print(s.index('org',9)) #引發錯誤
#將字符串中所有it替換成XXXX
print(s.replace('it','XXXX'))
#將字符串中1個it替換成XXXX
print(s.replace('it','XXXX',1))
#定義翻譯映射表:97(a)->945(α),98(b)->946(β),116(t)->964(τ)
table = {97:945,98:946,116:964}
print(s.translate(table))
此外,Python爲str提供了一個maketrans()方法,通過該方法可以非常方便地創建翻譯映射表。
2.5.7 分割、連接方法
- split():將字符串按指定分隔符分割成多個短語。
- join():將多個短語連接成字符串。
具體用法如下:
#*****************************
#***程序名稱:split_test.py
#***程序功能:分割、連接方法
#***編寫日期:2019-2-11
#*****************************
s = 'crazyit.org is a good site'
#使用空白對字符串進行分割
print(s.split()) #輸出['crazyit.org','is','a','good','site']
#使用空白對字符串進行分割,最多隻分割前兩個單詞
print(s.split(None,2)) #輸出['crazyit.org','is','a good site']
#使用點進行分割
print(s.split('.')) #輸出['crazyit','org is a good site']
mylist = s.split()
#使用'/'作爲分隔符,將mylist連接成字符串
print('/'.join(mylist)) #輸出crazyit.org/is/a/good/site
#使用','作爲分隔符,將mylist連接成字符串
print(','.join(mylist)) #輸出crazyit.org,is,a,good,site
可以看出split()和join()兩個函數互爲逆操作。
2.6 運算符
Python語言用於將一個或多個操作數連接成可執行語句,用來實現特定功能。
2.6.1 賦值運算符(“=”)
貼上代碼說明問題:
#*****************************
#***程序名稱:assign_operator_test.py
#***程序功能:賦值運算符
#***編寫日期:2019-2-12
#*****************************
#爲變量st賦值爲Python
st = "Python"
#爲變量pi賦值爲3.14
pi = 3.14
#爲變量visited賦值爲True
visited = True
#將st的值賦給st2
st2 = st
print(st2)
d1 = 12.34
#將表達式的值賦給d2
d2=d1+5
#輸出d2的值
print("d2的值爲:%g"%d2)
2.6.2 算術運算符(加、減、乘、除、求餘、求負、乘方)
繼續上代碼:
#*****************************
#***程序名稱:arithmetic_test.py
#***程序功能:算術運算符的使用
#***編寫日期:2019-2-12
#*****************************
a=5.2
b=3.1
the_sum=a+b
#sum的值爲8.3
print("the_sum的值爲:",the_sum)
s1='Hello,'
s2='Charlie'
#使用+連接兩個字符串
print(s1+s2)
#減法'-'運算符的使用
c=5.2
d=3.1
sub=c-d
#sub的值爲2.1
print("sub的值爲:",sub)
#定義變量x,其值爲-5.0
x=-5.0
#對x求負,其值變成5.0
x=-x
print(x)
#定義變量y,其值爲-5.0
y=-5.0
#y值依然是-5.0
y=+y
print(y)
e=5.2
f=3.1
multiply=e*f
#mutiply的值爲16.12
print("mutiply的值爲:",multiply)
s3='crazyit '
#使用*將5個字符串連接起來
print(s3*5)
print("19/4的結果是:",19/4) #普通除法
print("19//4的結果是:",19//4) #整除除法
aa=5.2
bb=3.1
print("aa/bb的值是:",aa/bb)
print("aa//bb的值是:",aa//bb)
print("5%3的值爲:",5%3) #輸出2
print("5.2%3.1的值爲:",5.2%3.1) #輸出2.1
print("-5.2%-3.1的值爲:",-5.2%-3.1) #輸出-2.1
print("5.2%-2.9的值爲:",5.2%-2.9) #輸出-0.6
print("5.2%-1.5的值爲:",5.2%-1.5) #輸出-0.8
print("-5.2%-1.5的值爲:",-5.2%1.5) #輸出0.8
#print("5對0.0求餘的結果是:",5%0.0) #導致錯誤
#乘方運算符
print('5的2次方:',5**2)
print('4的3次方:',4**3)
print('4的開平方:',4**0.5)
print('27的開3次方:',27**(1/3))
2.6.3 位運算符(&按位與、|按位或、^按位與或、~按位取反、<<左移、>>右移)6個
第一個操作符 | 第二個操作符 | 按位與(&) | 按位或(|) | 按位異或(^) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
注意:在進行位移運算時,左移n位就相當於乘以2的n次方,右移n位則相當於除以2的n次方(如果不能整除,實際返回的結果是小於除得結果數值的最大整數的)。不僅如此,進行位移運算只是得到了一個新的運算結果,而原來的操作數本身是不會改變的。
2.6.4 擴展後的賦值運算符
- +=:x+=y ——>x=x+y
- +=:x-=y ——>x=x-y
- *=:x*=y ——>x=x*y
- /=:x/=y ——>x=x/y
- //=:x//=y ——>x=x//y (整除)
- %=:x%=y——>x=x%y (求餘)
- **=:x**=y ——>x=x**y (乘方)
- &=:x&=y ——>x=x&y (按位與)
- |=:x|=y ——>x=x|y (按位或)
- ^=:x^=y ——>x=x^y (按位異或)
- <<=:x<<=y ——>x=x<<y
- >>=:x>>=y ——>x=x>>y
2.6.5 索引運算符(就是方括號[ ])
a = 'abcdefghijklmn'
# 獲取索引2到索引8的子串,步長爲3
print(a[2:8:3]) # 輸出cf
# 獲取索引2到索引8的子串,步長爲2
print(a[2:8:2]) # 輸出ceg
2.6.6 比較運算符與bool類型
Python提供bool類型表示真(True)假(False)。
Python支持的運算符如下:
> | 大於 |
>= | 大於等於 |
< | 小於 |
<= | 小於等於 |
== | 等於 |
!= | 不等於 |
is | 判斷兩個變量所引用的對象是否相同,如果相同則返回True。 |
is not | 判斷兩個變量所引用的對象是否不相同,如果不相同則返回True。 |
此外,Python還提供了了一個id()函數,判斷變量所引用的對象的內存地址。
來看代碼:
import time
# 輸出True
print("5是否大於 4:", 5 > 4)
# 輸出False
print("3的4次方是否大於等於90.0:", 3 ** 4 >= 90)
# 輸出True
print("20是否大於等於20.0:", 20 >= 20.0)
# 輸出True
print("5和5.0是否相等:", 5 == 5.0)
# 輸出False
print("True和False是否相等:", True == False)
# 輸出True
print("1和True是否相等:", 1 == True)
# 輸出True
print("0和False是否相等:", 0 == False)
print(True + False) # 輸出1
print(False - True) # 輸出-1
#獲取當前時間
a = time.gmtime()
b = time.gmtime()
print(a == b) #a和b兩個時間相等,輸出True
print(a is b) #a和b不是一個對象,輸出False
#使用id()函數判斷變量a、b
print(id(a))
print(id(b))
2.6.7 邏輯運算符
邏輯運算符用於操作bool類型變量、常量或表達式,邏輯運算的返回值也是bool值。
一共三個邏輯運算符:
- and:與
- or:或
- not:非
例如:
# 直接對False求非運算,將返回True
print(not False)
# 5>3返回True,20.0大於10,因此結果返回True
print(5 > 3 and 20.0 > 10)
# 4>=5返回False,"c">"a"返回True。求或後返回True
print(4 >= 5 or "c" > "a")
又例如:
#bookName = "瘋狂Python"
#price = 79
#version = "正式版"
#if bookName.endswith('Python') and price < 50 or version == "正式版" :
# print("打算購買這本Python圖書")
#else:
# print("不購買!")
bookName = "瘋狂Python"
price = 79
version = "正式版"
if bookName.endswith('Python') and (price < 50 or version == "正式版") :
print("打算購買這本Python圖書")
else:
print("不購買!")
建議:組合邏輯中,使用圓括號()來提高程序的可讀性。
2.6.8 三目運算符(if語句)
語法:
True_statements if expression else False_statements
規則:先對邏輯表達式expression求值,如果邏輯表達式返回True,則執行並返回True_statements的值;如果邏輯表達式返回False,則執行並返回False_statements的值。
例如:
a = 5
b = 3
st = "a大於b" if a > b else "a不大於b"
# 輸出"a大於b"
print(st)
# 輸出"a大於b"
print("a大於b") if a > b else print("a不大於b")
# 第一個返回值部分使用兩條語句,逗號隔開
st = print("crazyit"), 'a大於b' if a > b else "a不大於b"
print(st)
# 第一個返回值部分使用兩條語句,分號隔開
st = print("crazyit"); x = 20 if a > b else "a不大於b"
print(st)
print(x)
c = 5
d = 5
# 下面將輸出c等於d
print("c大於d") if c > d else (print("c小於d") if c < d else print("c等於d"))
2.6.9 in運算符——用於判斷某個成員是否位於序列中
(1)判斷字符串是否包含特定子串;
(2)判斷序列是否包含子序列。
例如:
s = 'crazyit.org'
print('it' in s) # True
print('it' not in s) # False
print('fkit' in s) # False
print('fkit' not in s) # True
2.6.10 運算符的結合性和優先級(表達式運算中的運算順序)
- Python大部分運算符從左到右結合(單目運算符、賦值運算符、三目運算符除外);
- 乘法和除法左右兩邊操作數可以互換位置;