Странное утверждение в функции if - PullRequest
0 голосов
/ 02 сентября 2018

Я получил действительно странный вывод из следующей функции python:

s = "-8.8373347749999997e-08"
def roundNumb(numb, pos):
    print("roundNumb()", numb , pos)
    ret = ""
    if int(numb[pos]) < 5:
        ret = numb[:pos]
        print("if int(numb[pos]) < 5: ", int(numb[pos]), " ", ret)
    else:
        if int(numb[pos]) == 9:
            ret = roundNumb(numb , pos - 1)
            print("int(numb[pos]) == 9 ", int(numb[pos]), " ",ret)
        else:
            ret = numb[:(pos-1)] + str(int(numb[(pos-1)]) + 1)
            print("else:", ret)
    return ret


>>> roundNumb(s, 12)
roundNumb() -8.8373347749999997e-08 12
roundNumb() -8.8373347749999997e-08 11
if int(numb[pos]) < 5:  4   -8.83733477
int(numb[pos]) == 9  9   -8.83733477
'-8.83733477'

Как вы можете видеть, функция roundNumb была вызвана дважды, но я не совсем понимаю, почему. Должен заканчиваться первым оператором if:

if int(numb[pos]) < 5:

1 Ответ

0 голосов
/ 02 сентября 2018

Вы вызываете функцию roundNumb(s, 12) // where numb[pos] = 9

тогда функция переходит в блок else и выполнить, если блок

if int(numb[pos]) == 9:

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

ret = roundNumb(numb , pos - 1) // and herer is function execution pause

print("int(numb[pos]) == 9 ", int(numb[pos]), " ",ret)

и затем functoin выполняется, если блок вашей функции

if int(numb[pos]) < 5:

ret = numb[:pos]

print("if int(numb[pos]) < 5: ", int(numb[pos]), " ", ret)

затем выполните эту функцию печати и затем эта приостановленная функция возобновится и затем выполните эту функцию печати

print("int(numb[pos]) == 9 ", int(numb[pos]), " ",ret)

знание о рекурсии очень полезно, чтобы понять это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...