Может ли кто-нибудь дать мне правильное обоснование, потому что я ожидал, что anser будет 9, а результат - «0»? - PullRequest
0 голосов
/ 10 июля 2020
def print_nums(x):
    for i in range(x):
        print(i)
        return 

print_nums(10)

С этим кодом я ожидал, что ответ будет 9, но я был очень удивлен, увидев 0 в качестве ответа. Кто-нибудь может предоставить надлежащее обоснование?

Ответы [ 3 ]

2 голосов
/ 10 июля 2020
def print_nums(x):
    for i in range(x): # Loop starts. In first iteration of loop, i = 0
        print(i)       # Prints 0, since i = 0
        return         # The function execution stops here and it exits

print_nums(10)

Приведенный выше код будет запускаться и останавливаться только на первой итерации l oop. Это связано с тем, что return приведет к прямому выходу из функции, и поэтому выполнение функции остановится на этом.

Вы, вероятно, намеревались использовать функцию следующим образом -

def print_nums(x):
    for i in range(x):
        print(i)
    return 

print_nums(10)

Вывод:

0
1
2
3
4
5
6
7
8
9

В приведенном выше случае возврат не требуется. либо если он не возвращает то, что вы используете. В любом случае я не понимаю, как вы ожидаете, что на выходе будет 9. Вышеупомянутая функция напечатает все числа из 0 to x-1.

Если вы ищете l oop из 0 to x-1 и, наконец, печатаете x-1, вы можете сделать это так -

def print_nums(x):
    i = 0
    for i in range(x):
        # Some work done here
        pass
    print(i)     # Prints x-1 and returns from the function
    return 

print_nums(10)

Вывод:

9

Надеюсь, это поможет!

1 голос
/ 10 июля 2020

это потому, что вы вызываете return внутри for l oop. поэтому функция возвращается сразу после первого l oop

0 голосов
/ 10 июля 2020

ваш возврат находится в неправильном месте

def print_nums(x):
for i in range(x):
    print(i)
return 

print_nums(10)

будет печатать 0-9 в новой строке каждый раз, если вы хотите просто напечатать 9, вы должны сделать

def print_nums(x):
    for i in range(x):
    return i

print_nums(10)
...