[PS-1] Python入門練習之提醒事項

1. 概述

本文章主要是對學習完Python入門系列的同學進行的補充練習,我在陳述時盡量做到簡潔明了,主要思路是構思程序、列出提綱、根據邏輯思路編寫代碼。

本文章需要涵蓋的知識點有:

列表、輸入輸出、條件判斷語句、循環語句、函數。

2. 思路和假設條件

首先來看一下思路:

我們在程序中會安排一個列表作為提醒事項清單存放的地方,我們會給用戶這幾個選擇:

  1. 查看清單
  2. 添加事件
  3. 修改事件
  4. 刪除事件
  5. 退出程序

在用戶運行這個程序時我們需要這個程序一直運行,除非用戶選擇退出程序。由於沒有學習文件讀寫和錯誤處理,我們需賦予這個小程序以下假設前提:

  1. 只有程序運行時能保持用戶數據,關閉後數據會消失
  2. 假設用戶輸入都為有效(比如不會輸入給予選項外的數字)

3. 程序邏輯

我們希望主程序中代碼越精簡越好,邏輯清晰方便調試。

第一步:準備清單變數以及主邏輯(主程序寫在程序最底部)

# Main functionnif __name__ == __main__:n # Initialize the checklistsn checklist = []nn while True:n # Get user choicen # Validate users inputn # Handle users inputn

由於我們要使運行的程序永遠運行下去,只有用戶才能選擇是否終止,由於第一次運行沒有前提條件,於是我們選擇使用while True … break語句,也就是其他語言中常見的do…while。

第二步:get_user_choice()函數得到用戶輸入選項

在主程序上方添加以下代碼:

# Function declarationndef get_user_choice():n print(---------------------)n print(Please make a choice:)n print(1. Check my list)n print(2. Add an entry)n print(3. Modify an entry)n print(4. Delete an entry)n print(5. Exit)n user_input = int(input())n print(---------------------)n return user_inputn

首先我們輸出給用戶的選項,然後得到用戶的輸入,最後我們返回給主程序。

while True:n # Get user choicen choice = get_user_choice()n # Validate users inputn # Handle users inputn

第三步:檢測用戶輸入選項是否正確(是否為1~5內的整數)

假設用戶不會輸入字母、浮點數之類的數據。

while True:n # Get user choicen choice = get_user_choice()n # Validate users inputn if choice < 1 or choice > 5:n print(Invalid input!)n continuen # Handle users inputn

用continue返回while True行,重新要求用戶輸入選項,只有為1~5的整數時才會跳過continue,實行接下來的代碼。

第四步:處理用戶退出命令

5個步驟中最特殊的是第五步驟,退出程序,這一命令直接終止程序,如果用戶選擇終止,所有數據會被清空,我們得加上警告信息,只有用戶確認終止後才能退出程序。

def warning_message():n print(WARNING: exiting the program will clear all your data!)n print(Continue? yes/no)n if input() == yes:n return Truen return Falsen

布爾型中正好True對應yes,False對應no,我們可以用此來直接和條件語句結合:

# Handle users inputn if choice == 5:n if warning_message():n print(Goodbye!)n breakn

到這裡為止我們補全了所有其他邏輯(包括while True…break語句),可以說是下面的工作就是主要的工作:

接著上面的代碼,在break下面,和if choice == 5同級縮進:

else:n checklist = handle_user_request(choice, checklist)n

第五步:handle_user_request(choice, checklist)函數處理用戶輸入

我們需要用戶的輸入選項以及清單變數,並隨時在主程序中更新清單,我們需要一個以選項和清單列表作為參數的函數,並返回清單以更新主程序的清單(其實沒必要返回,但是沒學深淺拷貝,這裡先返回)。

查看列表:

def handle_user_request(choice, checklist):n if choice == 1:n if len(checklist) == 0:n print(Your list is empty!)n for i in range(0, len(checklist)):n print(i + 1, checklist[i])n return checklistn

這裡要注意,用戶不一定習慣從0開始數數,所以輸出時得給i加1。當列表啥也沒有時,最好告訴用戶列表為空,這裡不用else語句,當列表為空時,列表長度為0,循環自然不會運行。

添加事件:

if choice == 2:n new_entry = input(Type you new to-do here: )n checklist.append(new_entry)n return checklistn

很簡單,append一下就行,並返回清單更新主程序中的變數。

修改事件:

if choice == 3:n print(Which do you want to modify?)n for i in range(0, len(checklist)):n print(i + 1, checklist[i])n index = int(input()) - 1n checklist[index] = input(Type your new to-do here: )n return checklistn

這裡就需要注意一個,給用戶看了列表後要求用戶選一個事件編輯,這時用戶輸入的是他們看到的數字選項,也就是之前加了1的,我們必須把它轉換回從0數數的習慣,需要減1。

刪除事件:

if choice == 4:n print(Which do you want to delete?)n for i in range(0, len(checklist)):n print(i + 1, checklist[i])n index = int(input()) - 1n del checklist[index]n return checklistn

和修改事件中注意事項差不多,最後來個del就行了。

4. 程序一覽

# Function declarationndef get_user_choice():n print(---------------------)n print(Please make a choice:)n print(1. Check my list)n print(2. Add an entry)n print(3. Modify an entry)n print(4. Delete an entry)n print(5. Exit)n user_input = int(input())n print(---------------------)n return user_inputnnndef warning_message():n print(WARNING: exiting the program will clear all your data!)n print(Continue? yes/no)n if input() == yes:n return Truen return Falsennndef handle_user_request(choice, checklist):n if choice == 1:n if len(checklist) == 0:n print(Your list is empty!)n for i in range(0, len(checklist)):n print(i + 1, checklist[i])n return checklistn if choice == 2:n new_entry = input(Type you new to-do here: )n checklist.append(new_entry)n return checklistn if choice == 3:n print(Which do you want to modify?)n for i in range(0, len(checklist)):n print(i + 1, checklist[i])n index = int(input()) - 1n checklist[index] = input(Type your new to-do here: )n return checklistn if choice == 4:n print(Which do you want to delete?)n for i in range(0, len(checklist)):n print(i + 1, checklist[i])n index = int(input()) - 1n del checklist[index]n return checklistnnn# Main functionnif __name__ == __main__:n # Initialize the checklistsn checklist = []nn while True:n choice = get_user_choice()n if choice < 1 or choice > 5:n print(Invalid input!)n continuen if choice == 5:n if warning_message():n print(Goodbye!)n breakn else:n handle_user_request(choice, checklist)n

這個程序是匆忙寫出來的,不是很完美,但是作為練習,可以很好地鞏固一下之前學的內容。


推薦閱讀:

RSA系列——實踐測試
開篇 自製8位計算機介紹
Compile過後的Mathematica程序大概比Python編的慢多少?
計算機科學入門-門電路

TAG:Python | 计算机科学 | 编程 |