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

How to make the raw_input prompt automatically read a string from a previous list?

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

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

我想在 raw_input.

的提示中使用这些列表元素

例如,我希望下一行为:a=raw_input("What is Tom's height?") 除了在这种形式中它是硬编码的,因此 a 的提示将始终要求 Tom'高度。

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

怎样才能让列表中的元素发生变化时提示自动变化?

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

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

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

在 python 中,您可以通过几种方式完成此操作。

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

看起来像这样

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

另一种(更好的)方法是使用 str.format() syntax(也称为 "new-style string formatting")

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.

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

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)))