瘋狂Python講義學習筆記(含習題)之——變量和簡單類型

Python是一門弱類型語言,弱類型包含兩方面的含義:①所有的變量無須聲明即可使用;②變量的數據類型可以隨時改變。

一、註釋

註釋的作用是用來解釋程序某些部分的作用和功能,提高程序的可讀性。

Python源代碼的註釋有兩種形式:

● 單行註釋:使用(#)表示單行註釋的開始,#號後面直到這行結束爲止的代碼都將被解釋器忽略

● 多行註釋:使用三個單引號或三個雙引號將註釋內容括起來。

註釋本身對程序並沒有任何影響,主要作用是給“別人看”,Python解釋器會忽略這些註釋內容。

 

二、變量

變量就像一個個小容器,用於“盛裝”程序中的數據。

常量與變量的區別:常量一旦保存某個數據之後,該數據就不能發生改變;變量保存的數據可以多次發生改變,主要程序對變量重新賦值。

(=)賦值運算符,將值賦給變量。

查看變量類型可以使用type()函數

# 定義一個數值類型變量
a = 5
print(a)
# 重新將字符串賦值給a變量
a = 'Hello, Joe'
print(a)
print(type(a))

運行結果

5
Hello, Joe
<class 'str'>

print()函數詳細語法格式:

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

value參數可以接受任意多個變量或值

user_name = 'Joe'
user_age = 40
# 同時輸出多個變量和字符串
print("用戶名:", user_name, "年齡:", user_age)

輸出結果:

用戶名: Joe 年齡: 40

默認情況下,Python使用空格隔開多個變量,如果希望改變默認的分隔符,可以通過指定sep參數進行設置。

print("用戶名:", user_name, "年齡:", user_age, sep="|")

輸出結果:

用戶名:|Joe|年齡:|40

默認情況下,print()函數的end參數默認值爲'\n'因此,print()函數輸出之後總會換行,要改變這兒默認行爲,可以重設end參數,如:

print(40, '\t', end="")
print(50, '\t', end="")
print(60, '\t', end="")

輸出結果:

40      50      60

print()函數的file參數默認值sys.stdout,代表了希望標準輸出,一般情況下是屏幕,也可以更改該值讓程序將結果輸出到文件。如:

f = open("poem.txt", "w")    # 打開文件以便寫入
print('兩情若是久長時', file=f)
print('又豈在朝朝暮暮', file=f)
f.close()

print()函數的flush參數用於控制輸出緩存,該參數一般保持False即可,這樣可以獲得較好的性能。

Python語言的標識符必須以字母、下劃線(_)開頭,後面可以跟任意數目的字母、數字、和下劃線(_)。此處的字母並不侷限於26個英文字母,可以包含中文字符、日文字符等。

Python2.x對中文支持較差,如果要在Python2.x程序中使用中文字符或中文變量,則需要在python源程序的第一行增加"# coding:utf-8",然後將源文件保存爲UTF-8字符集。

Python語言區分大小寫,因此abc和Abc是兩個不同的標識符。

標識符規則:

● 標識符可以由字母、數字、下劃線(_)組成,其中數字不能打頭。

● 標識符不能是Python關鍵字,但可以包含關鍵字。

● 標識符不能包含空格。

表2.1 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    

實際上並不需要記憶關鍵字列表,開發時可以隨時通過程序來查看Python所包含的關鍵字,如下所示:

# 導入keyword模塊
import keyword
# 顯示所有關鍵字
print(keyword.kwlist)

輸出結果:

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', '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']

表2.2 Python內置函數

abs() all() any() basestring() bin()
bool() bytearray() 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        

以上內置函數的名字也不應該作爲標識符,否則python的內置函數會被覆蓋。

 

三、數值類型

1.整型

Python的整型支持None值(空值)

Python的整型數值有4種表示形式。

● 十進制形式:最普通的整數就是十進制形式的整數。

● 二進制形式:以0b或者0B開頭的整數就是二進制形式的整數。

● 八進制形式:以0o或者0O開頭的整數就是八進制形式的整數

● 十六進制形式:以0x或者0X開頭的整數就是十六進制形式的整數,其中10~15分別以a~f來表示

爲了提高數值(包括浮點型)的可讀性,Python3.x允許爲數值(包括浮點型)增加下劃線作爲分隔符。這些下劃線不會影響數值本身。

# 在數值中使用下劃線
one_million = 1_000_000
print(one_million)
prince = 234_234_234  # price實際的值爲234234234
android = 1234_1234   # android實際的值爲12341234

2. 浮點型

Python浮點數有兩種表示形式:

● 十進制形式:這種形式就是平常簡單的浮點數,例如:5.12、512.0、0.512 。浮點數必須包含一個小數點,否則會被當成整數處理。

● 科學計數形式:如:5.12e2(5.12 × 102)、5.12E2

3. 複數

Python可以支持複數,複數的虛部用j或J來表示。

Python的cmath模塊支持複數運算。

 

四、 字符串入門

字符串的意思就是“一串字符”

字符串既可以用單引號括起來,也可以用雙引號括起來。

Python允許使用反斜線(\)將字符串中的特殊字符進行轉義。

將數值轉換成字符串,可以使用str()或repr()函數。

input()函數用於向用戶生成一條提示,然後獲取用戶輸入的內容,而input()函數總是返回一個字符串。

Python2中使用raw_input()函數實現同樣的功能。

Python不是格式自由的語言,因此Python程序的換行、縮進都有其規定的語法。

原始字符串以“r”開頭,原始字符串不會把反斜線當成特殊字符。

如果原始字符串包含引號,程序同樣需要對引號進行轉義(否則Python同樣無法對字符串的引號精確配對),但此時用於轉義的反斜線會變成字符串的一部分。如:

>>> # 原始字符串包含的引號,同樣需要轉義
>>> s2 = r'"Let\'s go", said Charlie'
>>> print(s2)
"Let\'s go", said Charlie

Python3新增了tytes類型,用於代表字節串。字符串(str)由多哦字符組成,以字符爲單位進行操作;字節串(bytes)由多個字節組成,以字節爲單位進行操作。

bytes對象只負責以字節(二進制格式)序列來記錄數據。採用合適的字符集,字符串可以轉換爲字節串,字節串也可以恢復成對應的字符串。

由於bytes保存的就是原始的字節(二進制格式)數據,因此byes對象可用於在網絡上傳輸數據,也可用於存儲各種二進制格式的文件,比如圖片、音樂等文件。

將一個字符串轉換成bytes對象,有三種方式:

● 如果字符串內容都是ASCII字符,則可以通過直接在字符串之前添加b來構建字節串值。

● 調用bytes()函數(其實是bytes的構造方法)將字符串按指定字符集轉成字節串,默認使用UTF-8字符集。

● 調用字符串本身的encode()方法將字符串按指定字符集轉換成字節串,默認使用UTF-8字符集。

計算機底層有兩個基本概念:位(bit)和字節(byte),其中bit代表1位,要麼是0,要麼是1,byte代表1字節,1字節包含8位。

在字節串中每個數據單元都是字節,也就是8位,其中每4位(相當於4位二進制數,最小值爲0,最大值爲15)可以用一個十六進制數來表示,因此每字節需要兩個十六進制數表示。

可以調用bytes對象的decode()方法將其解碼成字符串。

 

表2.3 Python支持的轉義字符

轉義字符 說明
\b 退格符
\n 換行符
\r 回車符
\t 製表符
\" 雙引號
\' 單引號
\\ 反斜槓

 

Python提供了“%”對各種類型的數據進行格式化輸出:

price = 108
print("the book's price is %s" % price)

格式化字符串中的“%s”被成爲轉換說明符,作用相當於一個佔位符。

表2.4 轉換說明符

轉換說明符 說明
d,i 轉換爲帶符號的十進制形式的整數
o 轉換爲帶符號的八進制形式的整數
x 轉換爲帶符號的十六進制形式的整數
X 轉換爲帶符號的十六進制形式的整數
e 轉換爲科學計數法表示的浮點數(e小寫)
E 轉換爲科學計數法表示的浮點數(E大寫)
f, F 轉換爲十進制形式的浮點數
g 智能選擇使用f或者e格式
G 智能選擇使用F或者E格式
r 使用repr()將變量或表達式轉換爲字符串
s 使用str()將變量或表達式轉換爲字符串

可以爲轉換說明符指定最小寬度:

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)

輸出結果:

num is:    -28
num is:    -28
num is:    -34
num is:    -1c
num is:    -1C
num is:    -28

默認情況下,轉換出來的字符串總是右對齊的,不夠寬度時左邊補充空格。可以在最小寬度之前添加一個標誌來改變這種行爲,python支持如下標誌:

● -:指定左對齊

● +:表示數值總要帶着符號(正數帶“+”,負數帶“-”)

● 0:表示不補充空格,而是補充0

對於浮點數,Python還允許指定小數點後的數字位數,對於字符串,Python允許指定轉換後字符串的最大字符數,這個該精度值被放在最小寬度之後:

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個字符
print("the name is: %.3s" % the_name)
# 只保留2個字符,最小寬度爲10
print("the name is: %10.2s" % the_name)

輸出結果:

my_value is:    3.001
my_value is: 0003.001
my_value is: +003.001
the name is: Cha
the name is:         Ch

Python是“自帶文檔”的,使用dir()函數列出指定類或模塊包含的全部內容(包括函數、方法、類、變量等),如:

>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

使用help()函數查看某個函數或方法的幫助文檔:

>>> help(str.title)
Help on method_descriptor:
​
title(self, /)
    Return a version of the string where each word is titlecased.

    More specifically, words start with uppercased characters and all remaining
    cased characters have lower case.

