Продолжить, похоже, не работает в этой простой функции Python - PullRequest
0 голосов
/ 06 августа 2020

Предполагается, что функция принимает строку в качестве входных и возвращаемых (если все члены строки являются цифрами) и целочисленную версию этой строки. Строка, представленная в этом примере, представляет собой число 3 di git. функция для l oop, кажется, возвращает только первый di git, только поэтому продолжение может работать не так, как ожидалось.

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

Ответы [ 3 ]

2 голосов
/ 06 августа 2020

Потому что вы составляете список в l oop. Просто сделайте это за пределами l oop. Также вместо str(s), что делает строковое представление списка, используйте str.join, так как он объединяет все элементы списка в строку. Также нет необходимости в инструкции continue. Поскольку elif не будет работать, если if имеет значение True.

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
0 голосов
/ 06 августа 2020

Рискуя полностью упустить суть того, что вы пытаетесь сделать, вся эта функция может быть просто:

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
0 голосов
/ 06 августа 2020

У вас есть return, поэтому в первый раз, когда вы нажмете нечисловой символ c, вы вернете этот символ и выйдете. Как написано, continue ничего не сделает, поскольку следующий elif не будет затронут каким-либо символом, который отправит вам первую ветвь оператора if.

...