python 3.10,PYTOHN1.day14

 2023-10-05 阅读 30 评论 0

摘要:day13回顧 自定義模塊?? 文件名: 標識符.py??????? hello.py?? 自定義模塊內的全局變量將成為此模塊的屬性???? 函數, 數據, 類?? 模塊的搜索順序:???? 1. 內建模塊???? 2. 當前工作目錄???? 3. sys.path提供的路徑?? ?? 編譯過程???? .py?? ----> .pyc? ----> python3

day13回顧
自定義模塊
?? 文件名: 標識符.py
??????? hello.py
?? 自定義模塊內的全局變量將成為此模塊的屬性
???? 函數, 數據, 類
?? 模塊的搜索順序:
???? 1. 內建模塊
???? 2. 當前工作目錄
???? 3. sys.path提供的路徑
??
?? 編譯過程
???? .py?? ----> .pyc? ----> python3

? 模塊的屬性:
???? __doc__ 屬性
??????? 綁定文檔字符串
???? __file__ 屬性
??????? 綁定當前模塊文件所在的路徑
???? __name__ 屬性
??????? 綁定模塊名(主模塊此屬性綁定'__main__')

? __all__ 列表
???? __all__ = ['name1', 'name2', ...]
???? 限制from import * 語句只導入此列內的屬性

? 隱藏屬性:
???? 以下劃線(_) 開頭的全局變量是隱藏屬性
??????? 限制from import * 語句的導入


??? 以文件夾形式進行管理模塊的方式

python 3.10,導入:
??? import 語句
??? from import 語句
??? from import * 語句

?? 如 :
????? import mypack.games.contra as contra
????? from mypack.games.contra import play
????? from mypack.games.contra import *

? 搜索順序
????? 1. 當前工作目錄
????? 2. sys.path提供的路徑

__init__.py
??? 編寫包的內容

__init__.py 里 __all__ 列表
??? 記錄當用from import * 導入時,導入哪兒些子包或模塊

包的相對導入:
?? from ..menu import show_menu
?? from ..office.word import save
?? from .games import *

python module of the week、隨機模塊 random 模塊
???



day14 筆記

異常(基礎)? exception
?? 什么是錯誤
???? 錯誤是指由于邏輯或語法待導致一個程序無法正常執行的問題
?? 錯誤的特點:
????? 無法預知

? 什么是異常
???? 異常是程序出錯時標識的一種狀態
???? 當異常發生時,程序不會再向下執行,而轉去調用此函數的地方待
?????? 處理此錯誤并恢復為正常狀態
?? 作用:
???? 用作信號,通知上層調用者有錯誤產生需要處理

try 語句的兩種語法:
?? try-except 語句
?? try-finally 語句

for i in 5 python,try-except 語句
?? 語法:
???? try:
???????? 可能觸發異常的語句
???? except 錯誤類型1 [as 變量1]:
???????? 異常處理語句1
???? except 錯誤類型2 [as 變量2]:
???????? 異常處理語句2
???? except (錯誤類型3, 錯誤類型4) [as 變量3]:
???????? 異常處理語句3
???? ...
???? except:
???????? 異常處理語句other
???? else:
???????? 未發生異常語句
???? finally:
???????? 最終語句

?? 作用:
???? 償試捕獲異常錯誤,得到異常通知,將程序由異常流程轉為正常流程
???? 并繼續執行
?? 說明:
???? as 子句是用于綁定錯誤對象的變量,可以省略
???? except 子句可以有一個或多個,但至少要有一個
???? else 子句最多只能有一個,也可以省略不寫
???? finally 子句最多只能有一個,也可以省略不寫
?? 示例見:
???? try_except.py

?

  1 
  2 
  3 # 此示例示意try-except語句的語法和用法
  4 
  5 def div_apple(n):
  6     print(n, '個蘋果你想分給幾個人?')
  7     s = input('請輸入人數: ')
  8     cnt = int(s)      # <-- 可能觸發ValueError錯誤
  9     result = n / cnt  # <--可能觸發ZeroDivisionError錯誤
 10     print("每個人分了", result, '個蘋果')
 11 
 12 try:
 13     div_apple(10)
 14     print("分蘋果成功!")
 15 except ValueError:
 16     print("分蘋果失敗!,蘋果被收回!")
 17 except ZeroDivisionError:
 18     print("沒有人來,蘋果自己吃了!")
 19 
 20 print("程序正常退出")
 21 
 22 
 23 
