收集輸入

已完成

到目前為止,您已了解 Python 程式設計語言的各種建構。 您也撰寫了幾個程式。 不過,程式會處理資料,而該資料來自某處。 在本單元中,您將進一步了解如何從命令列和使用者輸入收集輸入。

命令列輸入

當您使用 python3 啟動程式時,您會為其提供要啟動的檔案名。 您也可以提供一組引數:程式在執行時可存取的資料。 看起來可能像這樣:

python3 backup.py 2023-01-01

在上述程式碼中,字串「2023-01-01」可用來作為程式 backup.py 從該日期開始備份的指示。 您可以使用命令列引數獲得彈性。 程式的運作方式可能會根據其外部輸入而有所不同。

命令列引數

這些命令如何在專案的編碼端擷取? 藉由使用 sys 模組,您可以擷取命令列引數,並在程式中使用這些引數。 查看下列程式碼:

import sys

print(sys.argv)
print(sys.argv[0]) # program name
print(sys.argv[1]) # first arg

sys.argv 是包含許多項目的陣列或資料結構。 第一個位置,在陣列中表示為 0,其中包含程式名稱。 第二個位置 1 包含您的第一個引數。 假設程式 backup.py 包含範例程式碼,且您如下所示予以執行:

python3 backup.py 2023-01-01

程式會產生下列結果:

['backup.py', '2023-01-01'] 
backup.py
2023-01-01

使用者輸入

另一種將資料傳遞至程式的方式是讓使用者輸入資料。 您可以撰寫程式碼,讓程式告訴使用者輸入資訊。 您會將輸入的資料儲存在程式中,然後加以處理。

若要從使用者擷取資訊,您將使用 input() 函式。 以下是範例:

print("Welcome to the greeter program")
name = input("Enter your name: ")
print("Greetings " + name)

假設程式 input.py 包含範例程式碼,且您如下所示予以執行:

python3 input.py

執行程式會邀請您輸入名稱,例如:

Welcome to the greeter program
Enter your name: 

輸入值並按 Enter 之後,就會傳回問候語:

Welcome to the greeter program
Enter your name: Picard
Greetings Picard

使用數字

input() 函式會將結果儲存為字串,因此下列程式碼可能不會執行您想要的結果:

print("calculator program")
first_number = input("first number: ")
second_number = input("second number: ")
print(first_number + second_number)

執行此程式會邀請您輸入第一個數字,假設為 3

calculator program
first number: 3

Enter 之後,您可以輸入第二個數字,假設為 4

calculator program
first number: 3
second number: 4

Enter 可提供下列結果:

calculator program
first number: 3
second number: 4
34

您可能希望讓此程式回覆您 7 而不是 34。 什麼地方出錯了?

答案是,first_numbersecond_number 是字串。 若要讓計算正常運作,您必須使用 int() 函式將這些字串變更為數字。 只需修改程式的最後一行為使用 int(),您便可解決問題:

print(int(first_number) + int(second_number))

以相同的值重新執行程式現在會以回應傳回 7

calculator program
first number: 3
second number: 4
7