Python入门学习---第一天
輸入輸出,數據類型,字符串和占位符,條件語句,list和tuple
第一個.py程序
下載并安裝python環境后,創建hello.py文件,編寫如下內容:
print("hello world");打開cmd輸入命令,執行hello.py程序。如下:
輸入和輸出
輸出:
print()函數可以接受多個字符串,用逗號“,”隔開,就可以連成一串輸出,如下:
print()函數會依次打印每個字符串,遇到逗號“,”會輸出一個空格。因此我們會看到第一個輸出是Think+2個空格+Java,而第二個輸出是”Think Java”。
輸入:
Python提供了一個input()函數,可以讓用戶輸入字符串,并存放到一個變量里。如下:
以上寫出所有內容。轉載處:廖雪峰Python教程
Python的語法
Python的語法比較簡單,采用縮進方寫出來的代碼就像下面的樣子:
# print absolute value of an integer: a = 100 if a >= 0:print(a) else:print(-a)以 # 開頭的語句是注釋,注釋是給人看的,可以是任意內容,解釋器會忽略掉注釋。其他每一行都是一個語句,當語句以冒號:結尾時,縮進的語句視為代碼塊。
縮進有利有弊。好處是強迫你寫出格式化的代碼,但沒有規定縮進是幾個空格還是Tab。按照約定俗成的管理,應該始終堅持使用4個空格的縮進。
縮進的壞處就是“復制-粘貼”功能失效了,這是最坑爹的地方。當你重構代碼時,粘貼過去的代碼必須重新檢查縮進是否正確。此外,IDE很難像格式化Java代碼那樣格式化Python代碼。
Python數據類型
整數
與其他語言類似,不同的地方是Python的整數沒有大小的限制(我們經常會遇到大數的問題,強大的Python)。
浮點數
與其他語言類似,與整型一樣沒有大小限制。如果超出范圍則顯示inf(無窮大)。
字符串
與其他語言類似,’\’是轉義符。
不同之處
- r’ ‘ 表示 ’ ‘ 內部的字符串默認不轉義。如下:
發現:最后’之前必須是偶數個斜桿,否則報錯。 - Python允許用”’…”’的格式表示多行內容。如下:
發現程序輸出包括換行。
編寫一段python程序
print(r'''hello,\n world''')得到非常滿意的結果:
布爾值
與其他語言類似,用 True 和 False 代表真、假。
邏輯運算用 and、or、not 代表與、或、非。
空值
空值用 None 表示。None不能理解為0。
變量
與其他語言類似。不同之處在于Python不需要聲明是何種數據類型。
比如java聲明變量n需要先定義在賦值,如:int n = 1。而Python直接賦值 n = 1。
這種變量本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言(如C/C++、JAVA等)。
當我們寫:
a = 'abc'Python解釋器干了2件事情:
- 在內存中創建一個’abc’的字符串;
- 在內存中創建了一個名為a的變量,并把它指向’abc’。
既然如此,我們考慮下面代碼的執行結果。
a = 'ABC' b = a a = 'XYZ' print(b)我們想,b最后應該為’XYZ’。但很可惜,b的結果并沒有被a改變,這與引用不同。
實際上,Python先在內存中創建了一個’XYZ’字符串,再將a指向’XYZ’。而不是更改a原先指向的內容。
常量
在Python中,通常用全部大寫的變量名表示常量:
實際上,PI仍然是一個變量,如果你想改變PI的值,沒人會攔你。因為Python沒有任何機制保證PI不會被改變。
Python有兩種除法。一種是/計算出來的是浮點數;另一種則是//整數(向下取整)。
Python還提供了一個求余運算%,與其他語言類似。
Python支持多種數據類型,在計算機內部,可以把任何數據都看成一個“對象”,而變量就是在程序中用來指向這些數據對象的,對變量賦值就是把數據和變量給關聯起來。
對變量賦值x = y是把變量x指向真正的對象,該對象是變量y所指向的。隨后對變量y的賦值不影響變量x的指向。
轉載處:廖雪峰Python教程
字符串和編碼
編碼
由于ASCII編碼只有127個不同的表示方式,所以不能夠存放所有例如中文、阿拉伯語言等其他國家的語言。
中國制定了GB2312編碼,用來把中文編進去。
全世界很多國家語言都超過127個。如果每個國家都有他自己的編碼格式會造成多語言的文本中,顯示出來會有亂碼。
因此,Unicode應運而生。Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼的問題了。
由于表示ASCII編碼中的字符,需要Unicode的第一個字節補0。本著節約的精神,UTF-8出現了。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。
工作原理圖:
瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器:
字符串
對于單個字符的編碼,Python提供了ord()函數獲取字符的整數表示,chr()函數把編碼轉換為對應的字符:
由于Python的字符串類型是str,在內存中以Unicode表示,一個字符對應若干個字節。如果要在網絡上傳輸,或者保存到磁盤上,就需要把str變為以字節為單位的bytes。
以Unicode表示的str通過encode()方法可以編碼為指定的bytes,例如:
>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' >>> '中文'.encode('ascii') Traceback (most recent call last):File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)純英文的str可以用ASCII編碼為bytes,內容是一樣的,含有中文的str可以用UTF-8編碼為bytes。含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯。
在bytes中,無法顯示為ASCII字符的字節,用\x##顯示。
反過來,如果我們從網絡或磁盤上讀取了字節流,那么讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法:
>>> b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文' # 如果bytes中包含無法解碼的字節,decode()方法會報錯: >>> b'\xe4\xb8\xad\xff'.decode('utf-8') Traceback (most recent call last):... UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte # 如果bytes中只有一小部分無效的字節,可以傳入errors='ignore'忽略錯誤的字節: >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') '中' # 要計算str包含多少個字符,可以用len()函數: >>> len('ABC') 3 >>> len('中文') 2 # 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編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。
聲明用的字符集是utf-8并不是真的為utf-8,想要設置成utf-8,需要將文件的屬性編碼集改為utf-8。
占位符,如下:
>>> 'Hello, %s' % 'world' 'Hello, world' >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.'與C語言類似。
常見占位符:
| %d | 整數 |
| %f | 浮點數 |
| %s | 字符串 |
| %x | 十六進制整數 |
如果你不太確定應該用什么,%s永遠起作用,它會把任何數據類型轉換為字符串:
>>> 'Age: %s. Gender: %s' % (25, True) 'Age: 25. Gender: True'有些時候,字符串里面的%是一個普通字符怎么辦?這個時候就需要轉義,用%%來表示一個%:
>>> 'growth rate: %d %%' % 7 'growth rate: 7 %'format()
另一種格式化字符串的方法是使用字符串的format()方法,它會用傳入的參數依次替換字符串內的占位符{0}、{1}……,不過這種方式寫起來比%要麻煩得多:
轉載處:廖雪峰Pyhton教程
使用list和tuple
list
Python內置的一種數據類型列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。
# 比如,列出班里所有同學的名字,就可以用一個list表示: >>> classmates = ['Michael', 'Bob', 'Tracy'] >>> classmates ['Michael', 'Bob', 'Tracy'] # 變量classmates就是一個list。用len()函數可以獲得list元素的個數: >>> len(classmates) 3 # 用索引來訪問list中每一個位置的元素,記得索引是從0開始的; # 當索引超出了范圍時,Python會報一個IndexError錯誤: >>> classmates[0] 'Michael' >>> classmates[1] 'Bob' >>> classmates[2] 'Tracy' >>> classmates[3] Traceback (most recent call last):File "<stdin>", line 1, in <module> IndexError: list index out of range # 如果要取最后一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最后一個元素: >>> classmates[-1] 'Tracy' # 以此類推,可以獲取倒數第2個、倒數第3個;當然,倒數第4個就越界了: >>> classmates[-2] 'Bob' >>> classmates[-3] 'Michael' >>> classmates[-4] Traceback (most recent call last):File "<stdin>", line 1, in <module> IndexError: list index out of range # list是一個可變的有序表,所以,可以往list中追加元素到末尾: >>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam'] # 也可以把元素插入到指定的位置,比如索引號為1的位置: >>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam'] # 要刪除list末尾的元素,用pop()方法: >>> classmates.pop() 'Adam' >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy'] # 要刪除指定位置的元素,用pop(i)方法,其中i是索引位置: >>> classmates.pop(1) 'Jack' >>> classmates ['Michael', 'Bob', 'Tracy'] # 要把某個元素替換成別的元素,可以直接賦值給對應的索引位置: >>> classmates[1] = 'Sarah' >>> classmates ['Michael', 'Sarah', 'Tracy'] # list里面的元素的數據類型也可以不同,比如: >>> L = ['Apple', 123, True] # list元素也可以是另一個list,比如: >>> s = ['python', 'java', ['asp', 'php'], 'scheme'] >>> len(s) 4 # 要注意s只有4個元素,其中s[2]又是一個list,如果拆開寫就更容易理解了: # 要拿到'php'可以寫p[1]或者s[2][1],因此s可以看成是一個二維數組,類似的還有三維、四維……數組,不過很少用到。 >>> p = ['asp', 'php'] >>> s = ['python', 'java', p, 'scheme'] # 如果一個list中一個元素也沒有,就是一個空的list,它的長度為0: >>> L = [] >>> len(L) 0tuple
另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改,比如同樣是列出同學的名字:
>>> classmates = ('Michael', 'Bob', 'Tracy')現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他獲取元素的方法和list是一樣的,你可以正常地使用classmates[0],classmates[-1],但不能賦值成另外的元素。
不可變的tuple有什么意義?
因為tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。
tuple的陷阱:
# 當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來,比如: >>> t = (1, 2) >>> t (1, 2) # 如果要定義一個空的tuple,可以寫成(): >>> t = () >>> t () # 但是,要定義一個只有1個元素的tuple,如果你這么定義: # 定義的不是tuple,是1這個數!這是因為括號()既可以表示tuple,又可以表示數學公式中的小括號,這就產生了歧義,因此,Python規定,這種情況下,按小括號進行計算,計算結果自然是1。 >>> t = (1) >>> t 1 # 所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義: >>> t = (1,) >>> t (1,) # 最后來看一個“可變的”tuple; # 元組中的list是不可變的,list的內容是可變的,這個理解起來很簡單,跟其他語言的引用差不多。 >>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])練習
請用索引取出下面list的指定元素:
# -*- coding: utf-8 -*-L = [ ['Apple', 'Google', 'Microsoft'], ['Java', 'Python', 'Ruby', 'PHP'], ['Adam', 'Bart', 'Lisa'] ] # 打印Apple: print(L[0][0]) # 打印Python: print(L[1][1]) # 打印Lisa: print(L[2][2])轉載處:廖雪峰Python教程
條件判斷
if語句
與其他語言相比,elif是else if的縮寫,完全可以有多個elif,所以if語句的完整形式就是:
if <條件判斷1>:<執行1> elif <條件判斷2>:<執行2> elif <條件判斷3>:<執行3> else:<執行4>再議input
如下代碼:
birth = input('birth: ') if birth < 2000:print('00前') else:print('00后')輸入1982,結果報錯:
Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: unorderable types: str() > int()這是因為input()返回的數據類型是str,str不能直接和整數比較,必須先把str轉化成整數。Python提供了int()函數來完成這件事情:
s = input('birth: ') birth = int(s) if birth < 2000:print('00前') else:print('00后')再次運行,就可以得到正確地結果。但是,如果輸入abc呢?又會得到一個錯誤信息:
Traceback (most recent call last):File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'abc'原來int()函數發現一個字符串并不是合法的數字時就會報錯,程序就退出了。
練習
小明身高1.75,體重80.5kg。請根據BMI公式(體重除以身高的平方)幫小明計算他的BMI指數,并根據BMI指數:
- 低于18.5:過輕
- 18.5-25:正常
- 25-28:過重
- 28-32:肥胖
- 高于32:嚴重肥胖
用if-elif判斷并打印結果:
代碼如下:
height = 1.75 weight = 80.5 BMI = weight/(height*height) if BMI<18.5:print('過輕') elif BMI<25:print('正常') elif BMI<28:print('過重') elif BMI<32:print('肥胖') else:print('嚴重肥胖'.encode('utf-8'))轉載處:廖雪峰Python教程
第二天內容
總結
以上是生活随笔為你收集整理的Python入门学习---第一天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 产品经理如何避免被程序员打?
- 下一篇: 产品经理学SQL—前言