1. 程式人生 > >python3精簡筆記(一)-輸入輸出,型別,迴圈

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中,能夠直接處理的資料型別有以下幾種:

  1. 整數
  2. 浮點數
  3. 字串
  4. 布林值
  5. 空值 none
  6. 變數

整數

python整數沒有大小限制

字串

轉義字元\可以轉義很多字元,比如\n表示換行,\t表示製表符,字元\本身也要轉義,所以\\表示的字元就是\

為了簡化,Python還允許用r''表示''內部的字串預設不轉義

>>> 
print('\\\t\\') \ \ >>> print(r'\\\t\\') \\\t\\

\n寫在一行裡不好閱讀,為了簡化,Python允許用'''...'''的格式表示多行內容

>>> print('''line1
... line2
... line3''')
line1
line2
line3

布林值

布林值可以用andornot運算。

  1. and運算是與運算,只有所有都為Trueand運算結果才是True
  2. or運算是或運算,只要其中有一個為Trueor運算結果就是True
  3. not運算是非運算,它是一個單目運算子,把True
    變成FalseFalse變成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

elifelse 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')

注意

  1. 不要忘了寫冒號:

條件判斷的問題

最後看一個有問題的條件判斷。很多同學會用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...inwhile迴圈

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}
  1. 通過add(key)方法可以新增元素到set中,可以重複新增,但不會有效果;
  2. 通過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
這裡寫圖片描述