try_except.py
  1 
  2 
  3 # 此示例示意try-except語句的語法和用法
  4 
  5 def div_apple(n):
  6     print(n, '個蘋果你想分給幾個人?')
  7     s = input('請輸入人數: ')
  8     cnt = int(s)      # <-- 可能觸發ValueError錯誤
  9     result = n / cnt  # <--可能觸發ZeroDivisionError錯誤
 10     print("每個人分了", result, '個蘋果')
 11 
 12 try:
 13     div_apple(10)
 14     print("分蘋果成功!")
 15 except ValueError as err:
 16     print("分蘋果失敗!,蘋果被收回!")
 17     print("err=", err)
 18 except ZeroDivisionError:
 19     print("沒有人來,蘋果自己吃了!")
 20 
 21 print("程序正常退出")
 22 
 23 
 24 
2
  1 
  2 
  3 # 此示例示意try-except語句的語法和用法
  4 
  5 def div_apple(n):
  6     print(n, '個蘋果你想分給幾個人?')
  7     s = input('請輸入人數: ')
  8     cnt = int(s)      # <-- 可能觸發ValueError錯誤
  9     result = n / cnt  # <--可能觸發ZeroDivisionError錯誤
 10     print("每個人分了", result, '個蘋果')
 11 
 12 try:
 13     div_apple(10)
 14     print("分蘋果成功!")
 15 except (ValueError, ZeroDivisionError) as err:
 16     print("分蘋果失敗!蘋果被收回!")
 17 
 18 # except ValueError:
 19 #     print("分蘋果失敗!蘋果被收回!")
 20 # except ZeroDivisionError:
 21 #     print("分蘋果失敗!蘋果被收回!")
 22 
 23 print("程序正常退出")
 24 
 25 
 26 
3
5
  1 
  2 
  3 # 此示例示意try-except語句的語法和用法
  4 
  5 def div_apple(n):
  6     print(n, '個蘋果你想分給幾個人?')
  7     s = input('請輸入人數: ')
  8     cnt = int(s)      # <-- 可能觸發ValueError錯誤
  9     result = n / cnt  # <--可能觸發ZeroDivisionError錯誤
 10     print("每個人分了", result, '個蘋果')
 11 
 12 
 13 try:
 14     div_apple(10)
 15     print("分蘋果成功!")
 16 except ValueError:
 17     print("分蘋果失敗!蘋果被收回!")
 18 else:  # 此子句里的語句只有在此try內沒有發生異常時才執行
 19     print("此try語句中沒有發生錯誤,此else子句會執行!")
 20 
 21 
 22 
 23 print("程序正常退出")
 24 
 25 
 26 
6

  1 
  2 
  3 # 此示例示意try-except語句的語法和用法
  4 
  5 def div_apple(n):
  6     print(n, '個蘋果你想分給幾個人?')
  7     s = input('請輸入人數: ')
  8     cnt = int(s)      # <-- 可能觸發ValueError錯誤
  9     result = n / cnt  # <--可能觸發ZeroDivisionError錯誤
 10     print("每個人分了", result, '個蘋果')
 11 
 12 
 13 try:
 14     div_apple(10)
 15     print("分蘋果成功!")
 16 except ValueError:
 17     print("分蘋果失敗!蘋果被收回!")
 18 finally:  # 此子句中的語句在結束try語句執行前一定會被執行
 19     print("這是try中的finally 語句,我一定會被執行")
 20 
 21 
 22 
 23 
 24 print("程序正常退出")
 25 
 26 
 27 
 28 
 29 
 30 
 31 
7

練習:
?? 寫一個函數 get_score() 來獲取學生輸入的成績(0~100的整數),
?? 如果輸入出現異常,則此函數返回0,否則返回用戶輸入的成績
???? 如:
???????? def get_score():
???????????? ...? # 此處自己實現
????????


