【问题标题】:Learn Python The Hard Way - Exercise 13 Study Drills艰难地学习 Python - 练习 13 学习练习
【发布时间】:2015-05-01 14:55:12
【问题描述】:

在 Learn Python The Hard Way (Exercise 13) 中,第 3 次学习练习中提到“将 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

【问题讨论】:

  • 我想出了如何通过删除 eth "=" 前面的 ", color, number, shape" 来使脚本工作。但是我现在仍然在我的脚本名称周围加上括号: $ python ex13.py 你最喜欢的颜色是什么?紫色 你最喜欢的号码是什么? 17 你最喜欢的形状是什么?三角形 这个程序叫做 ['ex13.py'],它将确定你最喜欢的颜色、数字和形状。根据你的回答,你最喜欢的颜色是:紫色 你最喜欢的数字是:17 你最喜欢的形状是:三角形 $

标签: python terminal argv raw-input


【解决方案1】:

您究竟希望您的代码做什么?如果你想拥有

    $ python ex13.py
    $ What is your favorite color? <yourColor>
       ..........
    $ Your favorite color is <yourColor>

然后你需要去掉你从 argv 设置所有这些值的部分。 argv 是在命令行中调用它时传递给 python 的参数列表。您在 cmets 中的修复设置 script = ['ex13.py'] 而不是 'ex13.py' 正是出于这个原因,您将 script 设置为列表而不是字符串。

如果您希望代码运行以便在运行时传递脚本参数,则可以删除调用 raw_input 的部分(或者您可以保留它们,但这会覆盖您传递的值在命令行中)尝试运行您发布的代码

    $ python ex13.py <yourColor> <yourNumber> <yourShape>

它应该更接近你想要的。

【讨论】:

  • 谢谢盖伦。我想我试图做一件事,但我的问题是我以两种不同的方式做这件事。任何一段代码(上部或下部)都是为了做同样的事情而编写的,我必须删除一个或另一个才能让它工作。我只是在寻找一种使用 raw_input 和 argv 编写简单程序的方法。我仍然不知道自己在做什么,所以我只是在玩学习练习,希望找到一些方向。
【解决方案2】:

由于您已经通过删除 = 之前的变量解决了一个问题,现在唯一的问题是 ex13.py 周围出现方括号。

你看到你必须在=之前的脚本之后添加另一个没有input()的变量,问题就解决了。

【讨论】: