小白必看篇:教你如何簡單學(xué)習(xí)python,快速入門

“人生苦短,我學(xué)python”是編程屆的名言。用python寫小腳本的便捷性,讓很多其他語言的學(xué)習(xí)者把python當(dāng)作輔助語言。擁有了某一個語言的功底,再來學(xué)習(xí)另外一種語言應(yīng)該是十分快速的。

基礎(chǔ)的運(yùn)算

安裝好python環(huán)境后,運(yùn)行win+R,輸入python直接進(jìn)入python的交互頁面,這邊可以進(jìn)行數(shù)學(xué)運(yùn)算。

>>> 2+2

4

復(fù)制代碼

表1 數(shù)學(xué)操作符,優(yōu)先級從高到低

操作符 操作 例子 值 ** 指數(shù) 2 ** 3 8 % 取模/取余數(shù) 22 % 8 6 // 整除/商數(shù)取整 22 // 8 2 / 除法 22 / 8 2.75 * 乘法 3 * 5 15 - 減法 5 - 2 3 + 加法 2 + 2 4

由上面可以看出python前兩個基礎(chǔ)類型 整數(shù)、 浮點(diǎn)類型。這兩個和java中的概念差不多。

這里多說一句,小編是一名python開發(fā)工程師,這里有我自己整理的一套最新的python系統(tǒng)學(xué)習(xí)教程,包括從基礎(chǔ)的python腳本到web開發(fā)、爬蟲、數(shù)據(jù)分析、數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)等。想要這些資料的可以關(guān)注小編,并在后臺私信小編即可領(lǐng)取。

字符串

作為基礎(chǔ)的類型,當(dāng)然少不了字符串了,和java一樣,字符串可以進(jìn)行拼接操作。例如:

>>> 'AAA' + 'BBB'

'AAABBB'

>>> 'CCC'+25

Traceback (most recent call last):

? File "<stdin>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str

>>> 'DEF'*3

'DEFDEFDEF'

復(fù)制代碼

如上,‘AAA’+'BBB'可以直接進(jìn)行字符串的拼接。但是與java不同的是 python不會進(jìn)行類型強(qiáng)制轉(zhuǎn)化,所以當(dāng)用字符串‘CCC’+int型的25的時候就會報錯。對python進(jìn)行*操作,字符串會進(jìn)行復(fù)制。

變量名

這邊插一段,在java中進(jìn)行變量聲明的時候,需要指定變量類型,在python中不需要,但是python變量名也需要一定的規(guī)則。

只能是一個詞。

只能包含字母、數(shù)字和下劃線。

不能以數(shù)字開頭。

類型轉(zhuǎn)化

為了讓int型的5可以轉(zhuǎn)化成字符串類型,從而和字符串拼接,python提供了一些內(nèi)置函數(shù)。

表2 一些python內(nèi)置函數(shù)

函數(shù) 作用 示例 str() 轉(zhuǎn)化類型為字符串 str(5) int() 轉(zhuǎn)化類型為整數(shù) int('5') float() 轉(zhuǎn)化類型為浮點(diǎn)數(shù) float('5') print() 打印函數(shù) 略 input() 讀取用戶輸入數(shù)據(jù) myName = input() len() 內(nèi)容長度 len(myName)

控制流

布爾值

現(xiàn)在引入第四個數(shù)據(jù)類型,布爾值。python的布爾值也是有真或者假,但是python中的真為True(注意T必須大寫),假為False(F也必須為大寫),同樣的布爾類型不能與其他類型相比較。

>>> True

True

>>> true

Traceback (most recent call last):

? File "<stdin>", line 1, in <module>

NameError: name 'true' is not defined

>>> True = 1

? File "<stdin>", line 1

SyntaxError: can't assign to keyword

復(fù)制代碼

比較類型

表3 比較類型

操作符 含義 == 等于 != 不等于 < 小于 > 大于 <= 小于等于 >= 大于等于