???????? score = get_score()
???????? print("學生的成績是", score)

  1 # 練習:
  2 #   寫一個函數 get_score() 來獲取學生輸入的成績(0~100的整數),
  3 #   如果輸入出現異常,則此函數返回0,否則返回用戶輸入的成績
  4 #     如:
  5 #         def get_score():
  6 #             ...  # 此處自己實現
  7 
  8 #         score = get_score()
  9 #         print("學生的成績是", score)
 10 
 11 
 12 
 13 def get_score():
 14     s = input("請輸入學生成績(0~100): ")
 15     scr = int(s)  # 字符串轉為整數
 16     if scr < 0 or scr > 100:
 17         return 0
 18     return scr
 19 
 20 try:
 21     score = get_score()
 22 except ValueError:
 23     score = 0
 24 
 25 print("學生的成績是", score)
 26 
get_score.py
  1 # 練習:
  2 #   寫一個函數 get_score() 來獲取學生輸入的成績(0~100的整數),
  3 #   如果輸入出現異常,則此函數返回0,否則返回用戶輸入的成績
  4 #     如:
  5 #         def get_score():
  6 #             ...  # 此處自己實現
  7 
  8 #         score = get_score()
  9 #         print("學生的成績是", score)
 10 
 11 
 12 
 13 def get_score():
 14     s = input("請輸入學生成績(0~100): ")
 15     try:
 16         scr = int(s)  # 字符串轉為整數
 17     except ValueError:
 18         return 0
 19     if scr < 0 or scr > 100:
 20         return 0
 21     return scr
 22 
 23 
 24 score = get_score()
 25 
 26 # try:
 27 #     score = get_score()
 28 # except ValueError:
 29 #     score = 0
 30 
 31 print("學生的成績是", score)
 32 
get_score2.py

python3 全部的錯誤類型
?? 參見文檔:
???? python_base_docs_html/python全部的異常類型.html

  1 Python全部的異常類型
  2 錯誤類型	說明
  3 ZeroDivisionError	除(或取模)零 (所有數據類型)
  4 ValueError	傳入無效的參數
  5 AssertionError	斷言語句失敗
  6 StopIteration	迭代器沒有更多的值
  7 IndexError	序列中沒有此索引(index)
  8 IndentationError	縮進錯誤
  9 OSError	輸入/輸出操作失敗
 10 ImportError	導入模塊/對象失敗
 11 NameError	未聲明/初始化對象 (沒有屬性)
 12 AttributeError	對象沒有這個屬性
 13 BaseException	所有異常的基類
 14 SystemExit	解釋器請求退出
 15 KeyboardInterrupt	用戶中斷執行(通常是輸入^C)
 16 Exception	常規錯誤的基類
 17 GeneratorExit	生成器(generator)發生異常來通知退出
 18 StandardError	所有的內建標準異常的基類
 19 ArithmeticError	所有數值計算錯誤的基類
 20 FloatingPointError	浮點計算錯誤
 21 OverflowError	數值運算超出最大限制
 22 EOFError	沒有內建輸入,到達EOF 標記
 23 EnvironmentError	操作系統錯誤的基類
 24 OSError	操作系統錯誤
 25 WindowsError	系統調用失敗
 26 LookupError	無效數據查詢的基類
 27 KeyError	映射中沒有這個鍵
 28 MemoryError	內存溢出錯誤(對于Python 解釋器不是致命的)
 29 UnboundLocalError	訪問未初始化的本地變量
 30 ReferenceError	弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
 31 RuntimeError	一般的運行時錯誤
 32 NotImplementedError	尚未實現的方法
 33 SyntaxError Python	語法錯誤
 34 TabError	Tab 和空格混用
 35 SystemError	一般的解釋器系統錯誤
 36 TypeError	對類型無效的操作
 37 UnicodeError	Unicode 相關的錯誤
 38 UnicodeDecodeError	Unicode 解碼時的錯誤
 39 UnicodeEncodeError	Unicode 編碼時錯誤
 40 UnicodeTranslateError	Unicode 轉換時錯誤
 41 以下為警告類型
 42 Warning	警告的基類
 43 DeprecationWarning	關于被棄用的特征的警告
 44 FutureWarning	關于構造將來語義會有改變的警告
 45 OverflowWarning	舊的關于自動提升為長整型(long)的警告
 46 PendingDeprecationWarning	關于特性將會被廢棄的警告
 47 RuntimeWarning	可疑的運行時行為(runtime behavior)的警告
 48 SyntaxWarning	可疑的語法的警告
 49 UserWarning	用戶代碼生成的警告
