Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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
Python3:for循环中断和else(if语句) 背景资料:_Python_Python 3.x_For Loop_If Statement - Fatal编程技术网

Python3:for循环中断和else(if语句) 背景资料:

Python3:for循环中断和else(if语句) 背景资料:,python,python-3.x,for-loop,if-statement,Python,Python 3.x,For Loop,If Statement,哎,, 我想做以下工作:我有一个以ID为键的字典和一个以各种事物为值的列表。值的其中一项是字符串。我想检查列表是否包含此字符串。我想对我字典里的所有键都这么做 如果列表包含字符串,我想打印“字符串有效” 如果列表不包含字符串,我想打印“字符串无效” 到目前为止,一切顺利 此外,我要检查的列表取决于用户的一个控制台输入,该输入指定应检查哪个列表。控制台输入为“数字” 我的想法是,如果字符串(值的项)等于任何列表项,则使用嵌套的for循环迭代字典和列表并进行比较。如果是,我想打破这个循环。如果在

哎,, 我想做以下工作:我有一个以ID为键的字典和一个以各种事物为值的列表。值的其中一项是字符串。我想检查列表是否包含此字符串。我想对我字典里的所有键都这么做

  • 如果列表包含字符串,我想打印“字符串有效”
  • 如果列表不包含字符串,我想打印“字符串无效”
到目前为止,一切顺利

此外,我要检查的列表取决于用户的一个控制台输入,该输入指定应检查哪个列表。控制台输入为“数字”

我的想法是,如果字符串(值的项)等于任何列表项,则使用嵌套的for循环迭代字典和列表并进行比较。如果是,我想打破这个循环。如果在列表中找不到该字符串,我想执行else语句来打印我的“字符串无效”消息

代码段: 问题:
我正在运行它,但是不管字符串是否在列表中,我总是得到else语句的打印输出。那么,我猜我在for循环中的推理有错误?或者,我根本不懂for循环?!我尝试了else语句的不同缩进,但无法解决我的问题。

我建议您按以下方式更改函数(不更改逻辑):

这将帮助您退出注释中提到的3个嵌套循环。

因为在第一次错误发生的否定情况下,您不需要检查任何其他内容

使用return中断所有循环。如果您没有任何if语句开始,那么就没有必要使用else语句

def validationHelper(myDict, myList):
    for item in myList:
        if item in myDict.values():
            return ("String is valid")
    return ("String is NOT valid")

def validation(anyList,helperfunc):
    if anyList=="one":
        return helperfunc(finalDict,myList1)
    elif anyList=="two":
        return helperfunc(finalDict,myList2)
    elif anyList=="three":
        return helperfunc(finalDict,myList3)

validation(number, validationHelper)

print(validationHelper.true)
使用elif而不是多if是更好的做法。下次小心压痕

您可能还需要检查.keys()和.values()

您可以替换:

for key in myDict:
    for value in myDict[key][0]:
与:


其他答案很好地解释了如何打破多个循环。但您也可以通过使用Python的内置函数和列表理解来简化代码,如下所示:

def validationHelper(myDict, myList):
    if any(v in myList for val in myDict.values() for v in val[0]):
        validationHelper.true="String is valid"
    else:
        validationHelper.true="Warning: String is NOT valid"

def validation(anyList,helperfunc):
    if anyList=="one":
        return helperfunc(finalDict,myList1)
    if anyList=="two":
         return helperfunc(finalDict,myList2)
    if anyList=="three":
         return helperfunc(finalDict,myList3)

validation(number, validationHelper)

print(validationHelper.true)

这应该和您的代码一样有效,因为
any
在第一次匹配时短路。它可能更具可读性。(请注意,对于循环,多级列表理解的顺序与常规的
顺序相同。)

记住,这里有三个嵌套循环;
中断
只会中断最里面的一个。哦,天哪,@DanielRoseman,我本可以自己知道-。-”。所以,现在让我把我的“思考”变成文字:我在列表中找到字符串,然后中断内部循环。我回到了循环中,“因为我的Dict[key][0]中的值。”“并搜索下一个键等。我的打印将是最后一件事,它将写入validationHelper.true,对吗?”?为了在找到匹配项时完全终止所有循环,我会添加break语句,对吗?返回是否应该替换break,而不是else?因此,返回基本上意味着“结束所有循环”,并且是这样工作的?因为,如果我以这种方式调整代码并尝试打印(validationHelper.true),我会得到以下错误:print(validationHelper.true)AttributeError:“function”对象没有属性“true”@Arseniy如果字典中的第一个键出现负值,我想继续使用第二个键。所以我需要继续检查,只是我有一个新的字符串,然后检查相同的字符串list@Shushiro很抱歉误读了你的问题,请检查我的最新答案。return的意思是“停止执行这个函数”并返回一些东西。哦,你需要的是返回字符串,而不是
。真的
@Arseniy啊,好吧,不知怎么的,更新的答案刚刚出现了。我的“else”应该是for循环else子句,而不是if/else的else:那么你就不需要else语句了。让我更新我的答案
for key in myDict:
    for value in myDict[key][0]:
for value in myDict.values():
def validationHelper(myDict, myList):
    if any(v in myList for val in myDict.values() for v in val[0]):
        validationHelper.true="String is valid"
    else:
        validationHelper.true="Warning: String is NOT valid"

def validation(anyList,helperfunc):
    if anyList=="one":
        return helperfunc(finalDict,myList1)
    if anyList=="two":
         return helperfunc(finalDict,myList2)
    if anyList=="three":
         return helperfunc(finalDict,myList3)

validation(number, validationHelper)

print(validationHelper.true)