2017-01-04 15 views
0

Я создал список так:Как заставить приглашение raw_input автоматически читать строку из предыдущего списка?

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

Я хочу использовать эти элементы списка в строке для raw_input.

Например, я хотел бы следующую строку следующего содержания: a=raw_input("What is Tom's height?") исключением того, что в таком виде она закодирована так, что запрос на a всегда будет просить высоты Tom «s.

Я бы хотел, чтобы код был более гибким, чтобы любое изменение элемента списка автоматически обновлялось в подсказке. Например, если я изменил список на names=["Matthew", "Sarah", "Jane"], я бы запросил a, чтобы задать высоту Matthew так, чтобы он всегда читал первый элемент списка.

Как это сделать, чтобы подсказка автоматически изменилась, если элементы в списке изменились?

+0

Запрос - это просто строка. Постройте нужную строку и передайте ее параметру 'raw_input'. – DyZ

+0

передать индекс имен в качестве аргументов ['str.format() '] (https://docs.python.org/2/library/string.html#format-examples) – davedwards

+0

Вы хотите, чтобы он попросил высоту первого лица? Или вы хотите, чтобы программа проходила через всех в списке и требовала их роста? –

ответ

0

Если вы хотите, чтобы подсказать пользователю для каждого имени в списке:

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

EDIT:

Для сохранения результатов в виде списка (по запросу в комментарии):

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

Это именно то, что я хотел! следуя этому, знаете ли вы, как сохранить результаты в списке? Когда я использую ваш код, а затем «печатаю», он показывает только окончательное значение (для Гарри). – bigboat

+0

Я обновил свой ответ. –

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

a = raw_input("What is %s's height?" % names[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 %, заимствованные из sprintf с языка C, хотя в общем случае ссылка str.format() считается заменой для этого.

Для полноты, есть final brand-new way to do string formatting, но это только в Python 3.6.