異常

? 查看全部的類型,詳見:
???? >>> help(__builtins__)

python online、


try-finally語句
?? 語法:
???? try:
???????? 可能觸發異常的語句
???? finally:
???????? 最終語句

?? 說明:
???? finally 子句不可以省略
???? 一定不存在except子句
?? 作用:
???? 1. 通常用try-finally 語句來做觸發異常時必須要處理的事
??????? 情,無論異常是否發生,finally 子句都會被執行
?? 注:
???? try-finally 語句不會改變程序的(正常/異常) 狀態
?? 示例見:
???? try_finally.py

  1 # try_finally.py
  2 
  3 # 此示例示意try_finally語句的作用
  4 
  5 def fry_egg():
  6     print("打開天燃氣...")
  7     try:
  8         count = int(input("請輸入雞蛋個數: "))
  9         print("完成煎雞蛋,共煎了%d個雞蛋" % count)
 10     finally:
 11         print("關閉天燃氣!")
 12 
 13 try:
 14     fry_egg()
 15 except ValueError:
 16     print("煎蛋過程中出錯!!!!")
 17 
1
  1 # try_finally.py
  2 
  3 # 此示例示意try_finally語句的作用
  4 
  5 def fry_egg():
  6     try:
  7         print("打開天燃氣...")
  8         try:
  9             count = int(input("請輸入雞蛋個數: "))
 10             print("完成煎雞蛋,共煎了%d個雞蛋" % count)
 11         finally:
 12             print("關閉天燃氣!")
 13     except ValueError:
 14         print("煎蛋過程中出錯!!!!")
 15 
 16 
 17 fry_egg()
 18 
2

raise 語句
?? 作用:
???? 觸發一個錯誤,讓程序進入異常狀態
???? 發送錯誤通知給調用者
?? 語法:
???? raise 異常類型
???? 或
???? raise 異常對象
???? 或
???? raise? # 重新觸發上一次異常
?? 示例見:
???? raise.py
???? raise2.py
???? raise3.py
???? raise4.py

  1 # raise.py
  2 
  3 
  4 def make_except():
  5     print("函數開始...")
  6 
  7     # int("AAAAA")  # int 函數內拋出異常
  8     # raise ValueError   # 觸發ValueError類型的異常
  9     raise ZeroDivisionError
 10 
 11     print("函數結束")
 12 
 13 
 14 try:
 15     make_except()
 16     print("make_except 調用完畢!")
 17 except ValueError:
 18     print("make_except 函數調用發生異常")
 19 
 20 print("程序正常退出!")
 21 
 22 
1
  1 # raise.py
  2 
  3 
  4 def make_except():
  5     print("函數開始...")
  6 
  7     # raise ZeroDivisionError
  8     error = ValueError("這是故意制造的錯誤!!!")
  9     raise error  # 發錯誤通知
 10 
 11     print("函數結束")
 12 
 13 
 14 try:
 15     make_except()
 16     print("make_except 調用完畢!")
 17 except ZeroDivisionError:
 18     print("make_except 函數調用發生異常")
 19 except ValueError as err:
 20     print("發生了值錯誤!!!")
 21     print("發生錯誤的數據是:", err)
 22 
 23 print("程序正常退出!")
 24 
 25 
