#python #formatting
#python #форматирование
Вопрос:
Я изучаю Python и нуждаюсь в небольшой помощи в перемещении моих символов на несколько пробелов влево. Я выполнил задание и не ищу помощи по домашнему заданию. Я просто хочу, чтобы с моей стороны это выглядело лучше. На картинке, которую я добавил по ссылке ниже, вы можете видеть, что «#» находится слишком далеко вправо. Я бы хотел, чтобы он располагался рядом с четными числами. Я попытался сделать больше пробелов в своих операторах печати, но все, что это делает, это перемещает всю мою таблицу. Как мне сделать так, чтобы это «#» располагалось прямо рядом с моими четными числами?
Вот мой код.
#ask for user input on size of Multiplication Table.
size = int(input("What size Multiplication Table would you like? (2-10):"))
while (size <2) or (size >10):
print("Invalid entery! Enter a Number Between 2 and 10")
size = int(input("What size Multiplication Table would you like? (2-10):"))
print()
print()
#dispaly header
print(" --- Multiplication Table(",size,"x",size,") ---")
print(" ",end="")
size = 1
for h in range(1,11):
if h == 10:
print(" ",h, end=" ")
else:
print(" ",h, end=" ")
print()
for h in range(1,100):
print('-',end='')
print()
#display Multiplication Table
#outer loop
for a in range(1,size):
if a ==10:
print('',a,'|',end='')
else:
print('',a,' |',end='')
#inner loop
for b in range(1,size):
result = a * b
if result >=100:
print(' ',result, end=' ')
elif result >=10:
print(' ',result, end=' ')
else:
print(' ', result, end=' ')
# for putting '#' at the end of even numbers
if result %2==0:
print('#', end='')
elif result == 100:
print('', end='')
else:
print(' ', end='')
print()
Комментарии:
1. подсказка:
print(f":{str(result):>3.3}:")
выравнивание по правому краю до 3. это несколько упростило бы вашу логику форматирования. разбивкаf"{result}"
выводит результат.:3.3
всегда занимает 3 пробела (обрезает и дополняет).:>3:3' puts the padding before. but you can't using string format qualifiers on integers, which is why
сначала нужен str(result)`.
Ответ №1:
Я внес минимальные изменения в ваш внутренний цикл, чтобы добиться желаемого эффекта:
for b in range(1,size):
result = a * b
# for putting '#' at the end of even numbers
if result %2==0:
end_str='#'
elif result == 100:
end_str=''
else:
end_str=' '
if result >=100:
print(' ',result, end=end_str ' ')
elif result >=10:
print(' ',result, end=end_str ' ')
else:
print(' ', result, end=end_str ' ')
Вывод, с этой модификацией:
1 2 3 4 5 6 7 8 9 10
---------------------------------------------------------------------------------------------------
1 | 1 2# 3 4# 5 6# 7 8# 9 10#
2 | 2# 4# 6# 8# 10# 12# 14# 16# 18# 20#
3 | 3 6# 9 12# 15 18# 21 24# 27 30#
4 | 4# 8# 12# 16# 20# 24# 28# 32# 36# 40#
5 | 5 10# 15 20# 25 30# 35 40# 45 50#
6 | 6# 12# 18# 24# 30# 36# 42# 48# 54# 60#
7 | 7 14# 21 28# 35 42# 49 56# 63 70#
8 | 8# 16# 24# 32# 40# 48# 56# 64# 72# 80#
9 | 9 18# 27 36# 45 54# 63 72# 81 90#
10 | 10# 20# 30# 40# 50# 60# 70# 80# 90# 100#
Комментарии:
1. Большое вам спасибо за вашу помощь, это именно то, что я искал.
Ответ №2:
Попробуйте это:
for b in range(1,size):
result = a * b
flag = " " if result % 2 else "#"
#put the number and the flag together
temp = f"{result}{flag}"
#and pad the number flag to a constant length
print(f' {temp:6.6}', end="")
смотрите Мой комментарий под вопросом о более четкой разбивке того, как работает форматирование f-string.
вывод:
--- Multiplication Table( 4 x 4 ) ---
1 2 3 4 5 6 7 8 9 10
---------------------------------------------------------------------------------------------------
1 | 1 2# 3 4#
2 | 2# 4# 6# 8#
3 | 3 6# 9 12#
4 | 4# 8# 12# 16#
смотрите мой комментарий о том, как работает форматирование f-string. не удалось найти действительно четкую ссылку о том, как задается форматирование f"{<variable>:<formatting-to-apply>}"
, поэтому не могу связать его, но он также выполняет такие вещи, как нули и форматирование с плавающей точкой.
Комментарии:
1. Интересно. Спасибо.