因为不会迭代Python中的整个列表

时间:2015-08-31 15:49:05

标签: python

所以我正在学习Python并且遇到了这个小程序的麻烦,我试图进一步尝试使用我的Codecademy技能。

car_models = ["Ferrari", "Lamborghini", "Aston Martin", "BMW"]
bad_cars = ["Toyota", "Mazda", "Ford", "Hyundai"]

for gcar, bcar in zip(car_models, bad_cars):
    ask = input("What is your favorite car brand? ")
    if ask == gcar:
        print("Yes!")
    elif ask == bcar:
        print("Ew!")
    else:
        print("The model is not listed")
    break

当我运行它时,如果模型是列表中的第一个,它将只弹出一个答案,否则,它只是告诉你模型没有列出,即使它是。

2 个答案:

答案 0 :(得分:1)

break 语句是错误的,只有在找到对象时才必须完成循环

编辑,感谢@PM 2Ring

ask = input("What is your favorite car brand? ")
for gcar, bcar in zip(car_models, bad_cars):

    if ask == gcar:
        print("Yes!")
        break here
    elif ask == bcar:
        print("Ew!")
        break here
除了你可能想要一个变量"找到"了解您的模型是否在列表中。

可能的解决方案

您可以使用 obj in list 检查对象是否在列表中,这样您就可以完成此操作:

ask = input("What is your favorite car brand? ")

if ask in car_models:
    print("Yes!")
elif ask in bad_cars:
    print("Ew!")
else:
    print("The model is not listed")

希望它有所帮助。

答案 1 :(得分:1)

你的问题应该是Code Review而不是Stack Overflow的问题,但是让我告诉你实际编码的内容。

car_models = ["Ferrari", "Lamborghini", "Aston Martin", "BMW", "Opel"]
bad_cars = ["Toyota", "Mazda", "Ford", "Hyundai"]

这会创建两个单独的列表,一个是car_models(又名好车),另一个是bad_cars

for gcar, bcar in zip(car_models, bad_cars):

首先,您要在好车和坏车之间创建链接元组。即FerrariToyota相关联,LamborghiniMazda相关联,依此类推。然后,您创建一个循环,在其中剖析您刚刚创建的元组,并在每次迭代中将好车和坏车存储在gcarbcar中。

    ask = input("What is your favorite car brand? ")

然后在循环中,您认为您要求购买自己喜欢的汽车品牌,并将其存储ask。但是你实际上在这里要求输入,然后将其评估为python代码,请参阅input。 (即按原样使用,您必须输入"Ferrari"以避免NameError例外)

    if ask == gcar:
        print("Yes!")
    elif ask == bcar:
        print("Ew!")
    else:
        print("The model is not listed")

然后测试刚输入的汽车是否与gcarbcar的当前迭代匹配,如果匹配则打印一条消息。此代码对汽车列表进行测试,仅对当前迭代进行测试。

    break

然后在第一次迭代中测试之后,你就会脱离循环。

可能的解决方案

根据您的主要目的,有两个略有不同的修复。你想继续问新车型,直到他们累了,或者你想问一次?

在解决该问题之前,请尝试使用以下代码查看for循环产生的内容(我已添加Opel,并且它会消失,因为另一个列表不够长):

car_models = ["Ferrari", "Lamborghini", "Aston Martin", "BMW", "Opel"]
bad_cars = ["Toyota", "Mazda", "Ford", "Hyundai"]

for gcar, bcar in zip(car_models, bad_cars):
    print('gcar = {}, bcar = {}'.format(gcar,bcar))

假设您想多次询问,您可以执行以下操作:

car_models = ["Ferrari", "Lamborghini", "Aston Martin", "BMW", "Opel"]
bad_cars = ["Toyota", "Mazda", "Ford", "Hyundai"]

while True:
    ask = raw_input("What is your favorite car brand? ")
    if ask in car_models:
        print("Yes!")
    elif ask in bad_cars:
        print("Ew!")
    else:
        print("The model is not listed")
        break

请注意更改为使用raw_inputwhile True:继续询问,直到您提供未列出的车型。并注意break的额外缩进,以便仅在列出不在任一列表中的汽车时执行。

这可以提供以下对话框':

What is your favorite car brand? Ferrari
Yes!
What is your favorite car brand? Toyota
Ew!
What is your favorite car brand? Mazda
Ew!
What is your favorite car brand? Lamborghini
Yes!
What is your favorite car brand? Saab
The model is not listed