我对编程很陌生,所以我不确定如何写出我的问题。我想要完成的是允许用户在多个项目中输入关于特定项目的属性,并将每个值记录到变量中。
例如,汽车。用户将被提示有关汽车的三个问题:品牌,型号,年份。此过程将循环,直到没有剩余项目为止。
这就是我所拥有的:
while True:
answer=raw_input('Is there another car? Y/N')
if answer=Y:
make=raw_input('Car manufacturer?')
model=raw_input('Car Model?')
year=raw_input('Year?')
elif answer=N:
break
else:
print 'Incorrect Response'
我知道代码真的很不错,但目标是每次循环通过时,它都会将用户输入记录到一组新的变量中(例如,make1,model1,year1,make2,model2等)。这样我就可以编译所有数据,而不会在每次传递时覆盖变量,就像我当前的代码一样。
感谢您的帮助。
答案 0 :(得分:1)
为什么不在列表中累积值元组?它与构建结果表类似,表中的每一行都对应于您的元组。
试试这个:
results = []
while True:
answer=raw_input('Is there another car? Y/N')
if answer == 'Y':
make = raw_input('Car manufacturer?')
model = raw_input('Car Model?')
year = raw_input('Year?')
results.append((make, model, year))
elif answer == 'N':
break
else:
print 'Incorrect Response'
for result in results:
print result
你打印
(make1, model1, year1)
(make2, model2, year2)
... and so on
您可以使用命名元组获得更高级的效果:
import collections
Car = collections.namedtuple('Car', 'make model year')
results = []
while True:
answer=raw_input('Is there another car? Y/N')
if answer == 'Y':
make = raw_input('Car manufacturer?')
model = raw_input('Car Model?')
year = raw_input('Year?')
results.append(Car(make, model, year))
elif answer == 'N':
break
else:
print 'Incorrect Response'
for car in results:
print car.make, car.model, car.year
一个名为tuple的元组是一个像对象一样具有命名空间的元组,但在你的Python进程中并没有那么重。记忆。完整对象在dict中存储属性,这对于内存更重要。
答案 1 :(得分:1)
使用您可以考虑命名Car的类:
class Car:
pass
然后,您可以实例化一个空的汽车列表,
cars = []
并且,在while循环期间,新车被初始化并附加到您的列表中:
car = Car()
car.make=raw_input('Car manufacturer?')
car.model=raw_input('Car Model?')
car.year=raw_input('Year?')
cars.append(car)
类表示持久对象。所有元素都保持“活着”。在列表中,您可以在用户输入完成后汇总输入或任何您想要做的事情。阅读关于lists和classes的python 2.7手册以了解更多信息。