在循环中更改/添加变量。 (Python 2.7)

时间:2014-06-16 20:47:30

标签: python 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 个答案:

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

类表示持久对象。所有元素都保持“活着”。在列表中,您可以在用户输入完成后汇总输入或任何您想要做的事情。阅读关于listsclasses的python 2.7手册以了解更多信息。