小甲魚Python筆記(上)


基於Python 3.4.3

一 二 三 四  基礎

print 三版必須加括號,二版不用加

alt + n :上一條語句

alt + p :下一條語句

打印三條hello

沒有大括號,用縮進來表示

BIF 內建函數

使用變量前要先對其賦值

字母可以使大小寫,但是大小寫是不同的

字符串可以用單引號或者是雙引號

原始字符串:在字符串前面加上r,就不用加轉義字符了

長字符串,多行,用三引號字符串

條件分支

if 條件:

  條件為真執行的操作

else:

  條件為假執行的操作

 

猜數字:

 1 print("這是一個猜數字游戲")
 2 import random
 3 secret = random.randint(1,10)
 4 temp = input("請輸入1-10數字:")
 5 guess = int(temp)
 6 while guess != secret:
 7     if secret > guess:
 8         temp = input("小了\n")
 9         guess = int(temp)
10     else:
11         temp = input("大了\n")
12         guess = int(temp)
13 print("恭喜答案正確")

 

五 變量類型

整型、浮點、e記法、布爾類型(布爾類型首字母大寫,True,False)

不要把str當作變量名,str()是個BIF

獲得關於類型的BIF type()

python更建議用isinstance()判斷類型,返回值是bool

 

六 操作符

+  -  *  % **  //

可以寫成 a = b = c = d = 10

冪運算的優先級比起左側操作符高,比右側操作符低

>>> -3 ** 2
-9

>>> 3 ** -2
0.1111111111111111

 

七 八 九 分支和循環

 1 score = int(input("請輸入一個分數:"))
 2 if 90 <= score <=100:
 3     print("A")
 4 elif 80 <= score <90:
 5     print("B")
 6 elif 70 <= score <80:
 7     print("C")
 8 elif 60 <= score <70:
 9     print("D")
10 else:
11     print("E")

 

三元操作符

語法: x if 條件 else y

eg:

x = 6
y = 5
small = x if x<y else y
print(small)

結果:

5

 for循環

1 s = "favourite"
2 for i in s:
3     print(i,end = " ")

 

列表

member = ["a","ab","abc","abcd","abcde","abcdefg"]
for i in member:
    print(i,len(i))

 

range()

range([strat,][stop][,step=1])

經常與for循環使用,這個BIF有三個參數,其中中括號括起來的的兩個表示這兩個參數是可選的。

step=1表示第三個參數的值默認值是1

range這個bif的作用是生成一個從start參數的值開始到stop結束的序列

break

 1 print("這是一個猜數字游戲")
 2 import random
 3 secret = random.randint(1,10)
 4 guess = int(input("請輸入1-10數字:"))
 5 while True:
 6     if guess == secret:
 7         break
 8     else:
 9         guess = int(input("輸入錯誤,請重新輸入"))
10 print("恭喜答案正確")

 

十 十一 十二  列表

查看列表方法:

 

列表可以是混合類型的

列表可以使空的

Noen是Python的一個內建值

.append()表尾追加一個值

.extend()在表尾追加一個列表

.insert(位置,元素)

.index(元素)  獲取元素位置

可以加上搜索范圍.index(元素,其實位置,終止位置)

.remove(元素)  刪除元素

del 序列[位置]

.pop(元素位置)  默認是最后一個

.count(元素)  計算元素個數

.reverse()  元素翻轉

.sort()  排序

改變原始列表

倒序可以:

 

列表分片

第一個索引是提取第一個元素的編號,而最后的索引則是分片之后剩余部分的第一個元素的編號

也就是第一個索引元素包含在分片之內,而第二個則不包含在分片之內

列表復制一定要用這種方法

列表能用的元算 +(兩個序列必須類型一致) *

成員資格 in

訪問列表中的列表,類似於二維數組

 

十三 元組

元組不可修改,是由括號和逗號定義的

修改元祖只能給其重新賦值:

 

十四  字符串方法

字符串和元組一樣都是都是不可改變的 

幾個常用的方法:

.find()

find方法可以在一個較長的字符串中查找子串。返回字串所在位置最左端的索引,如果沒有則返回-1。這個方法可以接收可選的起始點或結束點參數

 

.lower()

返回字符串的小寫字母版,主要用於編寫不區分大小寫的代碼

 

.split()

