《瘋狂Python講義》讀書筆記——第2章 變量和簡單類型

本章要點:

  • 單行註釋和多行註釋
  • Python是弱類型語言
  • Python變量的特徵
  • Python變量命名規則
  • Python關鍵字和內置函數
  • Python支持的各種數值類型
  • Python字符串入門
  • 拼接字符串的方法
  • repr和字符串
  • 使用input和raw_input獲取用戶輸入
  • 長字符串和原始字符串
  • 字符串格式化
  • 字符串的相關方法
  • Python的賦值運算符
  • Python的算術運算符
  • Python的位運算符
  • Python的擴展後的賦值運算符
  • Python的索引運算符
  • Python的比較運算符
  • Python的邏輯運算符
  • Python的三目運算符
  • Python的in運算符

目錄

2.1 單行註釋和多行註釋

2.2 變量

2.2.1 Python是弱類型語言

2.2.2 使用print函數輸出變量

2.2.3 變量的命名規則

2.2.4 Python的關鍵字和內置函數

2.3 數值類型

2.3.1 整形

2.3.2 浮點型

2.3.3 複數

2.4 字符串入門

2.4.1 字符串和轉義字符

2.4.2 拼接字符串

2.4.3 repr和字符串

2.4.4 使用input和raw_input獲取用戶輸入

2.4.5 長字符串

2.4.6 原始字符串

2.4.7 字節串(bytes):不可變序列

2.5 深入使用字符串

2.5.1 轉義字符

2.5.2 字符串格式化

2.5.3 序列相關的方法

2.5.4 大小寫相關方法

2.5.5 刪除空白

2.5.6 查找、替換相關方法

2.5.7 分割、連接方法

2.6 運算符

2.6.1 賦值運算符(“=”)

2.6.2 算術運算符(加、減、乘、除、求餘、求負、乘方)

2.6.3 位運算符(&按位與、|按位或、^按位與或、~按位取反、<<左移、>>右移)6個

2.6.4 擴展後的賦值運算符

2.6.5 索引運算符(就是方括號[ ])

2.6.6 比較運算符與bool類型

2.6.7 邏輯運算符

2.6.8 三目運算符(if語句)

2.6.9 in運算符——用於判斷某個成員是否位於序列中

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中的字符串要用單引號或者雙引號括起來,如果字符串內容本身包含了單引號或雙引號,就需要進行特殊處理。

  1. 使用不同的引號將字符串括起來;
  2. 對引號進行轉義。
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 轉義字符

Python支持的轉義字符
轉義字符 說明
\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 運算符的結合性和優先級(表達式運算中的運算順序)

  1. Python大部分運算符從左到右結合(單目運算符、賦值運算符、三目運算符除外);
  2. 乘法和除法左右兩邊操作數可以互換位置;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章