2
  1 # raise3.py
  2 
  3 
  4 # 此示例示意用raise 無參調用來傳遞異常信息
  5 
  6 def f1():
  7     print("f1開始...")
  8     raise ValueError("f1內部發生錯誤!")
  9     print("f1結束!!!")
 10 
 11 def f2():
 12     try:
 13         f1()
 14     except ValueError as e:
 15         print("f2中已收到f1中發生的錯誤:", e)
 16         raise   # raise e  重新觸發當前已捕獲的錯誤!!!
 17 
 18 try:
 19     f2()
 20 except ValueError as err:
 21     print("主程序中已收到f2中發生的錯誤:", err)
 22 
 23 
3
  1 # raise4.py
  2 
  3 # 此示例示意用raise 語句來傳遞消息給調用者
  4 # 當用戶輸入的數字不是0~100之間的數時,用異常方式通知調用者
  5 
  6 def get_score():
  7     '''此函數強制用戶輸入0~100之間的數,如果輸入的是
  8     其它的數則直接觸發異常來通知調用者'''
  9     score = int(input("請輸入成績: "))
 10     if score < 0:
 11         raise ValueError
 12     if score > 100:
 13         raise ValueError("成績超出了最大值")
 14     return score
 15 
 16 
 17 try:
 18     score = 0
 19     score = get_score()
 20 except ValueError as err:
 21     print("用戶輸入有錯,err=", err)
 22 
 23 print("學生的成績是:", score)
4


練習:
?? 寫一個函數 get_age 用來獲取一個人的年齡信息
???? 此函數規定用戶只能輸入1~140之間的整數,如果用戶輸入其它
???? 的數則直接觸發ValueError類型的錯誤!
?? 如:
???? def get_age():
???????? ...? # 此處的邏輯自己實現
???? try:
??????? age = get_age()
??????? print("用戶輸入的年齡是:", age)
???? except ValueError:
???????? print("用戶輸入的不是1~140的整數,獲取年齡失敗")

learn python in y minute、

  1 # 練習:
  2 #   寫一個函數 get_age 用來獲取一個人的年齡信息
  3 #     此函數規定用戶只能輸入1~140之間的整數,如果用戶輸入其它
  4 #     的數則直接觸發ValueError類型的錯誤!
  5 #   如:
  6 #     def get_age():
  7 #         ...  # 此處的邏輯自己實現
  8 #     try:
  9 #        age = get_age()
 10 #        print("用戶輸入的年齡是:", age)
 11 #     except ValueError:
 12 #         print("用戶輸入的不是1~140的整數,獲取年齡失敗")
 13 
 14 
 15 def get_age():
 16     age = int(input("請輸入年齡(1~140): "))
 17     if age < 1 or age > 140:
 18         raise ValueError("年齡不在有效的范圍內!")
 19     return age
 20 
 21 try:
 22     age = get_age()
 23     print("用戶輸入的年齡是:", age)
 24 except ValueError:
 25     print("用戶輸入的不是1~140的整數,獲取年齡失敗")
 26 
 27 
get_age


assert 語句(斷言語句)
?? 語法:
???? assert 真值表達式, 錯誤數據(通常是字符串)
?? 作用:
???? 當真值表達式為False時,用錯誤數據創建一個AssertionError
???? 類型的錯誤,并進入異常狀態
?? 等同于:
???? if bool(真值表達式) == False:
???????? raise AssertionError(錯誤數據)
? 示例見:
???? assert.py

  1 # assert.py
  2 
  3 
  4 # 獲取學生成績:
  5 def get_score():
  6     s = int(input("請輸入學生成績: "))
  7     assert 0 <= s <= 100, '成績超出范圍!'
  8     # if bool(0 <= s <= 100) == False:
  9     #     raise AssertionError('成績超出范圍!')
 10     return s
 11 
 12 try:
 13     score = get_score()
 14     print("學生成績為:", score)
 15 except AssertionError:
 16     print("斷言失敗!")
 17 
 18 print('程序正常退出!')
 19 
 20 
assert.py

為什么要用異常處理機制
?? 在程序調用層數較深時,向主調函數傳遞錯誤信息需要層層return
?? 返回比較麻煩,所以需要異常處理機制

