строительство башни * в питоне - PullRequest
0 голосов
/ 31 октября 2019

Я работаю над этим испытанием, в котором на основе заданного числа будет показано увеличение звездочки (*) на нечетное число. В основном результат должен быть таким: если я запустил функцию ниже и установил n_floor на 5, он должен показать результат ниже. Мой код каким-то образом повторяется на число этажей и увеличивает * на нечетное число, но результат не получается, но это потому, что интервал между звездочками между этими кавычками неверен. Любая идея / совет, как это исправить?

a. Правильный результат

['    *    ', '   ***   ', '  *****  ', ' ******* ', '*********']

b. РЕЗУЛЬТАТ из моего сценария ниже:

['*', '***', '*****', '*******', '*********']
def tower_builder(n_floor):
    a = '*'
    b = 1
    c= 0
    result = []
    num=range(1, n_floor+1)

    # * to increment by odd number
    for x in num:
        c = a
        result.append(c)
        a += str('**')
    return result

Ответы [ 2 ]

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

Вот лучший способ вычислить нужную ширину:

def tower_builder(n_floor):
    result = []
    width = (n_floor * 2) - 1
    for x in range(1, 2 * n_floor, 2):
        stars = x * '*'
        line = stars.center(width)
        result.append(line)
    return result


assert tower_builder(1) == ['*']
assert tower_builder(2) == [' * ', '***']
assert tower_builder(3) == ['  *  ', ' *** ', '*****']
assert tower_builder(4) == ['   *   ', '  ***  ', ' ***** ', '*******']
assert tower_builder(5) == ['    *    ', '   ***   ', '  *****  ', ' ******* ', '*********']
1 голос
/ 31 октября 2019

Как и в комментариях, вы захотите использовать str.center. Для конкретного примера, это также указывает на то, что каждый «этаж» имеет нечетное количество символов, так что вы можете немного упростить свою функцию.

def tower_builder(n_floor):
    window = '☐'
    total_width = 20  # this may get bigger if you have a very tall building

    floor_strings = []
    for floor_idx in range(n_floor):
        # because widths are always odd
        width = 2 * floor_idx + 1
        # construct this floor
        floor_string = (window*width).center(total_width)
        # add it to the list
        floor_strings.append(floor_string)

    # join them all together with newlines
    return '\n'.join(floor_strings)

print(tower_builder(5))                                                                        
         ☐          
        ☐☐☐         
       ☐☐☐☐☐        
      ☐☐☐☐☐☐☐       
     ☐☐☐☐☐☐☐☐☐      

В качестве примечания вы можете вычислитьчто total_width должно быть, начиная с самого широкого этажа (или вычисляя его, что не очень сложно) и используя его как total_width.

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