Я переведу код на простой английский sh так подробно, как смогу:
Here are the rules that take a value `inp` and compute the `string` of that `inp`:
Letting `i` take on each integer value from 0 up to but not including `inp`:
We are done. The `string` of `inp` is equal to the string '*' repeated `i` times.
Compute the `string` of `5` and display it.
Надеюсь, проблема очевидна: мы можем выполнить задачу только один раз, и i
в этот момент равно 0, поэтому наше вычисленное значение представляет собой пустую строку.
Когда я пишу print
, он выдает мне звезду, но также дает мне None
Исходя из описанного поведения, я предполагаю, что вы имеете в виду, что вы пытались заменить слово return
в своем коде на print
, давая:
def string(inp):
for i in range (inp):
print(i*"*")
print (string(5))
Это дает треугольник , конечно, за исключением того, что
- Поскольку
i
будет равно 0 в первый раз через l oop, печатается пустая строка; и поскольку i
будет равно 4 время последнее через l oop, строки *****
нет. - В конце,
None
печатается, как вы описываете. Это происходит потому, что значение, вычисленное с помощью string
, является специальным значением None
, которое затем print
ed, потому что вы просили его напечатать (print(string(5))
).
In Python, каждый вызов функции будет возвращать значение, когда оно возвращается, независимо от того, используете ли вы return
и указываете ли вы значение return
. По умолчанию используется это специальное значение None
, которое является уникальным объектом своего типа. При печати он отображается с текстом None
, но отличается от строки с этим текстом (точно так же, как целое число 5
отличается от строки "5"
).
Могу ли я узнать, почему return
или print
не работают должным образом?
Они работают точно так, как задумано. return
определяет результат вызова функции и может произойти только один раз для каждой функции и не вызывает ничего для отображения. print
отображает то, что ему дано.
Если вы используете несколько значений от sh до return
в вызове, вам нужно обойти это ограничение - либо с помощью генератора вместо этого (как в ответах @ MadPhysicist или @ wjandrea) или с использованием какого-то одного структурированного элемента данных, который содержит все эти значения (например, список или кортеж).