1. 程式人生 > >笨方法學Python 習題 13: 引數、解包、變數

笨方法學Python 習題 13: 引數、解包、變數

from sys import argv

script, first, second, third = argv

print ("The script is called:", script)
print ("Your first variable is:", first)
print ("Your second variable is:", second)
print ("Your third variable is:", third)

執行結果如下:

$ python ex13.py first 2nd 3rd
The script is called: ex13.py
Your first variable is: first
Your second variable is: 2nd
Your third variable is: 3rd

$ python ex13.py cheese apples bread
The script is called: ex13.py
Your first variable is: cheese
Your second variable is: apples
Your third variable is: bread

$ python ex13.py Zed A. Shaw
The script is called: ex13.py
Your first variable is: Zed
Your second variable is: A.
Your third variable is: Shaw

加分習題

①給你的指令碼三個以下的引數。看看會得到什麼錯誤資訊。試著解釋一下。

ValueError :not enough values to unpack.

②再寫兩個指令碼,其中一個接受更少的引數,另一個接受更多的引數,在引數解包時給它們取一些有意義的變數名。

將 raw_input 和 argv 一起使用,讓你的指令碼從使用者手上得到更多的輸入。

記住“模組(modules)”為你提供額外功能。多讀幾遍把這個詞記住,因為我們後面還會用到它。

常見問題回答

執行時錯誤資訊 ValueError: need more than 1 value to unpack。

記住,有一個很重要的技能是注重細節。如果你仔細閱讀並且完整重複了“你應該看到的結果”部分的命令引數,你就不會看到這樣的錯誤資訊。

argv 和 raw_input() 有什麼不同?

不同點在於使用者輸入的時機。如果引數是在使用者執行命令時就要輸入,那就是 argv, 如果是在指令碼執行過程中需要使用者輸入,那就使用 raw_input()。

命令列引數是字串嗎?

是的,就算你在命令列輸入數字,你也需要用 int() 把它先轉成數字,和在 raw_input() 裡一樣。

命令列該怎麼使用?

這個你應該已經學會了才對。如果你還沒學會,就去讀讀我寫的《命令列迫降式入門》吧 http://cli.learncodethehardway.org/book/

argv 和 raw_input() 不能合起來用。

別想太多了。在指令碼結尾加兩行 raw_input() 隨便讀取點使用者輸入就行了,然後再慢慢在指令碼中玩玩這兩個東東。

為什麼 ``raw_input(‘? ‘) = x``不靈?

因為你寫反了。照著我的寫就沒問題了。