习题 14: 提示和传递
让我们使用 argv 和 raw_input 一起来向用户提一些特别的问题。在这道习题里我们将用略微不同的方法使用 raw_input,让它打出一个简单的 > 作为提示符。
from sys import argv script=argv user_name=argv prompt= '>' print "Hi %s,I'm the %s script."%(user_name,script) print "I'd like to ask you afew questions." print "Do you like me %s" %user_name likes=raw_input(prompt) print "Where do you lives %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,likes,computer)
我们将用户提示符设置为变量 prompt,这样我们就不需要在每次用到raw_input 时重复输入提示用户的字符了。而且如果你要将提示符修改成别的字串,你只要改一个位置就可以了。
结果
当你运行这个脚本时,记住你需要把你的名字赋给这个脚本,让 argv 参数接收到你的名称。
Hi ['C:/lx.py'],I'm the ['C:/lx.py'] script. I'd like to ask you afew questions. Do you like me ['C:/lx.py'] >yes Where do you lives ['C:/lx.py']? >china What kind of computer do you have? >hp Alright,so you said 'yes' about liking me. You live in 'yes'.Not sure where that is. And you have a 'hp' 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 = '> ',将它改成一个不同的值。
发生错误 ValueError: need more than 1 value to unpack.
记得上次我说过,你应该到“你应该看到的结果”部分重复我的动作。集中精力到我的输入,以及为什么我提供了一个命令行参数。
我可以用双引号定义 prompt 变量的值吗?
当然可以,试试看就知道了。
运行时出现 NameError: name 'prompt' is not defined。
要么拼错了 prompt 要么漏写了这一行。回去比较你写的和我写的东西,从最后一行开始直至第一行。
怎样从 IDLE 中运行?
不要使用 IDLE。