Python碎碎念(1):基礎(chǔ)部分


轉(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é)束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侨颈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芯义,更是在濱河造成了極大的恐慌哈垢,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扛拨,死亡現(xiàn)場離奇詭異耘分,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)绑警,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門求泰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人计盒,你說我怎么就攤上這事渴频。” “怎么了北启?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵卜朗,是天一觀的道長。 經(jīng)常有香客問我咕村,道長场钉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任懈涛,我火速辦了婚禮逛万,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘批钠。我一直安慰自己泣港,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布价匠。 她就那樣靜靜地躺著当纱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踩窖。 梳的紋絲不亂的頭發(fā)上坡氯,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音洋腮,去河邊找鬼箫柳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啥供,可吹牛的內(nèi)容都是我干的悯恍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伙狐,長吁一口氣:“原來是場噩夢啊……” “哼涮毫!你這毒婦竟也來了瞬欧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤罢防,失蹤者是張志新(化名)和其女友劉穎艘虎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咒吐,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡野建,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恬叹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片候生。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绽昼,靈堂內(nèi)的尸體忽然破棺而出唯鸭,到底是詐尸還是另有隱情,我是刑警寧澤绪励,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布肿孵,位于F島的核電站,受9級(jí)特大地震影響疏魏,放射性物質(zhì)發(fā)生泄漏停做。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一大莫、第九天 我趴在偏房一處隱蔽的房頂上張望蛉腌。 院中可真熱鬧,春花似錦只厘、人聲如沸烙丛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽河咽。三九已至,卻和暖如春赋元,著一層夾襖步出監(jiān)牢的瞬間忘蟹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工搁凸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媚值,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓护糖,卻偏偏與公主長得像褥芒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子嫡良,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354