Напишите функцию, которая принимает строку в качестве аргумента и отображает буквы, по одной на строку, используя циклы в python - PullRequest
0 голосов
/ 05 октября 2019

Я учусь программировать, и я использую «как думать, как ученый». Вышеупомянутый вопрос - упражнение. Это программа без функции

fruit = "banana"

index = 0

while index < len(fruit):

letter = fruit[index]
print(letter)
index = index + 1

Я хочу поставить этов функцию, подобную

def tranversal(fruit):
    index = 0

    while index < len(fruit):

        letter = fruit[index]
        return letter
        index += 1

        print(tranversal("apple"))

Однако это только печать первой буквы «яблока», и если я использую оператор print вместо return, я получу None. Я очень запутался и мне нужна помощь !!

Ответы [ 6 ]

1 голос
/ 05 октября 2019

Простое решение:

print(*'banana', sep='\n')

Вывод:

b
a
n
a
n
a

С помощью оператора * вы можете разбить список или строку на части и передать ихв качестве нескольких аргументов для функции. Таким образом, выражение print(*'abc') эквивалентно print('a', 'b', 'c').

1 голос
/ 05 октября 2019

Если вы используете print в функции, вам не нужно использовать print при вызове функции.

def tranversal(fruit):

    index = 0

    while index < len(fruit):

        letter = fruit[index]

        print(letter)

        index += 1

tranversal("apple")

Если вы используете оператор return внутри цикла while, вы сразу же покинетефункция (и возвращает первую букву), и цикл while не будет выполняться для более высоких индексов.

0 голосов
/ 07 октября 2019

В целях понимания я хотел выполнить это упражнение с помощью функции while и получить возвращаемое значение. Я получил помощь, и я ценю всех, вот мой код:

def `tranversal`(fruit):

   result = ""

   length = int(len(fruit))

   index = 0

   while index < length:

        result += fruit[index]

        index += 1

        if index == length:

            return "\n".join(result)

print(tranversal("string"))
0 голосов
/ 05 октября 2019

Вы можете использовать этот фрагмент кода

def printAllChar(s):
    for i in s:
        print(i,end='\n')


//calling here...
printAllChar("ProgRank")

//output here...

P
r
o
g
R
a
n
k
0 голосов
/ 05 октября 2019

Похоже, вы не поняли цель выражения return внутри функции. Вы можете сначала прочитать этот ответ , чтобы прояснить ситуацию.

Как только вы поймете разницу между print() и return, вы должны определить, что ваша функция должна делать. Нужно ли возвращать ответ или достаточно печатать его на экране?

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

def transversal(fruit):
    for letter in fruit:
        print(letter)

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

foo = transversal("banana")

переменная foo будет содержать значение None.

Если вы хотите, чтобы вашФункция, чтобы вернуть ответ и не печатать его, вы можете добавить каждую букву к пустой строке result, с разделителями для каждой новой строки, и после того, как вы закончите с этим, просто верните result. Это может быть хорошим упражнением, поэтому вы должны попробовать его:).

0 голосов
/ 05 октября 2019

Вы должны выполнить оператор, используя функцию за пределами функции. Просто сдвиньте return tranversal("apple") за пределы функции transversal следующим образом:

def transversal(fruit):
    index = 0
    letters = ''

    while index < len(fruit):

        letters += fruit[index] + '\n'
        index += 1
    return letters

print(transversal("apple"))

Спасибо @MykolaZotko за указание на ошибку в коде, из-за которой он печатал только первую букву.

...