python3精簡筆記(一)-輸入輸出,型別,迴圈
輸入輸出
input()
輸入函式
print()
輸出函式
程式一執行,會首先打印出please enter your name:
,這樣,使用者就可以根據提示,輸入名字後,得到hello, xxx
的輸出:
name = input('please enter your name: ')
print('hello,', name)
輸出的時候 ,
分隔開,會自動加一個空格
python基礎
#
開頭的是註釋。
當語句以冒號:
結尾時,縮排的語句視為程式碼塊。
例子:
# print absolute value of an integer:
a = 100
if a >= 0 :
print(a)
else:
print(-a)
比較坑的是 編輯器很難像格式化java一樣格式化python, 一般縮排4個空格,在文字編輯器中,需要設定把Tab自動轉換為4個空格,確保不混用Tab和空格。
python資料型別
在Python中,能夠直接處理的資料型別有以下幾種:
- 整數
- 浮點數
- 字串
- 布林值
- 空值 none
- 變數
整數
python整數沒有大小限制
字串
轉義字元\
可以轉義很多字元,比如\n
表示換行,\t
表示製表符,字元\
本身也要轉義,所以\\
表示的字元就是\
為了簡化,Python還允許用r''
表示''
內部的字串預設不轉義
>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\
用\n
寫在一行裡不好閱讀,為了簡化,Python允許用'''...'''
的格式表示多行內容
>>> print('''line1
... line2
... line3''')
line1
line2
line3
布林值
布林值可以用and
、or
和not
運算。
and
運算是與運算,只有所有都為True
,and
運算結果才是True
or
運算是或運算,只要其中有一個為True
,or
運算結果就是True
:not
運算是非運算,它是一個單目運算子,把True
False
,False
變成True
變數
python變數沒有型別約束 沒有關鍵字宣告
#宣告變數 a為 1
a=1
注意
python除法運算分為兩種 , /
和//
/
無論是否除盡結果都為浮點數, //
為地板除 ,除不盡也為整數
9/3 =3.0
10//3=3
python編碼
最新的Python 3版本中,字串是以Unicode編碼的,也就是說,Python的字串支援多語言
對於單個字元的編碼,Python提供了ord()
函式獲取字元的整數表示,chr()
函式把編碼轉換為對應的字元:
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
encode()和decode()
由於Python的字串型別是str,在記憶體中以Unicode
表示,一個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把str
變為以位元組為單位的bytes
。
Python對bytes型別的資料用帶b字首的單引號或雙引號表示:
x = b'ABC'
要注意區分'ABC
‘和b'ABC'
,前者是字串,後者雖然內容顯示得和前者一樣,但bytes的每個字元都只佔用一個位元組。
以Unicode表示的str通過encode()
方法可以編碼為指定的bytes
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
decode()
方法把bytes變為str
len()
len()函式計算的是str的字元數,如果換成bytes,len()函式就計算位元組數:
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6
由於Python原始碼也是一個文字檔案,所以,當你的原始碼中包含中文的時候,在儲存原始碼時,就需要務必指定儲存為UTF-8編碼。當Python直譯器讀取原始碼時,為了讓它按UTF-8編碼讀取,我們通常在檔案開頭寫上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行註釋是為了告訴Linux/OS X系統,這是一個Python可執行程式,Windows系統會忽略這個註釋;
第二行註釋是為了告訴Python直譯器,按照UTF-8編碼讀取原始碼,否則,你在原始碼中寫的中文輸出可能會有亂碼。
字串格式化
在Python中,採用的格式化方式和C語言是一致的,用%
實現,%
運算子就是用來格式化字串的。在字串內部,%s
表示用字串替換,%d
表示用整數替換,有幾個%?
佔位符,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?
,括號可以省略。舉例如下:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
格式化整數和浮點數還可以指定是否補0和整數與小數的位數:
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'
如果你不太確定應該用什麼,%s
永遠起作用,它會把任何資料型別轉換為字串
字串裡面的%是一個普通字元怎麼辦?這個時候就需要轉義,用%%來表示一個%:
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'
list
Python內建的一種資料型別是列表:list。list是一種有序的集合,可以隨時新增和刪除其中的元素。
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
用len()函式可以獲得list元素的個數。
不能越界,記得最後一個元素的索引是len(classmates) - 1。
如果要取最後一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最後一個元素:
>>> classmates[-1]
'Tracy'
-2 為倒數第二個 -3 倒數第三個 以此類推
list方法
append()
追加元素
insert()
插入元素
pop()
刪除最後元素或指定元素
要把某個元素替換成別的元素,可以直接賦值給對應的索引位置:
classmates.append('Adam')
classmates.insert(1, 'Jack')
classmates.pop()
classmates.pop(1)
classmates[1] = 'Sarah'
tuple
另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改
定義方式用()
定義
tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來,比如:
>>> t = (1, 2)
>>> t
(1, 2)
注意
要定義一個只有1個元素的tuple,如果你這麼定義:
>>> t = (1)
>>> t
1
定義的不是tuple,是1
這個數!這是因為括號()
既可以表示tuple,又可以表示數學公式中的小括號,這就產生了歧義,因此,Python規定,這種情況下,按小括號進行計算,計算結果自然是1。
所以,只有1個元素的tuple定義時必須加一個逗號,
,來消除歧義:
>>> t = (1,)
>>> t
(1,)
Python在顯示只有1個元素的tuple時,也會加一個逗號,,以免你誤解成數學計算意義上的括號。
條件判斷
關鍵字: if
else
elif
elif
是else if
的縮寫,完全可以有多個elif
,所以if語句的完整形式就是:
if <條件判斷1>:
<執行1>
elif <條件判斷2>:
<執行2>
elif <條件判斷3>:
<執行3>
else:
<執行4>
python並不像Java語言中使用{}
包裹執行語句, python是識別冒號:
後的縮排的
age = 3
if age >= 18:
print('your age is', age)
print('adult')
else:
print('your age is', age)
print('teenager')
輸出
your age is 3
teenager
下面程式碼,只要x是非零數值、非空字串、非空list等,就判斷為True
,否則為False
。
if x:
print('True')
注意
- 不要忘了寫冒號
:
條件判斷的問題
最後看一個有問題的條件判斷。很多同學會用input()讀取使用者的輸入,這樣可以自己輸入,程式執行得更有意思:
birth = input('birth: ')
if birth < 2000:
print('00前')
else:
print('00後')
上面程式碼執行後,輸入數字會報錯, 因為input輸入的都是字串,需要通過int()
函式轉換成整數
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00後')
迴圈
迴圈分為 for...in
和while
迴圈
for…in
一種是for…in迴圈,依次把list或tuple中的每個元素迭代出來
比如計算list
中數的和
sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
sum = sum + x
print(sum)
如果要計算1-100的整數之和,從1寫到100有點困難,幸好Python提供一個range()
函式,可以生成一個整數序列,再通過list()
函式可以轉換為list。比如range(5)
生成的序列是從0開始小於5的整數:
>>> list(range(5))
[0, 1, 2, 3, 4]
range(101)
就可以生成0-100的整數序列,計算如下:
sum = 0
for x in range(101):
sum = sum + x
print(sum)
while
只要條件滿足,就不斷迴圈,條件不滿足時退出迴圈。
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
dict
Python內建了字典:dict
的支援,dict
全稱dictionary
,Java語言中對應為map,使用鍵-值(key-value)儲存,具有極快的查詢速度。
例子:
>>> d = {'小明': 95, '小於': 75, '小紅': 85}
>>> d['小明']
95
如果key不存在就會報錯
要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在:
>>> '老王' in d
False
二是通過dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('老王')
>>> d.get('老王', -1)
-1
注意:返回None的時候Python的互動式命令列不顯示結果。
要刪除一個key,用pop(key)
方法,對應的value也會從dict中刪除:
>>> d.pop('小於')
75
>>> d
{'小明': 95, '小紅': 85}
正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變物件。
set
set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。
要建立一個set,需要提供一個list作為輸入集合,重複元素在set中自動被過濾:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
- 通過
add(key)
方法可以新增元素到set中,可以重複新增,但不會有效果; - 通過
remove(key)
方法可以刪除元素。
set可以看成數學意義上的無序和無重複元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作,&
取交集,|
取並集:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
更多精彩請關注微信公眾賬號likeDev