Изучаю Python и нуждаюсь в помощи в перемещении символа без нарушения остальной части кода

#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. Интересно. Спасибо.