Так что у меня есть код, который отлично работает без функции. Но я хочу изменить это внутри функции, но она не работает должным образом. Например, у меня есть конец = "". Это не работает в ...

-3
The Kingfisher 6 Апр 2021 в 02:11

2 ответа

Лучший ответ

Функция должна присоединяться к строке вместо печати, а затем возвращать строку. Добавьте \n, чтобы добавить новую строку.

def underscore_hash_staircase(number):
    result = ""
    if number > 0:
        k = 2 * number - 2
        for i in range(0, number):
           for j in range(number-1, k):
                result += "_"
           k = k - 1
           for j in range(0, i + 1):
               result += "#"
           result += "\n"
    else:
        number = -number
        i = number
        while i >= 1:
            j = number
            while j > i:
                result += "_"
                j -= 1
            k = 1
            while k <= i:
                result += "#"
                k += 1
            result += "\n"
            i -= 1
    return result

print(underscore_hash_staircase(8))

Вам также не нужны все эти внутренние петли. Вы можете повторить строку, умножив ее.

def underscore_hash_staircase(number):
    result = ""
    if number > 0:
        k = 2 * number - 2
        for i in range(1, number + 1):
           result += "_" * (number - i)
           result += "#" * i
           result += "\n"
    else:
        number = -number
        for i in range(number, 0, -1):
            result += "_" * (number - i)
            result += "#" * i
            result += "\n"
    return result

print(underscore_hash_staircase(8))
print(underscore_hash_staircase(-8))
0
Barmar 5 Апр 2021 в 23:29

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

def underscore_hash_staircase(number):
    returnValue = ""  # start as empty string

    if number > 0:
        k = 2 * number - 2
        for i in range(0, number):
            for j in range(number-1, k):
                returnValue += "_"
            k = k - 1
            for j in range(0, i + 1):
                returnValue += "#"
            returnValue += "\n"  # adding a new line
    else:
        number = int(str(number).replace("-", ""))
        i = number
        while i >= 1:
            j = number
            while j > i:
                returnValue += "_"
                j -= 1
            k = 1
            while k <= i:
                returnValue += "#"
                k += 1
            returnValue += "\n"
            i -= 1
            
print(underscore_hash_staircase(8))

Изменить: пропустил печать при замене

1
Scrapper142 5 Апр 2021 в 23:25