For不会在Python中遍历整个列表

2024-09-27 09:29:04 发布

您现在位置: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

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


Tags: 模型程序ismodels技能carcarsask
2条回答

您的问题可能应该在Code Review而不是在堆栈溢出处提出,但是让我给您一个实际编码的大致情况。在

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

这将创建两个单独的列表,一个是car_models(也称为好车),另一个是{}。在

^{pr2}$

首先要在好车和坏车之间创建链接元组。一、 e.Ferrari链接到ToyotaLamborghini链接到{},依此类推。然后创建一个循环,在这个循环中分解刚刚创建的元组,并在每次迭代中将好的和坏的汽车存储在gcar和{}中。在

    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")

然后测试刚刚输入的汽车是否与当前的gcar或{}的当前迭代相匹配,如果匹配,则打印一条消息。此代码不针对汽车列表进行测试,只针对当前迭代。在

    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_input的变化,以及while 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

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

此外,您可能需要一个变量“found”来知道您的模型是否在列表中。在

可能的解决方案

您可以使用obj in list检查某个对象是否在列表中,因此您可以这样做:

^{pr2}$

希望有帮助。在

相关问题 更多 >

    热门问题