同時python也可以使用二元操作符 and、or、not同java中的與、或、非。


條件與代碼塊

你前面看到的布爾表達(dá)式可以看成是條件,它和表達(dá)式是一回事?!皸l件”只是在 控制流語句的上下文中更具體的名稱。條件總是求值為一個布爾值,True 或 False。控制 流語句根據(jù)條件是 True 還是 False,來決定做什么。幾乎所有的控制流語句都使用條件。

代碼塊

python沒有java中那種{}來區(qū)分代碼塊,python中所有的代碼塊都是通過縮進(jìn)進(jìn)行的。

縮進(jìn)增加時,代碼塊開始。

代碼塊可以包含其他代碼塊。

縮進(jìn)減少為零,或減少為外面包圍代碼塊的縮進(jìn),代碼塊就結(jié)束了。

>>> if 'a'=='b':

...? ? print('真')

... else:

...? ? print('假')

...

復(fù)制代碼

以上是一個if else 的控制流,條件后面加上冒號,并且代碼塊需要縮進(jìn)方式。

while循環(huán)的格式如下:

spam = 0

while spam < 5:

print('Hello, world.')

spam = spam + 1

復(fù)制代碼

另外 python 也有break 和continue 關(guān)鍵字可以使用。

for循環(huán)

for循環(huán)單另兒拿出來以示尊重,for循環(huán)的格式如下:

for 關(guān)鍵字;

一個變量名;

in 關(guān)鍵字;

調(diào)用 range()方法,最多傳入 3 個參數(shù);

冒號;

從下一行開始,縮退的代碼塊(稱為 for 子句)。

for i in range(5):

? ? print('Jimmy Five Times (' + str(i) + ')')

復(fù)制代碼

i分別執(zhí)行0、1、2、3、4.

range()方法其實有三個參數(shù),只是可以省略其中兩個。range(start、end、gap),可以指定開始、結(jié)束和步長。

>>> for i in range(0,10,3):

...? ? print(i)

...

0

3

6

9

復(fù)制代碼

函數(shù)

導(dǎo)入模塊

Python 程序可以調(diào)用一組基本的函數(shù),這稱為“內(nèi)建函數(shù)”,包括你見到過的print()、input()和 len()函數(shù)。Python 也包括一組模塊,稱為“標(biāo)準(zhǔn)庫”。每個模塊都是一個 Python 程序,包含一組相關(guān)的函數(shù),可以嵌入你的程序之中。例如,math模塊有數(shù)學(xué)運(yùn)算相關(guān)的函數(shù),random 模塊有隨機(jī)數(shù)相關(guān)的函數(shù),等等。

利用import或者from import語句

自定義函數(shù)

除了內(nèi)建函數(shù),大部分的函數(shù)都是自定義的。(即使從模塊中導(dǎo)入的函數(shù)也是別人自定義好的,讓你使用的)

def hello(name):

print('Hello ' + name)

復(fù)制代碼

def 函數(shù)名(參數(shù)):

函數(shù)體

None

在Python中有一個值稱為None,它表示沒有值。None是NoneType數(shù)據(jù)類型的唯一值(其他編程語言可能稱這個值為null、nil或 undefined)。就像布爾值True和False一樣,None必須大寫首字母 N。

異常處理

def temp_convert(var):

? ? try:

? ? ? ? return int(var)

? ? except ValueError, Argument:

? ? ? ? print "參數(shù)沒有包含數(shù)字\n", Argument

復(fù)制代碼

類似于java,python捕獲處理一場用的是try,except,只不過在except后面除了可以跟異常類(比如例子中的ValueError),還可以跟上引發(fā)一場的參數(shù)(比如例子中的Argument,其實就是try中的var)

列表

列表可以看作java中的數(shù)組集合,可以存放一些元素,比如>>> spam = ['cat', 'bat', 'rat', 'elephant']。我們可以通過index獲取某個元素,比如spam[0]=‘cat’,同時可以從后往前拿數(shù)據(jù),比如spam[-1]='elephant'。

切片

除了直接操作index,獲取某個元素之外,還可以通過切片獲得一段子列表。

>>> spam[1:3]

['bat', 'rat']

>>> spam[0:-1]

['cat', 'bat', 'rat']

復(fù)制代碼

列表的拼接與復(fù)制

與java不同的是,python的列表可以自由的拼接復(fù)制。

>>> [1, 2, 3] + ['A', 'B', 'C']

[1, 2, 3, 'A', 'B', 'C']

>>> ['X', 'Y', 'Z'] * 3

['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']

復(fù)制代碼

列表結(jié)合某些關(guān)鍵字和方法

刪除某列表中的某元素,可以直接用del關(guān)鍵字。

也可以結(jié)合for循環(huán)

>>> supplies = ['pens', 'staplers', 'flame-throwers', 'binders']

>>> for i in range(len(supplies)):

print('Index ' + str(i) + ' in supplies is: ' + supplies[i])

復(fù)制代碼

利用 in 、not in 直接判斷某元素是否在列表中

>>> 'howdy' in ['hello', 'hi', 'howdy', 'heyas']

True

>>> spam = ['hello', 'hi', 'howdy', 'heyas']

>>> 'cat' in spam

False

復(fù)制代碼

index()方法判斷某元素在列表中的第一次出現(xiàn)的下標(biāo),沒有的話就報錯。

>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']

>>> spam.index('Pooka')

1

復(fù)制代碼

用 append()和 insert()方法在列表中添加值

append()方法調(diào)用,將參數(shù)添加到列表末尾。insert()方法可以在列表任意下標(biāo)處插入一個值。insert()方法的第一個參數(shù)是新值的下標(biāo),第二個參數(shù)是要插入的新值。

用remove()方法從列表中刪除值

用sort()方法將列表中的值排序

元組

在java中,我們知道String 是被final修飾的,所以String本身是不能修改的,如果對String進(jìn)行修改,其實是在內(nèi)存中新建了一個新的String。類似的python中也有一個不可修改的數(shù)據(jù)類型——元組。元組和列表差不多,很多方法都是共通的。只不過,元組是用"()"表示,并且元組內(nèi)的元素不能被修改,也不能對元組進(jìn)行增加刪除操作。

元組和列表的轉(zhuǎn)化

函數(shù)list()和tuple()將返回傳遞給它們的值的列表和元組版本。

>>> tuple(['cat', 'dog', 5])

('cat', 'dog', 5)

>>> list(('cat', 'dog', 5))

['cat', 'dog', 5]

>>> list('hello')

['h', 'e', 'l', 'l', 'o']

復(fù)制代碼

引用與引用函數(shù)

>>> spam = [0, 1, 2, 3, 4, 5]

>>> cheese = spam

>>> cheese[1] = 'Hello!'

>>> spam

[0, 'Hello!', 2, 3, 4, 5]

>>> cheese

[0, 'Hello!', 2, 3, 4, 5]

復(fù)制代碼

看上面的代碼,非常好理解,spam將引用復(fù)制給cheese,而不是復(fù)制的對象,所以對某個引用操作,都會改變那唯一的對象。如果想為cheese引用生成一個新的對象,就需要用到拷貝函數(shù)copy()和deepcopy()。其實就是java中的淺拷貝和深拷貝。

>>> import copy

>>> spam = ['A', 'B', 'C', 'D']

>>> cheese = copy.copy(spam)

>>> cheese[1] = 42

>>> spam

['A', 'B', 'C', 'D']

>>> cheese

['A', 42, 'C', 'D']

復(fù)制代碼

deepcopy()深拷貝是指,不僅生成一個與spam一樣新的對象,連spam內(nèi)部的數(shù)據(jù)也一起復(fù)制一堆新的對象出來。就好比說把'A','B'這種元素分別換成一個個子列表,淺拷貝不會對他們復(fù)制,而深拷貝會對這些對象進(jìn)行復(fù)制。

