学习Python的艰难之路-练习13学习练习



在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()的变量,这样问题就解决了。

最新更新