Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定输入列表中的元素是否在其他列表中_Python_List_For Loop_If Statement_Break - Fatal编程技术网

Python 确定输入列表中的元素是否在其他列表中

Python 确定输入列表中的元素是否在其他列表中,python,list,for-loop,if-statement,break,Python,List,For Loop,If Statement,Break,我在这方面真的很新,我正在尝试完成这个简单的程序,它应该打印一个产品列表,并要求用户选择他们想要的产品 如果他们输入的产品在原始产品列表中,则应继续,如果不在,则应打印一条消息,说明其无效,并提示用户再次选择 这是我的一些代码 我的产品清单: Medicina = ("jarabe", "ampolleta", "capsulas") Electronica = ("computador", "scanne

我在这方面真的很新,我正在尝试完成这个简单的程序,它应该打印一个产品列表,并要求用户选择他们想要的产品

如果他们输入的产品在原始产品列表中,则应继续,如果不在,则应打印一条消息,说明其无效,并提示用户再次选择

这是我的一些代码

我的产品清单:

Medicina = ("jarabe", "ampolleta", "capsulas")
Electronica = ("computador", "scanner", "impresora")
Ropa = ("vestido", "pantalon", "blusa")

while True:

    Products = input ("ingrese el nombre de sus productos separados solo por una coma: ").split(",")
    print (Products)
    
    for x in Products:  
        if x in Medicina:
            break
        if x in Electronica:
            break
        if x in Ropa:
            break
        
    print ("ingrese productos validos")
        

print (Products)


问题是,无论我输入什么产品,它总是将其标记为无效产品。我将感谢任何帮助

谢谢

提示:始终尝试尽可能少地使用for/while循环或if语句,并保持代码简短,这样做会使代码运行速度变慢并充满bug

注意:你仍然可以把它做得更短更好,但我把它作为一个挑战留给你,让你玩得开心


第二个注意事项:很抱歉,我不理解您使用的语言,所以我只是复制了一个字符串并粘贴了它

您可以使用加法将列表组合在一起,然后使用中的同时检查所有列表

Medicina = ("jarabe", "ampolleta", "capsulas")
Electronica = ("computador", "scanner", "impresora")
Ropa = ("vestido", "pantalon", "blusa")


def invalid_products(Products):

    for product in Products:
        if product not in Medicina + Electronica + Ropa:
            print("Enter valid Product")
            return True
    return False

Products =[]

while(invalid_products(Products) or not Products):
      Products = input ("ingrese el nombre de sus productos separados solo por una coma: ").split(",")
此外,函数可以很好地“返回值”并同时停止运行循环

Medicina = ("jarabe", "ampolleta", "capsulas")
Electronica = ("computador", "scanner", "impresora")
Ropa = ("vestido", "pantalon", "blusa")


def invalid_products(Products):

    for product in Products:
        if product not in Medicina + Electronica + Ropa:
            print("Enter valid Product")
            return True
    return False

Products =[]

while(invalid_products(Products) or not Products):
      Products = input ("ingrese el nombre de sus productos separados solo por una coma: ").split(",")

在您使用的代码中,即使您中断了if语句,也会每次打印
行(“Ingree productos validos”)
。请改用此代码

Medicina = ("jarabe", "ampolleta", "capsulas")
Electronica = ("computador", "scanner", "impresora")
Ropa = ("vestido", "pantalon", "blusa")

while True:

    Products = input ("ingrese el nombre de sus productos separados solo por una coma: ").split(",")
    print (Products)

    for x in Products:
        if (x in Medicina):
            break
        elif x in Electronica:
            break
        elif x in Ropa:
            break
        else:
            print ("ingrese productos validos")

print (Products)

欢迎来到SO。别忘了用一种语言(如Python)标记你的问题。
中断
for
循环中,不会中断
while
循环。如果有任何产品无效或所有产品无效,你希望它出错吗?@JeffUK如果有任何产品无效。只有当它们都有效时,它才应该跳出循环。@Johnnymapp我怎样才能跳出while循环?@Johnnymapp我看到了这个问题,很抱歉,谢谢你指出我犯了一个我能犯的最愚蠢的错误,doneYes有一个动机,所以要得到最快的答案,但问题是,如果它不正确,它将很快被否决,而dv'ER通常不会在答案得到修正后留下来撤销dv。(有人在meta上说,当一个问题被编辑时,dv'ER会得到通知。我不确定这是否会成为政策,因为我很少dv)。@JohnnyMopp说,我很抱歉在没有重复检查的情况下发布我的答案,我甚至没有尽可能快地发布我的答案。我过去和现在都太累了,以至于我没有注意到我犯了一些愚蠢的错误。再次感谢你指出我的错误。我更喜欢while循环,它能告诉我他们在等待什么!不是(真的),事实上,你会有一个包含每个元组的“类别”列表,你应该动态地将所有类别连接在一起,而不是像我这里那样硬编码。