示例見:
?? exception.py

  1 # exception.py
  2 
  3 
  4 def f1():
  5     err = ValueError("一個錯誤")
  6     raise err
  7 
  8 
  9 def f2():
 10     f1()
 11 
 12 def f3():
 13     f2()
 14 
 15 def f4():
 16     f3()
 17 
 18 try:
 19     f4()
 20 except ValueError as err:
 21     print(err)
exception.py

異常小結:
?? 四條語句:
???? try-except????? 捕獲異常,把程序由異常狀態轉回正常狀態
???? try-finally???? 執行必須要執行的語名
???? raise?????????? 發送錯誤通知
???? assert????????? 根據條件發送AssertionError類型的錯誤通知


python 3.11?迭代器 Iterator
?? 什么是迭代器
???? 迭代器是訪問可迭代對象的工具
???? 迭代器是指用iter(obj) 函數返回的對象(實例)
???? 迭代器可以用next(it) 函數獲取可迭代對象的數據
?? 函數
???? iter(iterable)? 從可迭代對象中返回一個迭代器,iterable
????????????? 必須是一個能夠提供一個迭代器的對象
??? next(iterator)?? 從迭代器iterator中獲取下一個記錄,如果
????????????? 無法獲取下一條記錄,則觸發StopIteraton異常

? 說明:
???? 迭代器只能往前取值,不會后退
???? 用iter函數可以返回一個可迭代對象的迭代器

? 示例:
???? L = [2, 3, 5, 7]
???? it = iter(L)? # it 綁定一個能訪問L列表的迭代器
???? print(next(it))? # 2? 通過it 從可迭代對象中提取一個數據
???? print(next(it))? # 3
???? print(next(it))? # 5
???? print(next(it))? # 7
???? print(next(it))? # StopIteration
??
???? # 訪問range
???? it = iter(range(1, 10, 3))
???? print(next(it))? # 1
???? print(next(it))? # 4
???? print(next(it))? # 7
???? print(next(it))? # StopIteration

迭代器的用途
?? 迭代器對象能用next函數獲取下一個元素,可以用迭代器對
?? 任何的可迭代對象進行訪問和遍歷

? 示例見:
???? iterator.py

  1 # iterator.py
  2 
  3 
  4 L = [2, 3, 5, 7]
  5 # 如何遍歷L中數據
  6 # 方法1
  7 # i = 0
  8 # while i < len(L):
  9 #     x = L[i]
 10 #     print(x)
 11 #     i += 1
 12 
 13 # 方法2
 14 # for x in L:
 15 #     print(x)
 16 
 17 # 方法3 用迭代器來遍歷
 18 it = iter(L)
 19 while True:
 20     try:
 21         x = next(it)
 22         print(x)
 23     except StopIteration:
 24         break
 25 
 26 
iterator.py

練習:
?? 有一個集合:
???? s = {'唐僧', '悟空', '八戒', '沙僧'}
?? 用for語句來遍歷所有元素如下:
???? for x in s:
???????? print(x)
???? else:
???????? print("遍歷結束")
?? 請將上面的for語句改寫為while和語句迭代器實現

python eof when reading a line、


練習:
?? 1. 一個球從100米高空落下,每次落地后反彈高度為原高度的一半,再
???? 落下,寫程序算出:
??????? 1) 皮球在第10次落地后反彈的高度
??????? 2) 皮球在第10次落地反彈后共經歷多少米路程

  1 #   1. 一個球從100米高空落下,每次落地后反彈高度為原高度的一半,再
  2 #     落下,寫程序算出:
  3 #        1) 皮球在第10次落地后反彈的高度
  4 #        2) 皮球在第10次落地反彈后共經歷多少米路程
  5 
  6 def get_last_height(height, times):
  7     '''height 原來的高度
  8        times 為反彈次數'''
  9     for _ in range(times):
 10         height /= 2  # 每次反彈高度為原高度的一半
 11     return height
 12 
 13 print("皮球從100米高度落下反彈十次后高度為:",
 14       get_last_height(100, 10))
 15 
 16 
 17 def get_distance(height, times):
 18     meter = 0  # 用來記錄總路程
 19     for _ in range(times):
 20         # 累加下落過程的路程
 21         meter += height
 22         height /= 2 # 計算返回后的高度
 23         # 累加反彈之后的路程
 24         meter += height
 25     return meter
 26 
 27 print("皮球從100米高度落下反彈十次后的總路程為:",
 28     get_distance(100, 10))
