原文链接:http://learnpythonthehardway.org/book/ex14.html
现在让我们来做一个同时使用 argv 和 raw_input 两个方法来询问用户一些特别的事情的练习。在做下一个练习前你得学会如何读和写像下面示例的脚本。在这次练习中,我们将使用 raw_input 的方式稍微有点不同,不同之处在于我们用它只简单的输出一个 “>” 提示符。这有点像Zork 或者 Advacne游戏。
from sys import argv
script ,user_name = argv
prompt = '>'
print "Hi %s, I'm the %s script." % (user_name ,script)
print "I'd like to ask you a few questions."
print "Do you like me %s?" % user_name
likes = raw_input(prompt)
print "Where do you live %s?" % user_name
lives = raw_input(prompt)
print "What kind of computer do you have?"
computer = raw_input(prompt)
print """
Alright ,so you said %r about liking me.
You live in %r. Not sure where that is.
And you have a %r computer.Nice.
"""% (likes ,lives ,computer)
注意到我们创建了一个 prompt 变量来作为我们想要设置的提示符,我们把它放在 raw_input 中来避免反反复复的打印它。现在如果我们想要使其他提示符的话,只要返回脚本中修复 prompt 这个变量的值就行了。
非常方便!
输出结果如下:
当你运行这个脚本的时候,你得记住要给脚本中的 argv 参数传人相应的值。
c:\>python ex14.py zed
Hi zed, I'm the ex14.py script.
I'd like to ask you a few questions.
Do you like me zed?
>Yes
Where do you live zed?
>San Francisco
What kind of computer do you have?
>Tandy 1000
Alright ,so you said 'Yes' about liking me.
You live in 'San Francisco'. Not sure where that is.
And you have a 'Tandy 1000' computer.Nice.
研究训练:
1、找出 Zork 和 Adventure 是什么样的游戏。试着找到一个副本并玩一下这个游戏。
2、完全的改变变量prompt 的值。
3、在你的脚本中添加一个新的参数并使用它。
4、确保你能明白最后一行打印输出中使用了"""风格的多行字符串并用%格式化输出变量的使用形式。
学生遇见的常见问题:
我运行脚本时出现这个错误:SyntaxError : invalid syntax
答:看,又是这个问题,你应该在命令行中正确运行脚本,而不是在Python中执行。如果你已经输了python命令,然后在输入 python ex14.py Zed 就会失败,因为你在Python中运行Python脚本。关掉你的窗体然后只输入 python ex14.py Zed 。
我不理解你说的改变提示符石什么意思?
答:看见了变量 prompt = '>' 了吗。将它赋予一个不同的值。你应该知道怎么改变那个变量的值了吧,就是把一个字符串赋给一个变量这个我们在前13个练习中已经做过很多了,你自己花点时间弄明白吧。
我得到这样的错误提示:ValueError: need more than 1 value to unpack.
答:记住当我说你需要看看 ”输出结果“的时候你应该对比一下我写的代码。你需要和我做一样的事情,并且将注意力集中在我是怎样输入执行命令的以及为什么我那有一行命令参数。
我对prompt变量值可以使用双引号吗?
答:完全可以,你可以尝试一下。
你有一台 Tandy 电脑?
答:我小时候确实有一台。
我运行时遇到这样的错误:NameError: name 'prompt' is not defined。
答:你可能拼写错了 prompt 也可能忘了写定义prompt的那一行。回过头和我的代码仔细对比一下,从脚本的最后一行开开始到最上面的方式来对比。
我可以用IDLE来运行脚本吗?
答:不要去使用IDLE。