字典

像列表一樣,“字典”是許多值的集合。但不像列表的下標(biāo),字典的索引可以使用許多不同數(shù)據(jù)類型,不只是整數(shù)。字典的索引被稱為“鍵”,鍵及其關(guān)聯(lián)的值稱為“鍵-值”對。所以可以說字典就是java中的Map。

myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}

復(fù)制代碼

與列表不同的是,字典沒有順序的概念,所以不能通過操作index獲取某元素,不能使用切片,不能使用排序函數(shù)。

操作字典

基本操作

所以操作字典,就需要另辟蹊徑,使用函數(shù)keys()、values()和 items()。顧名思義,分別是獲取字典的key值們,val值們,和鍵值對本身們。

>>> spam = {'color': 'red', 'age': 42}

>>> for v in spam.values():

? ? ? ? print(v)

red

42

>>> for k in spam.keys():

? ? ? ? print(k)

color

age

>>> for i in spam.items():

? ? ? ? print(i)

('color', 'red')

('age', 42)

復(fù)制代碼

值得一提的是 spam.keys()獲得的是元組,如果希望的到對應(yīng)的列表就需要用list函數(shù)轉(zhuǎn)化。

檢查字典中是否存在鍵或值

可以利用in 或者not in 關(guān)鍵字判斷數(shù)據(jù)是否在字典中。

>>> spam = {'name': 'Zophie', 'age': 7}

>>> 'name' in spam.keys()

True

>>> 'Zophie' in spam.values()

True

>>> 'color' in spam.keys()

False

>>> 'color' not in spam.keys()

True

>>> 'color' in spam

False

復(fù)制代碼

get()和setdefault()方法

get()可以通過key值找到相對應(yīng)的value值。get有兩個參數(shù),第一個參數(shù)是key值,第二個參數(shù)是在鍵值對不存在(或者說key不存在)的時候,給予的默認(rèn)值。

>>> picnicItems = {'apples': 5, 'cups': 2}

>>> 'I am bringing ' + str(picnicItems.get('cups', 0)) + ' cups.'

'I am bringing 2 cups.'

>>> 'I am bringing ' + str(picnicItems.get('eggs', 0)) + ' eggs.'

'I am bringing 0 eggs.'

復(fù)制代碼

setdefault()有兩個參數(shù),第一個是要插入鍵值對的key值,第二個是默認(rèn)值。當(dāng)原字典中有這個key值,就什么也不做,如果原字典中沒有這個key值,就將默認(rèn)值作為value,同key一起拼成鍵值對插入到字典中。

>>> spam = {'name': 'Pooka', 'age': 5}

>>> spam.setdefault('color', 'black')

'black'

>>> spam

{'color': 'black', 'age': 5, 'name': 'Pooka'}

>>> spam.setdefault('color', 'white')

'black'

>>> spam

{'color': 'black', 'age': 5, 'name': 'Pooka'}

復(fù)制代碼

字符串操作

我們早已經(jīng)知道了字符串和其基本操作了,當(dāng)我們又學(xué)習(xí)了列表、元組、字典之后再來看一下更加豐富的處理字符串的方法。

轉(zhuǎn)移字符和原始字符

和java一樣,python也是用 \ 對特殊字符進(jìn)行轉(zhuǎn)義。同時,還有原始字符 r??梢栽谧址_始的引號之前加上r,使它成為原始字符串?!霸甲址蓖耆雎运械霓D(zhuǎn)義字符,打印出字符串中所有的倒斜杠。

>>> print(r'That is Carol\'s cat.')

That is Carol\'s cat.

復(fù)制代碼

注釋與多行字符

python單行注釋可以使用特殊字符#,同時多行注釋可以使用""".

# 這是一行注釋

"""

這是多行注釋

這是多行注釋

這是多行注釋

"""

復(fù)制代碼

有時候我們在使用print函數(shù)的時候,打印的字符串很長很長,為了頁面好看,可以使用'''將大字符串拆分成好幾行。

print('''Dear Alice,

Eve's cat has been arrested for catnapping, cat burglary, and extortion.

Sincerely,

Bob''')

復(fù)制代碼

字符串下標(biāo)和切片

一個字符串也可以當(dāng)作列表來處理,其中元素可以看作是一個個字符。所以就可以對字符串進(jìn)行下標(biāo)操作或者切片操作。同樣的就可以利用in、not in判斷某字符是否在字符串內(nèi)了。

>>> spam = 'Hello world!'

>>> spam[0]

'H'

>>> spam[4]

'o'

>>> spam[-1]

'!'

>>> spam[0:5]

'Hello'

>>> spam[:5]

'Hello'

>>> spam[6:]

'world!'

復(fù)制代碼

一些字符串內(nèi)建方法

upper() 字符串全部變大寫

lower() 字符串全部變小寫

isupper()字符串至少有一個字母,并且所有字母都是大寫

islower()字符串至少有一個字母,并且所有字母都是小寫

isalpha()字符串只包含字母,并且非空

isalnum()字符串只包含字母和數(shù)字,并且非空

isdecimal()字符串只包含數(shù)字字符,并且非空

isspace()字符串只包含空格、制表符和換行,并且非空

startswith()字符串以該方法傳入的字符串開始

endswith()字符串以該方法傳入的字符串結(jié)束

join()拼接字符串,可指定分隔符

split()通過某值切割字符串

rjust()左填充,如果輸出數(shù)據(jù)不足,補(bǔ)充空格

ljust()右填充,如果輸出數(shù)據(jù)不足,補(bǔ)充空格

center()字符串居中,左右數(shù)據(jù)不足,補(bǔ)充空格

結(jié)束

學(xué)以致用,寫爬蟲也是我學(xué)習(xí)python的一個動力,寫了一個小腳本爬取豆瓣電影TOP250.(好像這個是爬蟲入門經(jīng)典案例吧,哈哈)代碼貼一下

import requests as rq

from bs4 import BeautifulSoup

import pandas as pd

def get_data(url):

? ? print(url)

? ? html = rq.get(url).content.decode("utf-8")

? ? soup = BeautifulSoup(html,"lxml")

? ? divItems = soup.find_all("div","item")

? ? for item in divItems:

? ? ? ? name = item.find('span',{'class':'title'}).text

? ? ? ? rating_num = item.find('span',{'class':'rating_num'}).text

? ? ? ? number = item.find('em').text

? ? ? ? imgUrl = item.find("img").attrs['src']

? ? ? ? print("----------->")

? ? ? ? print("number:"+number)

? ? ? ? numbers.append(number)

? ? ? ? print("name:"+name)

? ? ? ? names.append(name)

? ? ? ? print("rating_num:"+rating_num)

? ? ? ? rating_nums.append(rating_num)

? ? ? ? print("imgUrl:"+imgUrl)

? ? ? ? imgUrls.append(imgUrl)

? ? ? ? print("----------->")

data_df = pd.DataFrame()

numbers = []

names = []

rating_nums = []

imgUrls = []

for num in range(0,10):

? ? get_data("https://movie.douban.com/top250?start={}&filter=".format(int(num)*25))

data_df["序列"] = numbers

data_df["名稱"] = names

data_df["評分"] = rating_nums

data_df["海報"] = imgUrls

writer = pd.ExcelWriter('movie_top250.xlsx')

data_df.to_excel(writer, 'page_1', float_format='%.5f')? # float_format 控制精度

writer.save()

復(fù)制代碼

當(dāng)然,提前需要install的模塊 requests

BeautifulSoup4

pandas

openpyxl

lxml(BeautifulSoup4 的解析器)

結(jié)束。


本文章素材來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系刪除。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容