Как напечатать наполовину заполненный квадрат звездочки? - PullRequest
0 голосов
/ 19 марта 2019

Я могу получить полый квадрат, но я не могу понять, как заполнить правую половину квадрата. Вот что у меня есть ...

def star():
    """ Display a star without the normal new line """
    print('*', end='')
def space():
    """ Display a space without the normal new line """
    print(' ', end='')
def newline():
    """ Display a new line """
    print()

def halfAndHalf(size):
    """ Display a square that is half filled 
        - This example has size = 6
    ******  
    *  ##*
    *  ##*
    *  ##*
    *  ##*
    ******    
    """
    print('Half and half square of size', size)
    for i in range(size):
        star()
    newline()
    for i in range(size - 2):
        star()
        for j in range(size - 2):
            space()
        star()
        newline()
    for i in range(size):
        star()
    newline()

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

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

def halfAndHalf(size):
    print('Half and half square of size', size)
    for i in range(size):
        print('*', end='')
    print('\n', end='')
    for i in range(size - 2):
        padding_size = size // 2 - 1
        print('*', end='')
        for j in range(padding_size):
            print(' ', end='')
        for j in range(size - 2 - padding_size):
            print('#', end='')
        print('*', end='')
        print('\n', end='')
    for i in range(size):
        print('*', end='')
    print('\n', end='')

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

def halfAndHalf(size):
    print('Half and half square of size', size)
    print('*' * size)
    padding_size = size // 2 - 1
    for i in range(size - 2):
        print('*' + ' ' * padding_size + '#' * (size - 2 - padding_size) + '*')
    print('*' * size)
0 голосов
/ 19 марта 2019

Добавить явную проверку:

def star(): print('*', end = '')
def newline(): print()
def space(): print(' ', end = '')
def sharp(): print('#', end = '')

def halfAndHalf(size):
    print('Half and half square of size', size)
    for i in range(size):
        star()

    newline()
    sz = size - 2;

    for i in range(sz):
        star()
        for j in range(sz):
            space() if (j < sz / 2) else sharp(); # <- check here

        star()
        newline()

    for i in range(size):
        star()

    newline()

def main():
  halfAndHalf(20);

if (__name__ == '__main__'):
  main();

Выход:

Half and half square of size 20
********************
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
*         #########*
********************

Если вы не знакомы с троичным оператором space() if (j < sz / 2) else sharp(), вы можете использовать простой if или обратиться к документации Python

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