轉(zhuǎn)載請?jiān)谖恼缕鹗继幾⒚鞒鎏幐抗唬x謝窗声。
文章轉(zhuǎn)自本人之前博客
0. 寫在前面
沒有輸出的輸入榨惠,只能算是知識(shí)的囤積捺癞。
1. 基礎(chǔ)
1.1 數(shù)學(xué)操作符
加:+
減:-
乘:*
除:/
指數(shù):**
取余:%
整除://
注意:'**'優(yōu)先級(jí)最高闷祥,其次是'*'娱颊、'/'、'//'凯砍、'%'箱硕,從左往右,最后是'+'悟衩、'-'剧罩。
1.2 數(shù)據(jù)類型
整型:int
浮點(diǎn)型:float
字符串:strs
1.3 字符串的連接和復(fù)制
連接:使用'+' 如:'hello' + 'world'
復(fù)制:使用'*' 如:'-' * 30
1.4 在變量中保存值
變量就像是計(jì)算機(jī)內(nèi)存中的一個(gè)盒子。
賦值語句:變量名 賦值操作符('=') 儲(chǔ)存的值
變量名:a.只能是一個(gè)詞 b.包含數(shù)字座泳、字母惠昔、下劃線 c.不能以數(shù)字開頭
駝峰:helloWorld
1.5 其他
單行注釋:#
多行注釋:''' '''
輸入:input()
輸出:print()
字符串中字符個(gè)數(shù):len()
數(shù)據(jù)類型轉(zhuǎn)換:str() int() float()
1.6 項(xiàng)目:簡易計(jì)算器
'''
兩位數(shù)加減乘除
首先是歡迎界面
'''
print('='*43)
print('Welcome!Please choose the function!')
print('1.ADD 2.SUBTRACT 3.MULTIPLY 4.DIVIDE 5.EXIT')
print('='*43)
while True: #通過while循環(huán)實(shí)現(xiàn)多次計(jì)算
choose = input('The number you choose is:')
if choose.isdigit():#判斷輸入是否符合要求
choose = int(choose)#若輸入為數(shù)字,則將str轉(zhuǎn)換成int
if choose == 1:#add
the_first_number = float(input('Please input the first number:'))
the_second_number = float(input('Please input the second number:'))
add_answer = the_first_number + the_second_number
print('The answer is:%r'%add_answer)
elif choose == 2:#subtract
the_first_number = float(input('Please input the first number:'))
the_second_number = float(input('Please input the second number:'))
subtract_answer = the_first_number - the_second_number
print('The answer is:%r'%subtract_answer)
elif choose == 3:#multiply
the_first_number = float(input('Please input the first number:'))
the_second_number = float(input('Please input the second number:'))
multiply_answer = the_first_number * the_second_number
print('The answer is:%r'%multiply_answer)
elif choose == 4:#divide
the_first_number = float(input('Please input the first number:'))
the_second_number = float(input('Please input the second number:'))
if the_second_number == 0:#0不能做被除數(shù)
print('The second number should\'t be zero!')
else:
divide_answer = the_first_number / the_second_number
print('The divide answer is:%r'%divide_answer)
elif choose == 5:#exit
print('EXIT!\nSee U next time!')
break
else:#Exceptions
print('Your number is out of 1 to 5.\nPlease input the right number.')
else:#Exceptions
print('Someting is wrong!\nPlease input the right number!')
continue
2. 控制流
程序不僅僅是簡單的執(zhí)行一行代碼钳榨,而是根據(jù)表達(dá)式求值結(jié)果舰罚,決定在什么條件下執(zhí)行哪些Python命令。
2.1 布爾值
只有兩種:True False
2.2 比較操作符
等于:== 注:和賦值操作符'='不同
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=
求值結(jié)果為:True False
2.3 布爾操作符
and or not
Python先求值not薛耻,然后是and营罢,最后是or。
2.4 控制流元素
開始是一個(gè)判斷語句(’條件’),接下來是一個(gè)代碼塊(’子塊’)饲漾。
2.5 控制流語句
2.5.1 if蝙搔、elif、else
if 條件:
子塊
elif 條件:
子塊
else:
子塊
2.5.2 while循環(huán)
while 條件:
子塊
2.5.3 break語句考传、continue語句
程序執(zhí)行遇到break馬上退出while語句吃型。執(zhí)行遇到continue語句,會(huì)馬上跳到循環(huán)開始處僚楞,重新對循環(huán)條件求值勤晚。
例如:輸入名字和口令
while True: #while循環(huán)
yourName = 'lee'
yourPassword = '12345'
name = input('What is your name?')
if name != yourName:
print('Wrong,please input your right name.')
continue #continue語句
print('Hello lee,please input your password.')
password = input()
if password == yourPassword:
break #break語句
print('Access granted.')
2.5.4 for循環(huán)、range()函數(shù)
for循環(huán)泉褐、range()函數(shù)可以讓代碼塊執(zhí)行固定次數(shù)赐写。
例如:高斯算數(shù)
total = 0
for num in range(101):
total += num
print(total)
range(起始值,終止值膜赃,步長)
2.5.5 等價(jià)的while循環(huán)
while循環(huán)也可以和for循環(huán)一樣挺邀,執(zhí)行固定次數(shù)。
i = 0
while i < 5:
print('hello world')
i += 1
注意:break跳座、continue語句僅適用于while端铛、for循環(huán)中。
2.5.6 導(dǎo)入模塊
內(nèi)建函數(shù):如print()函數(shù)
標(biāo)準(zhǔn)庫:每個(gè)模塊都是一個(gè)程序疲眷,包含一組相關(guān)函數(shù)禾蚕,使用import導(dǎo)入該模塊。
import random
random.randint(1,5)
from import語句
from random import *
使用這種形式的import咪橙,調(diào)用random中的函數(shù)夕膀,不需要使用random.前綴虚倒。為了代碼可讀性美侦,最好使用普通形式的import語句。
2.5.7 用sys.exit()提前終止程序
import sys
while True:
response = input()
if response == 'exit':
break #print()還要執(zhí)行
#sys.exit() #print()不執(zhí)行
print(response)
3. 函數(shù)
函數(shù)就像是程序內(nèi)的小程序魂奥。
3.1 def語句和參數(shù)
可以消除重復(fù)菠剩,使程序更短、更易讀耻煤、更容易更新具壮。
def 函數(shù)名(參數(shù)):
子塊
3.2 返回值和return語句
函數(shù)調(diào)用求值的結(jié)果,叫做返回值哈蝇。
return 函數(shù)應(yīng)該返回的值或表達(dá)式
3.3 None值
表示沒有值棺妓,是NoneType數(shù)據(jù)類型的唯一值。
3.4 關(guān)鍵字參數(shù)和print()
print()函數(shù)可選的變元有end炮赦、sep怜跑,分別指定在參數(shù)末尾打印什么,和在參數(shù)之間打印什么來隔開他們。
例如:
print('hello',end='')
print('world')
運(yùn)行結(jié)果為:
helloworld
例如:
print(‘a(chǎn)’,’b’,’c’性芬,sep=’,’)
a,b,c
3.5 局部和全局作用域
在被調(diào)用函數(shù)內(nèi)賦值的變元和變量峡眶,處于該函數(shù)的“局部作用域”,稱為“局部變量”植锉。
在函數(shù)之外賦值的變量辫樱,屬于“全局作用域”,稱為“全局變量”俊庇。
注意:
a.局部變量不能在全局作用域內(nèi)使用
b.局部作用域不能使用其他局部作用域內(nèi)的變量
c.全局變量可以在局部作用域中讀取
d.技術(shù)上來講狮暑,局部變量可以和全局變量名稱相同
3.6 global語句
如果需要在函數(shù)內(nèi)修改全局變量,使用global語句辉饱。
global 變量名
3.7 異常處理
try:
子塊
except 錯(cuò)誤:
子塊
3.8 項(xiàng)目1:猜數(shù)字
No.1
import random
number = random.randint(1,20)
i = 1
while True:
if i < 7:
guessNumber = int(input('Guess a number between 1 to 20:'))
if guessNumber == number:
print('You take %d times to guess the right number.'%i)
exit()
elif guessNumber > number:
print('Too big.Try again.')
elif guessNumber < number:
print('Too low.Try again.')
else:
print('Times out.')
break
i += 1
No.2
import random
number = random.randint(1,20)
for i in range(1,7):
guessNumber = int(input('Guess a number between 1 to 20:'))
if guessNumber > number:
print('Too big.Try again.')
elif guessNumber < number:
print('Too low.Try again.')
else:
break
if guessNumber == number:
print('Right in ' + str(i) +' times.')
else:
print('The number is ' + str(number) +'.')
3.9 項(xiàng)目2:collatz序列
#coding = utf-8
def collatz(): #定義collatz函數(shù)
global num #num為全局變量心例,故在函數(shù)內(nèi)修改全局變量,需使用global
if num%2 == 0:
num //= 2
print(num)
return num
else:
num = num*3 + 1
print(num)
return num
#輸入
num = input('請輸入一個(gè)正整數(shù):')
#異常處理
try:
num = int(num)
while num != 1:
collatz()
print('num=%d'%num)
except ValueError:
print('請輸入正確的值鞋囊。')
4. 列表
4.1 列表數(shù)據(jù)類型
列表是一個(gè)值止后,它包含多個(gè)字構(gòu)成的序列,’[]’溜腐。
使用下標(biāo)可以取得列表的值译株,如:egg[1]。第一個(gè)值下標(biāo)為0挺益,第二個(gè)為1歉糜,以此類推。
負(fù)數(shù)下標(biāo)表示從后往前數(shù)望众,-1表示列表最后一個(gè)下標(biāo)匪补,以此類推。
可以利用切片取得子列表烂翰,從第一個(gè)下標(biāo)開始夯缺,到第二個(gè)下標(biāo)結(jié)束,不包括第二個(gè)下標(biāo)的值甘耿,如egg[1,3]踊兜,取得egg[1]、egg[2]佳恬,但不包含egg[3]捏境。
可以使用len()函數(shù)返回列表值的個(gè)數(shù)。
列表的增毁葱、刪垫言、改、查:
增:append()方法 insert()方法
刪:del語句 pop() 如:del egg[1]
改:egg[1] = 2
查:index()方法 如:egg.index('1')
列表的連接和復(fù)制:
連接:'+'
復(fù)制:'*'
4.2 使用列表
列表可用于循環(huán)倾剿。
for i in [1,2,3]:
print(i)
in和not in操作符:
'1' in ['1','2','3']
多重賦值:是一種快捷方式筷频,可以在一行代碼中,用列表中的值為多個(gè)變量賦值。
cat = ['fat','black','loud']
size,color,disposition = cat
4.3 增強(qiáng)的賦值操作
+=
-=
*=
/=
4.4 方法
方法和函數(shù)是一回事截驮,只不過方法是調(diào)用在一個(gè)值上笑陈。如:egg.index(‘1’),方法部分跟在值后面葵袭,以一個(gè)句點(diǎn)(.)隔開涵妥。
如:
增:append()方法 insert()方法
刪:remove()方法,第一次出現(xiàn)的值會(huì)被刪除
查:index()方法坡锡,返回值的下標(biāo) 如:egg.index('1')
排序:sort()方法 如:egg.sort() egg.sort(reverse=True)逆序排序
4.5 類似列表的類型:字符串和元組
字符串和元組是不可變的蓬网,列表是可變的。
用list()鹉勒、tuple()函數(shù)來轉(zhuǎn)換類型帆锋。
4.6 引用
a = [1,2,3]
b = a
b[0] = 0
a
b
輸出為:
[0,2,3]
[0,2,3]
變量不保存列表,它保存的是對列表的引用禽额。
b = a是指b復(fù)制了a的引用锯厢,a、b指向同一個(gè)列表脯倒,修改b实辑,實(shí)際上是修改了a、b引用的列表藻丢。
傳遞引用:函數(shù)調(diào)用列表作為參數(shù)時(shí)剪撬,是對列表的引用。
copy模塊的copy()和deepcopy()函數(shù):
copy.copy()可以復(fù)制列表或字典這樣的可變值悠反,而不是復(fù)制引用残黑。
例如:
import copy
a = [1,2,3]
b = copy.copy(a)
b[0] = 0
a
b
輸出:
[1,2,3]
[0,2,3]
若要復(fù)制的列表中包含了列表,那就要用copy.deepcopy()函數(shù)來代替斋否。
4.7 項(xiàng)目1:逗號(hào)代碼
對于任意的列表梨水,可改成一行字符串,最后一位值為’and+變量’
a = ['2','4','d',1]
a[-1] = 'and ' +str(a[-1]) #修改最后一位為'and+變量''
i = 0
while i < len(a)-1:
print(a[i],end=',')
i += 1
print(a[-1]) #最后一位后無','
4.8 項(xiàng)目2:字符圖網(wǎng)格
grid = [['1','2','3','4'],
['1','2','3','4'],
['1','2','3','4'],
['1','2','3','4']]
#grid[i][j]
#循環(huán)嵌套
for j in range(0,4):
for i in range(0,4):
if i == 3:
print(grid[i][j])
else:
print(grid[i][j],end = '')
5. 字典和結(jié)構(gòu)化數(shù)據(jù)
5.1 字典數(shù)據(jù)類型
字典的索引被稱為’鍵’如叼,鍵及其關(guān)聯(lián)的值稱為’鍵-值’對冰木。 ‘key-value’
例如:
myCat = {'size':'fat','color':'black','disposition':'loud'}
myCat[size]
輸出:
fat
字典是不排序的穷劈,所以無法像列表一樣切片笼恰。若訪問不存在的值,就會(huì)導(dǎo)致KeyError錯(cuò)誤歇终。
字典的三個(gè)方法:key()社证、value()、item()评凝,分別對應(yīng)鍵追葡、值、鍵-值對。這些方法返回的數(shù)據(jù)類型不是列表宜肉,分別是dict_keys匀钧、dict_values、dict_items谬返。但這些返回值可用于for循環(huán)之斯。注意:item()返回的是包含鍵值的元組。
若需要檢查字典中是否存在鍵或值遣铝,用in和not in佑刷。
get()方法:get(鍵,備用值)酿炸。若字典中不存在該鍵瘫絮,則返回備用值。
setdefault()方法:為字典中某一鍵設(shè)置默認(rèn)值填硕,當(dāng)該鍵沒有任何值時(shí)使用麦萤。
5.2 漂亮打印
import pprint
pprint.pprint()
若想得到漂亮打印的文本,而不是顯示在屏幕上扁眯,可用pprint.pformat()频鉴。
6. 字符串操作
6.1 處理字符串
如何在字符串中輸入單引號(hào)、制表符或換行恋拍?
a)用雙引號(hào)開始和結(jié)束垛孔;
b)使用轉(zhuǎn)移字符'\'
c)原始字符串'r':在字符串前加r
d)用三重引號(hào)的多行字符串
字符串和列表一樣,都可以使用下標(biāo)和切片施敢。
和列表一樣周荐,字符串可以使用in和not in操作符。
6.2 有用的字符串方法
6.2.1 字符串方法upper()僵娃、lower()概作、isupper()、islower()
upper()默怨、lower()方法返回一個(gè)新的字符串讯榕,原字符串中所有字母都相應(yīng)轉(zhuǎn)換成大寫或小寫,非字母字符保持不變匙睹。請注意愚屁,此方法并沒有改變原有字符串,而是返回一個(gè)新的字符串痕檬。
6.2.2 isX字符串方法:用來驗(yàn)證用戶輸入
isalpha():返回True霎槐,表示只包含字母,且非空梦谜;
isalnum():返回True丘跌,表示只包含字母和數(shù)字袭景,且非空;
isdecimal():返回True闭树,表示只包含數(shù)字字符耸棒,且非空;
isspace():返回True报辱,表示只包含空格榆纽、制表符和換行,且非空捏肢;
istitle():返回True奈籽,表示字符串僅包含以大寫字母開頭,口面都是小寫字母的單詞鸵赫。
6.2.3 字符串方法startswith()和endswith()
startswith()和endswith()方法返回True衣屏,若所調(diào)用的字符串以該方法傳入的字符串開始或結(jié)束。
6.2.4 字符串方法join()和split()
join()方法在一個(gè)字符串上調(diào)用辩棒,參數(shù)是一個(gè)字符串列表狼忱,返回一個(gè)字符串,返回的字符串由輸入的列表中每個(gè)字符串連接而成一睁。
' '.join(['My','name','is','xxlee'])
'調(diào)用方法的字符串'.方法(參數(shù)列表)
輸出:
'My name is xxlee'
split()方法針對一個(gè)字符串調(diào)用钻弄,返回一個(gè)字符串列表。
6.2.5 用rjust()者吁、ljust()和center()方法對齊文本
rjust()窘俺、ljust()字符串方法返回調(diào)用它們的字符串的填充版本,通過插入空格來對齊文本复凳。第一個(gè)參數(shù)是一個(gè)整數(shù)長度瘤泪,第二個(gè)參數(shù)是填充字符。
center()字符串方法類似育八,讓文本居中对途。
'hello'.rjust(20,'#')
輸出:
'###############hello'
例:
def printPicnic(item,left,right):
print('PICNIC ITEMS'.center(left + right,'-'))
for k,v in item.items():
print(k.ljust(left,'.')+str(v).rjust(right))
a = {'s':3,'b':4333}
printPicnic(a,12,4)
輸出:
--PICNIC ITEMS--
s........... 3
b...........4333
6.2.6 用strip()、rstrip()和lstrip()刪除空白字符
strip()字符串方法將返回一個(gè)新的字符串髓棋,它開頭或末尾都沒有空白字符实檀。lstrip()和rstrip()方法將相應(yīng)刪除左邊或右邊的空白字符。
也可向strip()按声、rstrip()和lstrip()傳入可選的字符串參數(shù)膳犹,可刪除相應(yīng)的字符,傳入的字符順序并不重要儒喊。
6.2.7 用pyperclip模塊拷貝粘貼字符串
pyperclip模塊中有copy()和paste()函數(shù)镣奋,可以向計(jì)算機(jī)的剪貼板發(fā)送文本,或接收文本怀愧。
6.3 項(xiàng)目:口令保管箱
略
基礎(chǔ)部分結(jié)束