分割字符串成序列,如果不提供任何分割符,則把所有空格當作分隔符

 

.joint()

split的逆方法,分隔符.join(字符串)

 

.replace()

返回字符串的所有匹配項被替換后的字符串,.replace(“被替換”,“替換”)

 

.translate()

translate方法只處理單個字符,優勢在於可以同時進行多個字符替換,使用translate轉換之前,需要先完成一張轉換表

注意import的是string,但是用的時候是str

 

十五  字符串格式化

 .format() 位置輸出

% 格式化操作符

用#填充數字進制格式

控制字段寬度精度

 

總結:

 

十六  序列

列表、元組和字符串放在一塊兒來講解是有道理的,我們發現Ta們之間有很多共同點:

1. 都可以通過索引得到每一個元素

2. 默認索引值總是從0開始(當然靈活的Python還支持負數索引)

3. 可以通過分片的方法得到一個范圍內的元素的集合

4. 有很多共同的操作符(重復操作符、拼接操作符、成員關系操作符)

所以我們把他們叄統稱為:序列

 

序列常用的方法

list(iterable) 把一個可迭代對象轉換為列表

tuple([iterable]) 把一個可迭代對象轉換為元組

str(obj) 把obj對象轉換為字符串

len(sub) 返回sub的長度

max() 返回序列或者參數集合中的最大值

min() 返回序列或者參數集合中的最小值

sum(iterable[, start=0]) 返回序列iterable和可選參數start的總和

sorted(iterable, key=None, reverse=False) 返回一個排序的列表,使用方法跟列表的內建函數(list.sort())一致,注意,這個sorted()后邊有“ed”哦。


reversed(sequence) 返回逆向迭代序列的值,一樣道理,跟列表的內建函數(list.reverse())一致,注意,這個reversed()后邊也多了個“d”哦。


enumerate(iterable) 生成由每個元素的index值和item值組成的元組


zip(iter1 [,iter2 […]]) 返回由各個參數的序列組成的元組

 

 二十五 二十六  字典

字典是Python語言中唯一的映射類型。

映射類型對象里哈希值(鍵,key)和指向的對象(值,value)是一對多的的關系,通常被認為是可變的哈希表。

字典對象是可變的,它是一個容器類型,能存儲任意個數的Python對象,其中也可包括其他容器類型。

字典類型與序列類型的區別:

1.存取和訪問數據的方式不同。

2.序列類型只用數字類型的鍵(從序列的開始按數值順序索引);

3.映射類型可以用其他對象類型作鍵(如:數字、字符串、元祖,一般用字符串作鍵),和序列類型的鍵不同,映射類型的鍵直

4.接或間接地和存儲數據值相關聯。

5.映射類型中的數據是無序排列的。這和序列類型是不一樣的,序列類型是以數值序排列的。

6.映射類型用鍵直接“映射”到值。

 

字典的創建

特點:
1、鍵與值用冒號“:”分開;
2、項與項用逗號“,”分開;
3、字典中的鍵必須是唯一的,而值可以不唯一。

使用工廠函數dict()創建字典:

注意括號的個數,因為dict()只接受一個參數,所以用()把鍵值對包括

鍵值對的增加與刪除

 

字典的方法

1、adict.keys() 返回一個包含字典所有KEY的列表;

2、adict.values() 返回一個包含字典所有value的列表;

3、adict.items() 返回一個包含所有(鍵,值)元祖的列表;

4、adict.clear() 刪除字典中的所有項或元素;

5、adict.copy() 返回一個字典淺拷貝的副本;

直接賦值並沒有創建新的內存空間

6、adict.fromkeys(seq, val=None) 創建並返回一個新字典,以seq中的元素做該字典的鍵,val做該字典中所有鍵對應的初始值(默認為None);

初始化一個空字典:

注意,僅僅是返回一個新字典,並不能改變舊字典,要想改變必須用a = a.fromkeys

7、adict.get(key, default = None) 返回字典中key對應的值,若key不存在字典中,則返回default的值(default默認為None);

一般來說如果試圖訪問字典中不存在的項時會出錯,而用get就不會

8、  in 、 not in;

9、adict.iteritems()、adict.iterkeys()、adict.itervalues() 與它們對應的非迭代方法一樣,不同的是它們返回一個迭代子,而不是一個列表;

