2014-06-16 31 views
1

我真的不熟悉编程,所以我不太确定怎么说我的问题。我试图完成的是允许用户在多个项目中输入关于特定项目的属性并将每个值记录到变量中。在循环中更改/添加变量。 (Python 2.7)

因此,例如,汽车。用户会被提出三个有关该车的问题:品牌,型号,年份。这个过程会循环直到没有剩下的项目。

这是我有:

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等)。这样我就可以编译所有的数据,而不用每遍都覆盖变量,就像我现在的代码一样。

感谢您的帮助。

+2

而不是有一系列的变量'make1','make2','make3',考虑做一个单独的列表变量'makes',它包含多个值。 – Kevin

+0

关于列表的列表,其中每个元素是tipe [make,model,year]的列表? –

回答

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 

命名元组是一个元组命名空间就像一个对象,但不像Python进程的内存那么重。一个完整的对象将字典存储在一个字典中,这是更多的内存。

+0

'if answer = Y' should be'if answer =='Y''; 'answer = N'也一样。不要忘记,'Y'和'N'是字符串,否则它们在代码中没有定义。 –

+0

谢谢鲁本,我明白了。 :) –

+1

感谢您的快速响应!我会尝试。 – Brock

1

使用的一类,你可以考虑命名汽车:

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) 

类表示持久对象。所有元素在列表中保持“活跃”状态,并且在用户输入完成后,您可以汇总输入或任何您想要执行的操作。阅读有关listsclasses的python 2.7手册以了解更多信息。

+0

感谢您的建议!没想到我会很快得到回应。非常感激。 – Brock

+0

具有属性的对象列表比较重,这对学习很有帮助,但我不会将其投入生产。 –

+0

是的,我看到你的帖子是关于命名元组的,到目前为止我还不知道。然而,考虑到应用程序的问题,我想a)指出**基本**概念,并且b)不要认为内存将成为问题:) – Gregor