ball.py


?? 2. 分解質因數.輸入一個正整數,分解質因數
???? 如:
?????? 輸入: 90
???? 打印:
???? 90 = 2*3*3*5
???? (質因數是指最小能被原數整數的素數(不包括1))

  1 #   2. 分解質因數.輸入一個正整數,分解質因數
  2 #     如:
  3 #       輸入: 90
  4 #     打印:
  5 #       90 = 2*3*3*5
  6 #     (質因數是指最小能被原數整數的素數(不包括1))
  7 
  8 def get_zhiyin_list(x):
  9     '''此函數返回x的質因數的列表
 10     如 x = 90
 11     返回[2, 3, 3, 5]
 12     '''
 13     L = []  # 準備存儲質因數
 14     while x > 1:
 15         # 每次求取一個質因數,然后放在L中
 16         for i in range(2, x + 1):
 17             if x % i == 0:  # i一定是質因數
 18                 L.append(i)
 19                 x = int(x/i)
 20                 break  # 進入下一次while
 21 
 22     return L
 23 
 24 x = int(input("請輸入正整數: "))
 25 L = get_zhiyin_list(x)
 26 L2 = (str(x) for x in L)
 27 print(x, '=', '*'.join(L2))
 28 
 29 
 30 
2


?? 3. 修改原學生信息管理程序,加入異常處理語句,讓程序在任何情
?? 況下都能按邏輯正常執行(不至于崩潰退出)
???? 如: 輸入年齡和成績時輸入字母會崩潰

python startswith?

  1 # file : menu.py
  2 
  3 
  4 def show_menu():
  5     '''顯示菜單'''
  6     print("+--------------------------------+")
  7     print("| 1) 添加學生信息                |")
  8     print("| 2) 顯示學生信息                |")
  9     print("| 3) 刪除學生信息                |")
 10     print("| 4) 修改學生成績                |")
 11     print("| 5) 按學生成績高-低顯示學生信息 |")
 12     print("| 6) 按學生成績低-高顯示學生信息 |")
 13     print("| 7) 按學生年齡高-低顯示學生信息 |")
 14     print("| 8) 按學生年齡低-高顯示學生信息 |")
 15     print("| q) 退出                        |")
 16     print("+--------------------------------+")
 17 
 18 
menu.py
  1 # file : main.py
  2 
  3 from menu import show_menu
  4 from student_info import *
  5 
  6 def main():
  7     infos = []  # 此列表用于保存學生數據
  8     while True:
  9         show_menu()
 10         s = input("請選擇: ")
 11         if s == '1':
 12             infos += input_student()
 13         elif s == '2':
 14             output_student(infos)
 15         elif s == '3':
 16             delete_student(infos)
 17         elif s == '4':
 18             modify_student_score(infos)
 19         elif s == '5':
 20             output_by_score_desc(infos)
 21         elif s == '6':
 22             output_by_score_asc(infos)
 23         elif s == '7':
 24             output_by_age_desc(infos)
 25         elif s == '8':
 26             output_by_age_asc(infos)
 27         elif s == 'q':
 28             break
 29 
 30 main()
 31 
