#python #design-patterns
#python #дизайн-шаблоны
Вопрос:
Я могу получить пустой квадрат, но, похоже, не могу понять, как заполнить правую половину квадрата. Вот что у меня есть…
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()
Ответ №1:
Добавьте явную проверку:
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
Ответ №2:
Вы можете вычислить ширину пробелов слева, разделив общую ширину без границы на 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='')
Обратите внимание, что вместо цикла для многократной печати символа вы можете использовать оператор repeat для строк, поэтому приведенный ниже код будет достаточным и более читаемым:
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)