str類中大小寫先關常用方法:

● title():將每個單詞的首字母改爲大寫

● lower():將整個字符串改爲小寫

● upper():將整個字符串改爲大寫

str類中刪除空白的方法:

● strip():刪除字符串前後的空白

● lstrip():刪除字符串前面(左邊)的空白

● rstrip():刪除字符串侯建(右邊)的空白

str類中查找、替換相關方法

● startswith():判斷字符串是否以指定子串開頭

● endswith():判斷字符串是否以指定子串結尾

● find():查找指定子串在字符串中出現的位置,如果沒有找到則返回-1

● index():查找指定子串在字符串中出現的位置,如果沒有找到引發ValueError異常。

● replace():使用指定子串替換字符串中的目標子串

● translate():使用指定的翻譯映射表對字符串執行替換

Python爲str提供了maketrans()方法,可以方便的創建翻譯映射表:

>>> table = str.maketrans('abt', 'αβτ')
>>> table
{97: 945, 98: 946, 116: 964}

Python2.x中str類沒有maketrans()方法,需要導入string模塊,然後調用maketrans()函數。

str類中的分割、連接方法

● split():將字符串按指定分割符分割成多個短語

● join():將多個短語連接成字符串

 

五、運算符

運算符是一種特殊的符號,用來表示數據的運算、賦值和比較等。可分爲以下幾種:

● 賦值運算符

● 算術運算符

● 位運算符

● 索引運算符

● 比較運算符

● 邏輯運算符

1. 賦值運算符

Python使用“=”作爲賦值運算符

2. 算術運算符

+、-、*、/、//、%

3. 位運算符

&、|、^、~、<<、>>

表2.5 位運算符的運算法則

第一個操作數 第二個操作數 按位與 按位或 按位異或
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

補碼計算規則:整數的補碼和原碼相同,負數的補碼是其反碼加1

4. 擴展後的賦值運算符

+=、-=、*=、/=、//=、%=、**=、&=、|=、^=、<<=、>>=

5. 索引運算符

索引運算符就是方括號[],可以使用單個索引值也可以使用範圍以及步長。

6. 比較運算符與bool類型

Python的bool類型只有兩個值True和False

>、>=、<、<=、==、!=、is、is not

7. 邏輯運算符

and、or、not

8. 三目運算符

True_statements if expression else False_statements

運算規則:先對邏輯表達式expression求值,如果值爲True,則執行並返回True_statements,否則執行並返回False_statement的值。

Python允許在三目運算符的True_statements或False_statements中放置多條語句,有兩種方式:

● 以英文逗號分隔:每條語句都會執行,程序返回多條語句的返回值組成的元組

● 以英文分號分隔:每條語句都會執行,程序只返回第一條語句的返回值

a = 5
b = 3
# 以逗號分隔
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)

