在Learn Python The Hard Way(练习13)中,第三次学习演练说"将raw_input与argv结合起来,制作一个可以从用户那里获得更多输入的脚本。"
我在下面写了这个脚本,目的是让终端提示用户回答三个问题,然后它会打印出包含这些答案的短语。然而,当我尝试使用以下命令运行它时,我遇到了一个错误,即没有足够的值来解包:
python ex13.py
我知道我需要更多的变量来解包才能让脚本工作,所以当我键入这个时,脚本就会工作,但从不输出变量"第一"、"第二"或"第三"(我无论如何都不希望它输出):
python ex13.py first second third
我知道如何在不导入参数变量的情况下编写脚本,但我还能如何解释研究演练?我知道我没有正确理解学习练习的提示,但我不知道如何以不同的方式写剧本,甚至不知道我是否朝着正确的方向前进。
有人能提供一些建议吗?你不必直接给我答案(我喜欢弄清楚),但我现在不知所措。
我的脚本:
from sys import argv
script, color, number, shape = argv
color = raw_input("What is your favorite color? ")
number = raw_input("What is your favorite number? ")
shape = raw_input("What is your favorite shape? ")
print """
This program is called %r and it will determine your
favorite color, number and shape.
""" % script
print "Based on your answers, your favorite color is:", color
print "Your favorite number is:", number
print "And your favorite shape is a:", shape
您到底希望代码做什么?如果你想要
$ python ex13.py
$ What is your favorite color? <yourColor>
..........
$ Your favorite color is <yourColor>
然后,您需要去掉从argv设置所有这些值的部分。argv是在命令行中调用python时传递给它的参数列表。您在注释中的修复程序将script设置为['ex13.py']而不是'ex13.my'。正是因为这个原因,您将script设置成列表而不是字符串。
如果你想让你的代码在运行时传递脚本参数,你可以去掉调用raw_input的部分(或者你可以保留它们,但这会覆盖你在命令行中传递的值)。试着用运行你发布的代码
$ python ex13.py <yourColor> <yourNumber> <yourShape>
它应该更接近你想要的。
由于您已经通过删除=
之前的变量解决了一个问题,现在唯一的问题是您得到的是ex13py周围的方括号。
您可以看到,您必须在=
之前的脚本后面添加另一个没有input()
的变量,这样问题就解决了。