<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          十分鐘入門 Python 教程

          共 8420字,需瀏覽 17分鐘

           ·

          2021-01-23 18:12

          題記

          去年和 amile 童鞋定了個小目標,決定帶著點興趣和熱情,順著全民學(xué) Python 的熱潮,隨波逐流。奈何二零二零年是真的魔幻,唉,生活有你讀不懂的詩,還有到不了的遠方,我把那一年的辛酸過往,閹割成了一首詩。“生活似一杯苦茶,往事如逝水一般,邂逅一縷禪香,無數(shù)個赤夜里,抬頭望見新月,繁星點點。“,好像還可以再閹割下,就變成了“苦茶,逝水,禪香,赤夜,新月,繁星”六個意象。而今,擠擠時間把這件事進行下去吧。。。。。。

          準備

          本文參考的教材是《Python 教程:從入門到實踐》,這本書比較基礎(chǔ),對沒有編程經(jīng)驗的讀者異常友好,所以本教程適用于對剛剛開始學(xué)或者沒有編程經(jīng)驗的讀者。使用jupyter notebook作為學(xué)習(xí)這門語言入門的工具,這玩意好使,免去了初學(xué)者學(xué)習(xí)編輯器的成本,打開網(wǎng)頁編寫 Python 程序,點擊運行即可出結(jié)果,而且它除了可以寫 Python 之外,還支持 Markdown 語法,所以很適合寫教程和筆記的。關(guān)于它的安裝教程,可以看下這篇文章:https://zhengjiangtao.cn/a2python/base/env.html

          給它一個特寫。


          那個經(jīng)典的“Hello World”

          在 Python 語言中,我們可以通過print函數(shù)去打印相關(guān)的信息,比如說在 Python3 中我們要打印出一個Hello World,可以這樣寫。

          #?encoding:?utf-8

          if?__name__?==?'__main__':

          ????print('Hello?World')

          基礎(chǔ)知識梳理

          如樓上的 Hello World 所示,在 Python 語言中,末尾是不用加分號的。Python 是一門解釋型,它并不像 C、C++這樣,需要有個編譯的過程,將代碼編譯成機器碼(轉(zhuǎn)換成計算機可識別的二進制指令)然后運行,在編譯過程中要確定變量的類型,通不過編譯就不能運行。Python 語言需要一個解釋器,邊解釋邊運行,所以在定義變量的時候并不需要指出其是什么類型,遵循變量名 = 變量值這種方式即可,關(guān)于變量名的規(guī)范和其它語言也差不多,這里就不展開贅述了,后面的相關(guān)類型的變量賦值本身是沒有什么好講的,但是 Python 語言有意思就有意思在它的庫多,你不用洋洋灑灑寫很多,你只要庫調(diào)的好,代碼是非常簡潔的。

          字符串

          比如說我們要定義一個字符串變量名nameataola,就可以寫作name = 'ataola'。如果說字符串很長,我們期望原樣輸出,那么可以這樣寫。

          long_str?=?'''The?Zen?of?Python,?by?Tim?Peters

          Beautiful?is?better?than?ugly.
          Explicit?is?better?than?implicit.
          Simple?is?better?than?complex.
          Complex?is?better?than?complicated.
          Flat?is?better?than?nested.
          Sparse?is?better?than?dense.
          Readability?counts.
          Special?cases?aren't?special?enough?to?break?the?rules.
          Although?practicality?beats?purity.
          Errors?should?never?pass?silently.
          Unless?explicitly?silenced.
          In?the?face?of?ambiguity,?refuse?the?temptation?to?guess.
          There?should?be?one--?and?preferably?only?one?--obvious?way?to?do?it.
          Although?that?way?may?not?be?obvious?at?first?unless?you're?Dutch.
          Now?is?better?than?never.
          Although?never?is?often?better?than?*right*?now.
          If?the?implementation?is?hard?to?explain,?it's?a?bad?idea.
          If?the?implementation?is?easy?to?explain,?it?may?be?a?good?idea.
          Namespaces?are?one?honking?great?idea?--?let's?do?more?of?those!'''


          print(long_str)

          注意: 變量的命名不能跟系統(tǒng)的函數(shù)名,或者保留字沖突,比如這里你寫作str = 'what's wrong with you ?'就很不好,因為str是系統(tǒng)函數(shù),它可以把變量轉(zhuǎn)成字符串類型。例如樓下這個例子,如果不用str函數(shù)將整型變量age轉(zhuǎn)換成字符串類型的話,就會出現(xiàn)運行出錯,因為他們不是一個類型的變量。

          age?=?24
          msg=?"i?am?"?+?str(age)?+?"?year?old"
          print(msg)

          一些常用的字符串 API

          • title: 首字母大寫

          • upper: 大寫

          • lower: 小寫

          • strip: 去空

          • lstrip: 左邊去空

          • rstrip: 右邊去空

          • split: 字符串轉(zhuǎn)列表

          • count: 統(tǒng)計字符出現(xiàn)的次數(shù)

          例子 1

          代碼:

          _str?=?'hello?world'
          print('首字母大寫:',?_str.title())
          print('大寫:',?_str.upper())
          print('小寫:',?_str.lower())

          輸出:

          首字母大寫:?Hello?World
          大寫:HELLO WORLD
          小寫:hello world
          例子 2

          代碼:

          _str?=?'?happy?everyday??'
          print('|'?+?_str?+?'|')
          print('|'?+?_str.strip()?+?'|')
          print('|'?+?_str.lstrip()?+?'|')
          print('|'?+?_str.rstrip()?+?'|')
          print('|'?+?_str.lstrip().rstrip()?+?'|')

          輸出:

          |?happy?everyday??|
          |happy?everyday|
          |happy?everyday??|
          |?happy?everyday|
          |happy?everyday|
          例子 3

          代碼:

          bio?=?'day?day?up,?to?be?strong!'
          print(bio.count('day'))
          print(bio.count('up'))

          輸出:

          2
          1

          由例子 2 的最后一行可見 Python 是支持函數(shù)鏈式調(diào)用的。

          整型

          python3 的整型范圍是無限的,所以它特別適合拿來做科學(xué)計算相關(guān)的,因為你不用擔(dān)心它會精度溢出。有意思的是,它允許你用_下劃線表示數(shù)字的分隔符,提高其可讀性,這并不影響其數(shù)值,比如1_000,它和1000是一樣的。

          一些常用處理數(shù)字的 API

          • bin: 轉(zhuǎn)二進制

          • abs: 求絕對值

          • bool: 轉(zhuǎn)布爾值

          • float: 轉(zhuǎn)浮點數(shù)

          • pow: 冪函數(shù)

          • 一些位運算。。。。。。

          例子 4

          代碼:

          print(bin(8))?#?十進制轉(zhuǎn)二進制
          print(abs(-10))?#?絕對值
          print(?1?and?0?==?1?&?0)?#?按位于
          print?((1?or?0)?==?(1?|?0))?#?按位或
          print(~11?==?-12)#?取反(二進制的負數(shù)表示方法:正數(shù)按位取反再加1)
          print(2?^?3?^?2?==?3)?#?異或
          print(8?<1?==16)?#?左移
          print(8?>>?1?==?4)?#?右移
          print(10?%?3?==?1)?#?取余
          print(3?**?2?==?pow(3,?2))?#?次方運算符?和?冪函數(shù)
          print(bool(1)?==?True?)?#?轉(zhuǎn)布爾類型,除0外都是True
          print(bool(0)?==?True?)?#?轉(zhuǎn)布爾類型,除0外都是True
          print(float(100))?#?整數(shù)轉(zhuǎn)浮點

          輸出:

          0b1000
          10
          True
          True
          True
          True
          True
          True
          True
          True
          True
          False
          100.0

          浮點

          為什么0.1 + 0.2 != 0.33 * 0.1 != 0.3, 而是0.30000000000000004?

          我們知道計算機只能識別二進制,所以浮點數(shù)會被轉(zhuǎn)換成二進制,0.1 轉(zhuǎn)成二進制是0.0001100110011001100110011001100110011001100110011001101, 0.2 轉(zhuǎn)成二進制是0.001100110011001100110011001100110011001100110011001101,相加得到的結(jié)果是0.0100110011001100110011001100110011001100110011001101. 簡單的說就是像 0.1 這種無法被二進制完整表示。

          這里我們可以通過round(num, digits)去使結(jié)果符合預(yù)期,例如print(round(0.1 + 0.2, 1)),就能得到 0.3

          注意:

          十進制整數(shù)轉(zhuǎn)二進制方法:除 2 取余;十進制小數(shù)轉(zhuǎn)二進制方法:乘 2 除整

          布爾值

          在 Python 中,用True表示真,用False表示假,注意這里是區(qū)分大小寫的。

          我們來看下面這個例子

          例子 5

          代碼:

          print(1?==?True)?#?True
          print(0?==?False)?#?False
          print(''?==?True)?#?False
          print('?'?==?True)?#?False
          print(''?==?False)?#?False
          print('?'?==?False)?#?False
          print(bool(''))?#?False
          print(bool('?'))?#?True

          可以看到在 Python 中,數(shù)字 0 也可以表示 False,其它數(shù)字可以表示 True, 而字符串它不能表示成真或假,但是可以通過bool函數(shù)將其轉(zhuǎn)回成真假

          列表

          列表是一系列按特定順序排列的元素組成,類似于 Javascript 中的數(shù)組。值得一提的是,在列表訪問的時候,它的索引下標可以為負數(shù),例如a[-1]就是表示列表 a 中的倒數(shù)第一個元素

          一些常用的列表 API

          • sort: 排序

          • reverse: 反轉(zhuǎn)

          • len: 長度

          • append: 從列表末尾插入元素

          • insert: 列表任意位置插入元素

          • pop: 從列表末尾彈出元素

          • remove: 從右往左移除第一個遇到的目標元素

          我們一起來看下面這個例子,

          例子 5

          代碼:

          season??=?['spring',?'summer',?'autumn',?'winter']
          print(season)
          season.sort()
          print(season)
          season.sort(reverse=True)
          print(season)
          print(sorted(season))
          print(season)
          season.reverse()
          print(season)
          print(len(season))

          輸出:

          ['spring',?'summer',?'autumn',?'winter']
          ['autumn',?'spring',?'summer',?'winter']
          ['winter',?'summer',?'spring',?'autumn']
          ['autumn',?'spring',?'summer',?'winter']
          ['winter',?'summer',?'spring',?'autumn']
          ['autumn',?'spring',?'summer',?'winter']
          4

          從樓上的例子,我們不難發(fā)現(xiàn),通過list.sort(),這種方式它會改變列表的原值,而且在函數(shù)中可以傳一個參數(shù)reverse來表示是順著排序還是倒著排序。

          我們再來看一個例子

          例子 6

          代碼:

          arr?=?[1,?2,?3,?4,?5]
          print(arr[0])
          print(arr[-1])
          arr.append(6)
          print(arr)
          arr.insert(4,?4.5)
          print(arr)
          del?arr[4]
          print(arr)
          arr.pop()
          print(arr)
          arr.pop(2)
          print(arr)
          arr.remove(4)
          print(arr)

          輸出:

          1
          5
          [1,?2,?3,?4,?5,?6]
          [1,?2,?3,?4,?4.5,?5,?6]
          [1,?2,?3,?4,?5,?6]
          [1,?2,?3,?4,?5]
          [1,?2,?4,?5]
          [1,?2,?5]

          樓上的例子首先我定義了一個列表arr = [1, 2, 3, 4, 5],然后我去訪問了它的第一個元素和最后一個元素,接著我通過append函數(shù)在列表后面追加了6,之后我又通過insert函數(shù)在第五個元素的位置插入了4.5,緊接著我用del又把它刪除了,然后我通過調(diào)用pop彈出了列表最后的元素,之后我又給它穿了個參數(shù)2,表示將第三個元素彈出,最后我通過remove函數(shù)去刪除了從列表最后往前找到的第一個目標元素。

          字典

          字典是一系列的鍵值對,類似于 JavaScript 中的對象。我們還是以具體的示例來看下。

          例子 7

          代碼:

          user?={?'name':?'ataola',?'age':?24,?'sex':?'男'?}
          print(user)
          print('Hello?',?user['name'])

          輸出:

          {'name':?'ataola',?'age':?24,?'sex':?'男'}
          Hello??ataola

          這里我們定義了一個用戶信息的字典,然后試著把它打印出來,通過鍵值對的鍵可以訪問它的值,接著我們試著構(gòu)造字符串去試著訪問它。

          例子 8

          代碼:

          for?key,?value?in?user.items():
          ????print(key,?value)

          輸出:

          name?ataola
          age?24
          sex?男

          上面這個例子就是遍歷字典的鍵值對的方法。

          如果我只是想遍歷它的鍵或者值呢?通過keys()表示鍵,通過values()表示值。

          代碼:

          for?key?in?user.keys():
          ????print(key)

          輸出:

          name
          age
          sex

          代碼:

          for?value?in?user.values():
          ????print(value)

          輸出:

          ataola
          24

          這里再進一步思考下,如果說我遍歷的值有很多重復(fù)呢?我怎么讓它不重復(fù)呢?嗯,對,答案就是集合去重。當(dāng)然,這里答案不唯一。

          代碼:

          favorite_language?=?{?'alice':?'JAVA',?'Bob':?'C++',?'ataola':?'Javascript',?'daming':?'Javascript',?'wuyifan':?'Javascript'?}
          for?value?in?set(favorite_language.values()):
          ????print(value)

          輸出:

          JAVA
          Javascript
          C++

          循環(huán)和判斷

          這里把循環(huán)和判斷放在一起講吧,循環(huán)在大多數(shù)編程語言里都差不多,不外乎for循環(huán)和while循環(huán),條件判斷也都類似,不外乎if,else這種。

          while 循環(huán)

          代碼:

          while?message?!=?'quit':
          ????message?=?input('please?input?something:')
          ????print(message)

          輸出:

          please?input?something:11
          11
          please?input?something:22
          22
          please?input?something:33
          33
          please?input?something:quit
          quit

          這個程序是這樣子的,當(dāng)用戶輸入quit的時候,那么我就退出這個程序,不然我就原樣輸出。

          條件判斷

          代碼:

          num?=?input('please?input?a?number:?')
          num?=?int(num)
          if?num?>?10:
          ????print('big')
          elif?num?<=?10?and?num?>?5:
          ????print('normal')
          else:
          ????print('small')

          輸出:

          please?input?a?number:?8
          normal

          這個程序是這樣子的,提示用戶輸入一個數(shù),然后判斷這個數(shù)的大小,通過if,elif,else來判斷輸入的數(shù)是大還是小,抑或是正常,這就是個例子,本身沒有什么意義。

          for 循環(huán)

          代碼:

          numbers?=?list(range(1,?20))
          for?num?in?numbers:
          ????if?num?%?2?==?0:
          ????????print(num,?'是個偶數(shù)')
          ????else:
          ????????print(num,?'是個奇數(shù)')
          print(numbers)

          輸出:

          1?是個奇數(shù)
          2?是個偶數(shù)
          3?是個奇數(shù)
          4?是個偶數(shù)
          5?是個奇數(shù)
          6?是個偶數(shù)
          7?是個奇數(shù)
          8?是個偶數(shù)
          9?是個奇數(shù)
          10?是個偶數(shù)
          11?是個奇數(shù)
          12?是個偶數(shù)
          13?是個奇數(shù)
          14?是個偶數(shù)
          15?是個奇數(shù)
          16?是個偶數(shù)
          17?是個奇數(shù)
          18?是個偶數(shù)
          19?是個奇數(shù)
          [1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15,?16,?17,?18,?19]

          樓上的這個例子,我們用了一個 for 循環(huán)遍歷了列表 numbers 里面的項,然后結(jié)合 if 判斷這個項是奇數(shù)還是偶數(shù)。

          函數(shù)

          函數(shù)本質(zhì)是帶名字的代碼段,在 python 中我們可以通過def去定義一個函數(shù)。

          代碼:

          def?sayHello(name?=?'zjt'):
          ????return?'hello?'?+?name

          for?i?in?range(1,?10):
          ????if?i?%?2?==?0:
          ????????print(i,?sayHello())
          ????else:
          ????????print(i,?sayHello('ataola'))

          輸出

          1?hello?ataola
          2?hello?zjt
          3?hello?ataola
          4?hello?zjt
          5?hello?ataola
          6?hello?zjt
          7?hello?ataola
          8?hello?zjt
          9?hello?ataola

          上面這個例子中我們定義了一個函數(shù)sayHello,然后給函數(shù)的形參一個初始值,如果調(diào)用函數(shù)沒有傳的話就取默認值,這個例子本身沒有什么意義,就作為演示意思下。

          講到類,就不得不提面向?qū)ο罅耍约胺庋b繼承多態(tài)啦。這里我們作為入門環(huán)節(jié),簡單地用一個例子感受下。

          我們先創(chuàng)建一個類Person,然后我們再創(chuàng)建一個類Robot去繼承Person.

          代碼:

          class?Person():
          ????"""?人類?"""
          ????def?__init__(self,?name,?age):
          ????????self.name?=?name
          ????????self.age?=?age
          ????def?speak(self):
          ????????print(self.name.title(),?'?is?speaking.')

          class?Robot(Person):
          ????def?__init__(self,?name,?age):
          ????????super().__init__(name,?age)


          ataola?=?Person('zheng?jiangtao',?24)
          ataola.speak()
          robot?=?Robot('xiao?ai',?3)
          robot.speak()

          輸出:

          Zheng?Jiangtao??is?speaking.
          Xiao?Ai??is?speaking.

          我們實例化了一個 Person 類 ataola,然后調(diào)用了 speak 方法,我們還實例化了一個 Robot 類,然后調(diào)用了其繼承 Person 類的 speak 方法。

          說明

          本文首發(fā)于 GitHub 倉庫https://github.com/ataola/a2python,線上閱讀地址:https://zhengjiangtao.cn/a2python/,轉(zhuǎn)載請注明出處,謝謝!


          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  激情五月在线 | 国产一级a毛一级a看免费视奥美 | 久久国产精品波多野结衣AV | 国产精品呻吟AV无码 | 影音先锋三级网站 |