10、adict.pop(key[,default]) 和get方法相似。如果字典中存在key,刪除並返回key對應的vuale;如果key不存在,且沒有給出default的值,則引發keyerror異常;

11、adict.setdefault(key, default=None) 和set()方法相似,但如果字典中不存在Key鍵,由 adict[key] = default 為它賦值;

12、adict.update(bdict) 將字典bdict的鍵值對添加到字典adict中。

 

字典中的鍵,值,鍵值對用  .keys()  .values()  .items()表示 

 

二十七 集合

集合不會出現重復元素,用{}標記,set()函數將其他容器類型轉變為集合,有.add()和.remove()方法,當用frozenset()函數定義一個集合時,這個集合不可改變

 

函數

裴波那切的例子:

利用上列表的-1 -2來表示后兩個元素的方法很巧妙

1 def fibs(num):
2     a = [0,1]
3     for i in range(num-2):
4         a.append(a[-1] + a[-2])
5     return a
6 
7 num = int(input("How many Fibonacci nubmers do you want:"))
8 print(fibs(num))

 執行結果:

另一個方法 :

1 def fib(num):
2    n,a,b = 0,0,1
3    while(n < num):
4       print(b)
5       a,b = b,a+b
6       n += 1
7 num = int(input("How many Fibonacci nubmers do you want:"))
8 fib(num)

 

在函數里面修改全局變量的值需要加上globle,否則將在函數內創建另一個同名的局部變量

1 num = 3
2 def chcange_globle():
3     global num
4     num = 6
5 print(num)

注意是globle不是global(前者是名次,后者是形容詞)

 

關鍵字參數和默認參數

在函數調用過程中用參數名提供的參數是關鍵字參數

在函數定義過程中用參數名提供的參數是默認參數

1 def who_words(name = '王尼瑪',words = '來來來'):
2     print(name,words)
3 who_words()#使用默認參數
4 who_words('丁尼瑪')
5 who_words(words = '我草',name = '趙尼瑪')#使用關鍵字參數

 

收集函數

*params

1 def print_params(*params):
2     print("the num of params is :",len(params))
3     print("the third param is :",params[2])
4     print(params)
5 print_params('a','b','c','d','e')

若參數中還有其他參數需要用關鍵字參數指出,否則會被認成收集參數,導致程序出錯

1 def print_params(*params,name,age):
2     print("the num of params is :",len(params))
3     print(params)
4     print(name,age)
5 print_params('a','b',name = '王叔叔',age = '22')

 

**params

返回字典

1 def fun(**params):
2     print(params)
3 fun(x=1,y=2)

 

嵌套

一個函數放在另一個函數里面,就是嵌套

閉包:如果在一個內部函數,對在外部作用域引用的變量,內部函數就叫做閉包

1 def fun1(x):
2     def fun2(y):
3         return x*y
4     return fun2()

 

兩種實現方式:

 

遞歸

 1 def han(n,x,y,z):
 2     "將n層漢諾塔從x移動到z上"
 3     if n == 1:
 4         print(x,'-->',z)
 5     else:
 6         han(n-1,x,z,y)
 7         print(x,'-->',z)
 8         han(n-1,y,x,z)
 9 n = int(input("input n:"))
10 han(n,'X','Y','Z')

 執行結果:

 

如果在函數開頭寫下字符串,它會作為函數的一部分進行存儲,這稱為文檔字符串。調用方法:函數名.__doc__  (注意是雙下划線)

 

函數式編程

某些語言使用函數就可以完成所有的事(Lisp,Erlang,F#),沒有變量,只有輸入輸出和函數(以上為自己理解)

Python提供函數式編程思想的函數有:lambda、map、filter、reduce

lambda:

 

map:將序列中的元素全部傳遞給一個函數

map(function, sequence[, sequence, ...]) -> list

通過定義可以看到,這個函數的第一個參數是一個函數,剩下的參數是一個或多個序列,返回值是一個集合。

function可以理解為是一個一對一或多對一函數,map的作用是以參數序列中的每一個元素調用function函數,返回包含每次function函數返回值的list。

 

filter:過濾出為真值的列表

filter(function or None, sequence) -> list, tuple, or string

function是一個謂詞函數,接受一個參數,返回布爾值True或False。

filter函數會對序列參數sequence中的每個元素調用function函數,最后返回的結果包含調用結果為True的元素。

求奇數:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM