愚公系列2021年12月 Python教學課程 08-基本語法

      網友投稿 659 2022-05-30

      一、 輸入和輸出

      無論是從我們一開始的“hello world”,還是前面章節的里各種例子,基本都是些“自

      說自話”。只有能夠接收用戶輸入,根據輸入動態生成結果,并輸出到屏幕上展示出來,

      才算一個較為完整的簡單程序。

      1. input 輸入函數

      獲取用戶輸入,保存成一個字符串。哪怕你輸入的是個數字 1,返回給你的只會是字符

      串“1”,而不是 整數 1。

      示例:

      >>> inp = input("please input your name: ") please input your name: jack >>> inp 'jack' >>> type(inp) >>> age = input("please input your age: ") please input your age: 18 >>> age '18' >>> type(age) >>> a = input("請輸入一個字符:") 請輸入一個字符: >>> a >>> a = input("請輸入一個字符:") 請輸入一個字符: 前后帶有空白 >>> a

      ’ 前后帶有空白 ’

      從上面例子的展示中,我們不難發現,input 函數將我們的輸入原樣不動的返回給了我

      們,并包裝成一個字符串。這肯定是不行的,會帶來很多問題,所以通常我們都需要對

      用戶輸入進行處理和判定。

      比如對空輸入進行處理:

      inp = input("請輸入你的姓名: ") if inp == "": inp = input("姓名不能為空,請重新輸入: ")

      比如將字符串轉換成數字類型:

      age = input("請輸入你的年齡: ") age = int(age) # 將字符串轉化為整數 if age > 18: print("你已經成年!") else: print("未成年?。?!")

      去除開頭的空白 lstrip,去除結尾的空白 rstrip 以及去除兩端的空白 strip

      inp = input("請輸入你的姓名: ") inp = inp.strip() # strip 的用法在字符串數據類型有講述 print(inp)

      判斷輸入的字符類型

      前面我們在將字符串轉化為整數用的是 int()函數,這種方式有危險的,看下面的例子:

      >>> s = "123" >>> a = int(s) >>> a 123 >>> s = "something" >>> a = int(s) Traceback (most recent call last): File "", line 1, in a = int(s) ValueError: invalid literal for int() with base 10: 'something'

      對于形如“123”, “283242”的字符串,轉化沒問題,但是對于包含字符、特殊字

      符的字符串就沒辦法轉化了,會彈出異常錯誤。所以在使用 int 函數之前,要先對輸入

      進行判斷。我們修改一下上面的例子:

      age = input("請輸入你的年齡: ") if age.isdigit(): # 使用 isdigit 函數判斷輸入是否全是數字格式 age = int(age) # 將字符串轉化為整數 print("你的年齡是: ", age) else: print("輸入不合法!")

      input 函數有時可以巧妙地用于阻塞或暫停程序

      print("程序前面部分執行完畢......") input("請按回車繼續......") # 在這里程序會暫停,等待你的回車動作 print("繼續執行程序的后面部分......")

      2,print 輸出函數

      print 函數我們其實已經不陌生了,前前后后也用了不少次,多少有點經驗,明白點它

      的用法了。

      print 函數用于將內容格式化顯示在標準輸出上,主要指的是屏幕顯示器。

      print 可以接受多個字符串,字符串類型的變量或者可 print 的對象。每個字符串用逗號

      “,”隔開,連成一串輸出。print 會依次打印每個字符串,同時,每遇到一個逗號“,”

      就輸出一個空格。

      >>> a = "i am" >>> b = "student" >>> print(a,"a" , b) i am a student # 自動以空格分隔 >>> print(a+"a"+b) i amastudent # 無分隔

      對于形如 print(a+“a”+b)的語句,其實是先計算 a+“a”+b 的值,然后再通過 print 打印

      它。print()會自動執行內部的語句,輸出想要的結果。

      我們看一下 print 函數的原型:print(self, *args, sep=’ ‘, end=’\n’, file=None)

      sep 參數: 分隔的符號,默認是一個空格;

      end 參數: 打印后的結束方式,默認為換行符\n。如果,設置 end=’’,則可以不換行,

      讓 print 在一行內連續打印?;钣?print 的參數,可以實現靈活的打印控制。

      >>> a = "i am" >>> b = "student" >>> print(a,"a" , b, sep="*") i am*a*student

      3.print 格式化輸出

      在 Python2.6 以后,有兩種格式化輸出的方式。

      一種就是類似 C 語言的 printf 的%百分號格式化輸出,也是 Python 最基礎最常用的格

      式化輸出方式。另一種就是 str.format()的方式,在前面的章節已經介紹過。

      幾個的例子回顧一下:

      s = "i am %s" % "jack" s = "i am %s age %d" % ("jack", 18) s = "i am %(name)s age %(age)d" % {"name": "jack", "age": 18} s = "percent %.2f" % 99.97623 s = "i am %(pp).2f" % {"pp": 123.425556, } s = "i am %.2f %%" % 123.425556

      二、賦值語句

      賦值語句用于把對象賦給一個名稱,基本形式是

      賦值語句的目標 = 要賦值的對象

      左側的目標可以是 變量名或對象元素,右側的對象可以是任何會計算得到的對

      象的表達式

      賦值語句的特性:

      Python 中的變量賦值不需要類型聲明

      賦值語句建立對象引用值

      建立對象的引用值,而不是復制對象。python 變量更像是指針,而不是數據存

      儲區域

      變量名在首次賦值時會被創建

      在首次將值賦值給變量時創建其變量名

      變量名在引用前必須先賦值

      使用尚未進行賦值的變量名是一種錯誤

      示例:

      spam = ‘Spam’ spam, ham = ‘yum’, ‘YUM’ #按照位置把右邊的對象和左邊的目標從左至右相配對 [spam, ham] = [‘yum’, ‘YUM’] a, b, c, d = ‘spam’ a, *b = ‘spam’ #a=s, b=pam 一個列表賦給了帶星號的名稱,該列表收集了序列中沒有賦值給其他名稱的所有 項。 a, *b, c = ‘spam’ # a=s, c = m, b = pa spam = ham = ‘lunch’ #多目標賦值 spam 和 ham 都是字符串 lunch 的引用 spams += 42 #增強賦值運算 spams = spams + 42 str = ‘spam’ a, b, c = str # error, 左右元素個數不匹配 a, b, c = str[0:3] # correct

      三、注釋

      我們寫的程序里,不光有代碼,還要有很多注釋。注釋有說明性質的、幫助性質的,它

      們在代碼執行過程中相當于不存在,透明的,不參與任何工作。但在代碼維護、解釋、

      測試等等方面,發揮著不可或缺的重要作用。每一位程序員都要盡量寫出高質量的注釋。

      1. 單行注釋

      Python 中,以符號“#”為單行注釋的開始,從它往后到本行的末尾,都是注釋內容。

      #!/usr/bin/python3 # 下面這個方法的作用是….. # 第一個注釋 # 我是單行注釋 # 這是一個空的函數,它什么都不干。本條注釋也是句廢話。 def main(): pass # pass 表示占位,什么都不做

      2. 多行注釋

      多行注釋用三個單引號 ‘’’ 或者三個雙引號 “”" 將注釋括起來,例如:

      單引號(’’’)

      ''' 這是多行注釋,用三個單引號 這是多行注釋,用三個單引號 這是多行注釋,用三個單引號 ''' print("Hello, World!")

      雙引號(""")

      """ 這是多行注釋,用三個雙引號 這是多行注釋,用三個雙引號 這是多行注釋,用三個雙引號 """ print("Hello, World!")

      3. 注釋文檔

      在某些特定的位置,用三引號包括起來的部分,也被當做注釋。但是,這種注釋有專門

      的作用,用于為__doc__提供文檔內容,這些內容可以通過現成的工具,自動收集起來,

      形成幫助文檔。比如,函數和類的說明文檔:

      def func(a, b): """ 這個是函數的說明文檔。 :param a: 加數 :param b: 加數 :return: 和 """ return a + b class Foo: """ 這個類初始化了一個 age 變量 """ def __init__(self, age): self.age = age

      需要強調的是這類注釋必須緊跟在定義體下面,不能在任意位置。

      四、 語句與縮進

      語句:在代碼中,能夠完整表達某個意思、操作或者邏輯的最短代碼,被稱為語句。語

      句通常不超過一行,超過一行的稱為多行語句。

      像下面的都稱為語句:

      a = apple from . import modles print("haha") lis.append(item)

      Python 的標準語句不需要使用分號或逗號來表示語句結束,簡簡單單的換個行就表示

      本語句已經結束,下一句開始。

      代碼塊:為完成某一特定功能而聯系在一起的一組語句構成一個代碼塊。有判斷、循環、

      【愚公系列】2021年12月 Python教學課程 08-基本語法

      函數、類等各種代碼塊。代碼塊的首行通常以關鍵字開始,以冒號( : )結束。比如:

      # 這是一個判斷流程代碼塊 if expression : pass elif expression : pass else : pass

      又比如:

      # 這是一個類代碼塊 class Foo: def __init__(self, name, age): self.name = name self.age = age def get_name(self): return self.name # 這是一個函數代碼塊 def func(a, b): summer = a+b return summer*2

      Python 最具特色的語法就是使用縮進來表示代碼塊,不需要使用大括號({})。

      縮進的空格數是可變的,但是同一個代碼塊的語句必須包含相同的縮進空格數。

      如果縮進數的空格數不一致,會拋出縮進異常(請記住 IndentationError 這個異常名!

      新手會經常和它做朋友):

      File "test.py", line 6 print ("False") # 縮進不一致,會導致運行錯誤 ^ IndentationError: unindent does not match any outer indentation level

      PEP8(Python 官方的代碼規范):建議使用四個空格作為縮進!在文本編輯器中,需

      要設置把 Tab 自動轉換為 4 個空格,確保不混用 Tab 和空格。在 Pycharm 中:tab 鍵

      被自動轉換成 4 個空格的縮進。

      那么怎么才是正確的縮進方式呢?

      所有的普通語句,頂左開始編寫,不需要縮進

      所有的語句塊,首行不用縮進,從冒號結束后開始下一行,都要縮進

      直到該語句塊結束,就退回縮進,表示當前塊已結束

      語句塊可以嵌套,所以縮進也可以嵌套

      比如,我們寫一個 if/else 的判斷控制語句塊:

      首先是,第 1 句,不需要縮進:

      if i > 10:

      然后是第 2 句,這時已經進入 if 內部了,需要縮進:

      if i > 10: i = i + 10 # 左邊有 4 個空格

      接下來是第 3 句,因為還在 if 內部,所以保持和第二句一樣的縮進

      if i > 10: i = i + 10 # 左邊有 4 個空格 print(i) # 左邊有 4 個空格

      第 4 句,我們 if 分支走完了,要走 else 分支,那么 if 語句塊算結束了,縮進要回退。

      if i > 10: i = i + 10 # 左邊有 4 個空格 print(i) # 左邊有 4 個空格 else:

      第 5 句,進入 else 語句塊了,要縮進 4 個空格:

      if i > 10: i = i + 10 # 左邊有 4 個空格 print(i) # 左邊有 4 個空格 else: i = i - 10 # 左邊有 4 個空格

      第 6 句,else 分支也走完了,整個 if/else 流程完畢,下面是別的代碼了,那么 else 分

      支的縮進也要退回。

      if i > 10: i = i + 10 # 左邊有 4 個空格 print(i) # 左邊有 4 個空格 else: i = i - 10 # 左邊有 4 個空格 print("apple") # 縮進回退了,這里已經和 if、else 沒什么關系了。

      再看一個縮進嵌套的例子,以兩個 for 循環嵌套為例:

      for i in range(10): for k in range(10): # 同樣也是 for 循環,由于嵌套在另一個 for 內部,需要縮進 if k != i: # 雙重循環內的 if,需要 2 次縮進,也就是頂左開始 8 個空格 print(k) # 又嵌套了一個 if 語句塊,再次縮進 4 個空格,共計 12 個 else: # if 結束,回退 4 個,開始 else 分支 print(i+k) # 又增加縮進 print(i) # 這次不但 else 結束了,連內部的 for 也結束了,回退 8 個空格

      剛開始,縮進的語法可能讓你搞不清楚,何時縮進,何時回退,該縮進幾個空格。但多

      寫寫,多看看,很快就能掌握,并不再犯錯。Python 的縮進語法設計有別與其它所有

      的語言,是獨家特色,一直爭論很大,喜歡的非常喜歡,覺得簡潔明了,節省了不少功

      夫,而且強制代碼整齊。不喜歡的,覺得縮來縮去,頭都暈了,容易犯語法錯誤,并且

      不能使用規格化工具。

      同一行寫多條語句:

      前面我們說了,Python 一行通常就是一條語句,一條語句通常也不會超過一行。其實,

      從語法層面,Python 并沒有完全禁止在一行中使用多條語句,也可以使用分號實現多

      條語句在一行,比如:

      import sys; x = ‘abc'; y=1

      上面這一行其實包含 3 條語句,用分號分隔了,但是強烈建議不要這么做,這樣會導致

      代碼閱讀困難、維護耗時,容易出錯,老老實實地用三行來表示,不但更優雅,還增加

      了代碼行數,可以跟老板說今天多寫了 2 行,^_^。

      多行語句: 前面是多條語句在一行,但如果一條語句實在太長,也是可以占用多行的,

      可以使用反斜杠()來實現多行語句:

      string = "i love this country,"\ "because it is very beautiful!"\ "how do you think about it?" \ "Do you like it too?"

      在 [], {}, 或 () 中的多行語句,可以不需要使用反斜杠(),直接回車,接著寫。例如:

      result = subprocess.Popen("ipconfig /all", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, check=True)

      建議:每一行的字符不超過 79 個。該換行時咱就換行!

      五、空白字符與空白行

      空白行、空白字符與代碼縮進不同,并不是 Python 語法的一部分??招谢蛘呖瞻鬃址?/p>

      會被當做空氣一樣的忽略。連續的空行或空白字符和單獨的空白行幾字符沒有區別。書

      寫時不插入空白行或空白字符,Python 解釋器運行也不會出錯。但是空白的作用在于

      分隔兩段不同功能或含義的代碼,便于日后代碼的維護或重構。

      PEP8 對于空行留白有專門的建議。

      函數之間或類的方法之間用空行分隔,表示一段新的代碼的開始。類和函數入口之間也

      用一行空行分隔,以突出函數入口的開始。

      變量賦值的時候等號左右各給一個空白。逗號后面跟一個空白。

      六、pass 語句

      pass 語句是占位語句,它什么都不做,只是為了保證語法的正確性而寫。以下場景中,

      可以使用 pass 語句:

      當你不知道后面的代碼怎么寫的時候

      當你不需要寫代碼細節的時候

      當語法必須,又沒有實際內容可寫的時候

      其它的一些你覺得需要的場景

      例如:

      # 我只想說明這個 func 函數需要三個參數,具體執行什么并不重要 # 但是函數體內如果什么都沒有,會出現語法錯誤 # 這個時候,pass 就是最好的選擇。 def func(a,b,c): pass

      七、報錯信息

      現在,我們已經開始寫一些簡單的 Python 代碼和語句了,犯錯是免不了的,Python 給

      我們提供了很全面細致的錯誤調用棧信息,幫助我們查找錯誤。以下面的代碼為例(我

      額外給包括空行在內的每一行添加了行號信息):

      def foo(s): #1 return 10 / int(s) #2 #3 def bar(s): #4 return foo(s) * 2 #5 #6 def main(): #7 bar('0') #8 #9 main() #10

      運行代碼后,會彈出如下的錯誤:

      Traceback (most recent call last): File "F:/Python/pycharm/201705/1.py", line 10, in main() File "F:/Python/pycharm/201705/1.py", line 8, in main bar('0') File "F:/Python/pycharm/201705/1.py", line 5, in bar return foo(s) * 2 File "F:/Python/pycharm/201705/1.py", line 2, in foo return 10 / int(s) ZeroDivisionError: division by zero

      這些信息就是錯誤提示。我們需要從上往下讀,英文看起來很復雜,其實很易懂。

      Traceback…表示追蹤錯誤開始,說在某個位置的 1.py 文件的第 10 行中的 main 這個函

      數出了問題。那么問題出在哪呢?是 1.py 文件中的第 8 行的 bar 函數調用出了問題,

      那么出什么問題呢?還沒找到根子,又說在第 5 行,第 2 行調用出了問題,然后最終發

      現是 return 10 / int(s)這行語句的問題。問題是什么,發生了除零錯誤ZeroDivisionError是一個除零異常。到這里,我們恍然大悟,我讓 10 除 0 了,所以出現錯誤了,那么就

      知道怎么改了。

      其實查找錯誤,排除錯誤就是這么簡單,只是需要你耐心的一行行地查看錯誤調用棧,再根據最后的錯誤類型,就可以判斷錯誤的發生原因并修改錯誤,沒有想象中的那么復雜。

      5G教育 Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:深度學習核心技術精講100篇(二十九)-基于內容和上下文的音樂推薦
      下一篇:華為云市場-Oracle RAC怎么玩?
      相關文章
      亚洲欧美日韩中文无线码 | 亚洲AV无码一区二区三区系列| 亚洲中文字幕一二三四区苍井空 | 亚洲国产区男人本色在线观看| 亚洲精品在线播放| 亚洲av永久无码精品网站| 亚洲精品高清国产一线久久| 亚洲男人第一无码aⅴ网站| 亚洲av区一区二区三| 一本久久综合亚洲鲁鲁五月天| 亚洲欧洲免费无码| 亚洲精品色播一区二区 | 亚洲国产精品VA在线观看麻豆| 国产亚洲福利精品一区| 亚洲日韩av无码| 久久精品国产69国产精品亚洲| 在线观看国产区亚洲一区成人| ZZIJZZIJ亚洲日本少妇JIZJIZ| 最新国产AV无码专区亚洲| 亚洲乱码日产一区三区| 久久精品国产亚洲香蕉| 亚洲成a人片在线观看中文动漫| 亚洲av不卡一区二区三区| 91在线精品亚洲一区二区| 亚洲综合网美国十次| 亚洲中文无码av永久| 亚洲欧洲日韩极速播放| 亚洲日产乱码一二三区别 | 亚洲欧美中文日韩视频| 色噜噜噜噜亚洲第一| 亚洲第一福利网站在线观看| 相泽亚洲一区中文字幕| 久久久久亚洲?V成人无码| 亚洲人成网站在线播放vr | 国产AV无码专区亚洲AV琪琪| 亚洲精品成人网久久久久久| 国产亚洲福利精品一区| 亚洲精品日韩专区silk| 亚洲熟妇无码一区二区三区 | 亚洲AV无码一区二区三区鸳鸯影院| MM131亚洲国产美女久久|