如何使raw_input提示自动从前一个列表中读取字符串?

时间:2017-01-04 00:18:23

标签: python python-2.7 prompt raw-input

我创建了一个这样的列表:

names=["Tom", "Dick", "Harry"]

我想在raw_input的提示中使用这些列表元素。

例如,我希望下一行阅读:a=raw_input("What is Tom's height?"),但在此格式中,它是硬编码的,以便a的提示始终要求Tom的高度。

我希望代码更灵活,以便在提示符中自动更新list元素的任何更改。例如,如果我将列表更改为names=["Matthew", "Sarah", "Jane"],我希望a的提示要求Matthew的高度,以便它始终读取列表的第一个元素。

如何在列表中的元素发生变化时自动更改提示?

3 个答案:

答案 0 :(得分:1)

这个问题归结为:我如何根据程序中的变量来改变字符串,而不仅仅是文字字符串?

在python中,你可以通过几种方式实现这一目标。

一种直观的方法是将字符串连接(添加)。

看起来像这样

names=["Tom", "Dick", "Harry"]
a=raw_input("What is " + names[0] + "'s height?")

另一种(更好)的方法是使用str.format() syntax(也称为"新式字符串格式")

names=["Tom", "Dick", "Harry"]
a=raw_input("What is {}'s height?".format(names[0]))

这种方法有优点(我会推荐它),因为它更灵活:你使用的参数(在这种情况下名称[0])不必是字符串。在这种情况下,两种方法都有效,因为名称无论如何都是字符串。但是,例如,如果您希望字符串的可变部分为int,则第一种方法不起作用,而第二种方法将int转换为字符串,它将按预期工作。

还有其他方法可以进行字符串格式化:C-style string formatting with %,从C语言中借用sprintf,尽管str.format()通常被认为是替代它。

为了完整起见,我们只有final brand-new way to do string formatting,但它仅适用于Python 3.6。

答案 1 :(得分:0)

names=["Tom", "Dick", "Harry"]

a = raw_input("What is %s's height?" % names[0])

答案 2 :(得分:0)

如果要提示用户输入列表中的每个名称:

names=["Tom", "Dick", "Harry"]
for name in names:
    a = raw_input("What is {}'s height? ".format(name))

修改

将结果存储在列表中(根据评论中的请求):

names=["Tom", "Dick", "Harry"]
results = []
for name in names:
    results.append(raw_input("What is {}'s height? ".format(name)))