继续在这个简单的 Python 函数中似乎不起作用

Posted

技术标签:

【中文标题】继续在这个简单的 Python 函数中似乎不起作用【英文标题】:Continue doesn't seem to work in this simple Python function 【发布时间】:2020-08-06 00:44:13 【问题描述】:

该函数应该将字符串作为其输入并返回(如果字符串的所有成员都是数字)和该字符串的整数版本。此示例中提供的字符串是一个 3 位数字。该函数的 for 循环似乎只返回第一个数字,因此 continue 可能无法按预期工作。

e = '484'

def resolving(e):
    for i, o in enumerate(e):

        if o in "0123456789":

            s = []
            s.append(o)
            i += 1

            continue
                
        elif o not in "0123456789":
            print(type(e))
            return e

    k = str(s)
    y = k.replace("'","").replace("[","").replace("]","").replace(",","").replace(" ","")
    p = int(y)
    print(type(p))
    return p

print(resolving(e))

【问题讨论】:

每次向s 追加内容时,首先将其设置为一个空列表。它永远不会包含一个以上的元素。将初始化移出循环。而continue 毫无意义,它完全按照代码的方式执行,因为在当前循环迭代期间不会发生任何进一步的事情。 实际上没有必要创建s 列表,因为在将其转换回字符串后,您将再次得到e。另外我不明白你为什么使用 enumerate 而不是直接遍历字符串。 添加一些简单的调试打印语句——您很快就会发现是您的代码不起作用,而不是 continue 语句。 这就是为什么你不只看第一个数字与最后一个数字相同的测试用例...... 谢谢大家,但我必须将列表's'转换为函数中的字符串的原因是因为我需要将输出提供给return语句。我还尝试使用错误处理语句(try、except 和 finally),但没有按预期运行。希望通过您的组合示例,我会弄清楚。 【参考方案1】:

因为您在循环中创建了列表。只是让它在循环之外。此外,使用 str.join 代替 str(s) 来表示列表的字符串,因为它将列表的所有元素连接成一个字符串。也不需要 continue 语句。因为如果 if 为 True,elif 将不会运行。

for i, o in enumerate(e):
    s = []
    if o in "0123456789":
        s.append(o)
    else:
        print(type(e))
        return e
k = ''.join(s)
p = int(y)
return p

【讨论】:

【参考方案2】:

冒着完全错过你想要做的事情的风险,整个函数可能只是:

def resolve(e):
    """If e is convertible to an int, return its int value; 
    otherwise print its type and return the original value."""
    try:
        return int(e)
    except ValueError:
        print(type(e))
        return e

【讨论】:

【参考方案3】:

你有 return 在那里,所以当你第一次点击一个非数字字符时,你将返回该字符并退出。正如所写, continue 不会做任何事情,因为下面的 elif 不会被任何将您发送到 if 语句的第一个分支的字符命中。

【讨论】:

嗯,第一句话与问题无关,第二句话没有意义......【参考方案4】:

如果你只把一个字符串的整数作为它的整数版本,你可以使用isnumeric()检查:

def resolve(e)
    return int(''.join([i for i in e if i.isnumeric()]))

【讨论】:

以上是关于继续在这个简单的 Python 函数中似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

php“继续”似乎不起作用

等待似乎不起作用,异步(nodejs)

ResultSet getFetchSize() 似乎不起作用?

简单的 sqlplus 脚本似乎不起作用

为啥函数 lsqcurvefit 在 Matlab 2015b 中似乎不起作用?

在 ng-repeat 中向 ng-click 函数添加参数似乎不起作用