輸出結果:

crazyit
(None, 'a大於b')
crazyit
None
20

9. in運算符

用於判斷某個成員是否位於序列中。

10. 運算符的結合性和優先級

不要把一個表達式寫得過於複雜,可以分幾步來完成一個複雜的表達式

不要過多的依賴運算符的優先級來控制表達式的執行順序,儘量使用“()”來控制表達式的執行順序。

 

練習題:

1. 使用數值類型聲明多個變量,並使用不同方式爲不同的數值類型的變量賦值。熟悉每種數據類型的賦值規則和表示方式。

int_value = 10
bin_value = 0b12
oct_value = 0o23
hex_value = 0xff
float_value = 10.23
e_value = 3.14e2
plural_value = 10 + 4.3j

2 . 使用數學運算符、邏輯運算符編寫40 個表達式,先自行計算各表達式的值,然後通過程序輸出這些表達式的值進行對比,看看能否做到一切盡在掌握中。

a = 3
b = 5
c = 'hello'
d = 'world'
e = 0.2
f = 0.4
g = True
h = False
​
result = a + b  # 8
print(result)
result = a - b   # -2
print(result)
result = a * b   # 15
print(result)
result = a / b   # 0.6
print(result)
result = a // b   # 0
print(result)
result = a % b    # 2
print(result)
result = a ** b   # 243
print(result)
result = c + d    # helloworld
print(result)
result = g and h   # False
print(result)
result = g or h    # True
print(result)
result = not g     # False
print(result)
result = e + f     # 0.6
print(result)
result = e - f     # -0.2
print(result)
result = e * f     # 0.08
print(result)
result = e / f     # 0.5
print(result)
result = e // f    # 0.0
print(result)
result = e ** f    # 0.5
print(result)
result = e % f     # 0.2
print(result)

3. 從標準輸入讀取兩個整數並打印兩行,其中第一行輸出兩個整數的整除結果;第二行輸出兩個整數的帶小數的除法結果。不需要執行任何四捨五入或格式化操作。

num1 = input('請輸入第一個整數:')
num2 = input('請輸入第二個整數:')
value1 = int(num1) // int(num2)
value2 = int(num1) / int(num2)
print('第一個數整除第二個數的結果爲:', str(value1))
print('第一個數除以第二個數的結果爲:', str(value2))

4. 從標準輸入讀取兩個整數並打印三行,其中第一行包含兩個數的和;第二行包含兩個數的差(第一個數減第二個數):第三行包含兩個數的乘積結果。

num1 = int(input('請輸入一個整數:'))
num2 = int(input('請輸入另一個整數:'))
print('兩個數的和爲:', num1 + num2)
print('兩個數的差爲:', num1 - num2)
print('兩個數的積爲:', num1 * num2)

5. 用戶輸入一個字符串和一個子串,程序必須打印出給定子串在目標字符串中出現的次數。字符串遍歷將從左到右進行,而不是從右到左。例如給定‘ABCDCDC' 和'CDC',程序輸出“ 2 ”。

s1 = input('請輸入一個字符串:')
s2 = input('請輸入一個子串:')
s1_len = len(s1)
s2_len = len(s2)
count = 0
for i in range(s1_len - 1):
    if s1[i:i+s2_len] == s2:
        count += 1
print('子串在字符串中出現的次數:%d' % count)

6. 給定任意一個整數,打印出該整數的十進制、八進制、十六進制(大寫)、二進制形式的字符串。

num = 14
print('十進制形式爲:%d' % num)
print('二進制形式爲: %s' % bin(num))
print('八進制形式爲:%o' % num)
print('十六進制形式爲: %x' % num)
print('十六進制形式爲(大寫): %X' % num)

7. 通過學習我們知道str是不可變的,本程序要實現一個功能:用戶輸入一個字符串,修改該字符串中哪個位置的字符,程序就會輸出修改後的結果。比如用戶輸入:

’ fkjava. org ’

6 -

程序將會輸出: ’fkjava-org’ 。

s1 = input('請輸入一個字符串:')
index = int(input('請輸入一個位置:'))
s2 = input('請輸入替代字符:')
s_new = s1[:index] + s2 + s1[index+1:]
print(s_new)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章