main.py
  1 # file: student.py
  2 
  3 def input_student():
  4     L = []  # 創建一個列表,準備存放學生數據的字典
  5     while True:
  6         n = input("請輸入姓名: ")
  7         if not n:  # 如果用戶輸入空字符串就結束輸入
  8             break
  9         try:
 10             a = int(input("請輸入年齡: "))
 11             s = int(input("請輸入成績: "))
 12         except ValueError:
 13             print("您的輸入有錯,請重新輸入!!!")
 14             continue
 15         d = {}  # 一定要每次都創建一個新的字典
 16         d['name'] = n
 17         d['age'] = a
 18         d['score'] = s
 19         L.append(d)   # 把d加入列表中L
 20     return L
 21 
 22 def output_student(L):
 23     print("+---------------+----------+----------+")
 24     print("|     姓名      |   年齡   |   成績   |")
 25     print("+---------------+----------+----------+")
 26     for d in L:
 27         name = d['name']
 28         age = str(d['age'])  # 轉為字符串
 29         score = str(d['score'])  # 轉為字符串
 30         print("|%s|%s|%s|" % (name.center(15),
 31                             age.center(10),
 32                             score.center(10)))
 33     print("+---------------+----------+----------+")
 34 
 35 def delete_student(L):
 36     name = input("請輸入要刪除學生的姓名: ")
 37     i = 0  # i 代表列表的索引
 38     while i < len(L):
 39         d = L[i]  # d綁定字典
 40         if d['name'] == name:
 41             del L[i]
 42             print("刪除", name, "成功!")
 43             break
 44     else:
 45         print("刪除失敗!")
 46 
 47 def modify_student_score(L):
 48     pass
 49 
 50 
 51 def output_by_score_desc(L):
 52     def get_score(d):
 53         return d['score']
 54     L2 = sorted(L, key=get_score, reverse=True)
 55     output_student(L2)
 56 
 57 def output_by_score_asc(L):
 58     L2 = sorted(L, key=lambda d:d['score'])
 59     output_student(L2)
 60 
 61 def output_by_age_desc(L):
 62     L2 = sorted(L, key=lambda d:d['age'], reverse=True)
 63     output_student(L2)
 64 
 65 def output_by_age_asc(L):
 66     L2 = sorted(L, key=lambda d:d['age'])
 67     output_student(L2)
 68 
 69 
 70 
 71 
 72 
studnt.py

 4. 打印楊輝三角,只打印6層
??????? 1
?????? 1 1
????? 1 2 1
???? 1 3 3 1
??? 1 4 6 4 1
? 1 5 10 10 5 1
  1 #  4. 打印楊輝三角,只打印6層
  2 #        1
  3 #       1 1
  4 #      1 2 1
  5 #     1 3 3 1
  6 #    1 4 6 4 1
  7 #  1 5 10 10 5 1
  8 
  9 def get_next_line(L):
 10     '''此函數根據上一層L, 返回下一層數字列表
 11     如: L = [1, 2, 1]
 12     返回:  [1, 3, 3, 1]'''
 13     L2 = [1]  # 最左邊的1
 14     # 計算中間的數字
 15     for i in range(len(L)-1):
 16         L2.append(L[i] + L[i+1])
 17 
 18     # 添加最后一個1
 19     L2.append(1)
 20     return L2
 21 
 22 
 23 def get_yangui_list(n):
 24     '''此函數返回n層的楊輝三解的列表
 25     如 n 等于4 則返回
 26     [
 27         [1],
 28         [1, 1],
 29         [1, 2, 1],
 30         [1, 3, 3, 1]
 31     ]
 32     '''
 33     L = []  # 用來存放每一層的列表
 34     layer = [1]
 35     while len(L) < n:
 36         # 每次循環放入一層
 37         L.append(layer)
 38         layer = get_next_line(layer)  # 算出下一層
 39     return L
 40 
 41 
 42 def get_yangui_string_list(L):
 43     '''此函數 傳入一個由數字列表組成的列表,返回字符串列表
 44     如: L = [[1], [1, 1], [1, 2, 1]]
 45     返回 ['1', '1 1', '1 2 1']'''
 46 
 47     L2 = []  # 準備存放字符串
 48     for layer in L:
 49         s = ' '.join((str(x) for x in layer))
 50         L2.append(s)
 51     return L2
 52 
 53 def print_yanghui_triangle(L):
 54     max_len = len(L[-1])
 55     for s in L:
 56         print(s.center(max_len))
 57 
 58 L = get_yangui_list(10)  # 得到六層數據
 59 string_L = get_yangui_string_list(L)
 60 print_yanghui_triangle(string_L)
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
4

轉載于:https://www.cnblogs.com/shengjia/p/10323035.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/117715.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息