Попытка заменить нормальную переменную на% в операторе печати - PullRequest
0 голосов
/ 03 ноября 2018

В основном я изучаю некоторые основы Python и без проблем выполнил следующее:

print(var1 + ' ' + (input('Enter a number to print')))

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

Пробовал это отдельно от другого кода: print(%s + ' ' + (input('Enter a number to print')) %(var)) но выдает синтаксическую ошибку на% s

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Не. Этот способ форматирования строк взят из Python 2.x, и в Python 3.x есть много способов справиться с форматированием строк:


В вашем коде 2 проблемы:

print(var1 + ' ' + (input('Enter a number to print')))

- если строка var1 работает, если нет - вылетает:

var1 = 8
print(var1 + ' ' + (input('Enter a number to print')))

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    print(var1 + ' ' + (input('Enter a number to print')))
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Вы могли бы сделать

var1 = 8
print(var1 , ' ' + (input('Enter a number to print')))

но потом вы потеряли возможность форматировать var1. Кроме того: input оценивается перед print, поэтому его текст находится в одной строке, за которым следует вывод print -statements - зачем тогда ставить их в одну строку?

Лучше:

var1 = 8

# this will anyhow be printed in its own line before anyway
inp = input('Enter a number to print')

# named formatting (you provide the data to format as tuples that you reference
# in the {reference:formattingparams}
print("{myvar:>08n} *{myInp:^12s}*".format(myvar=var1,myInp=inp))

# positional formatting - {} are filled in same order as given to .format()
print("{:>08n} *{:^12s}*".format(var1,inp))

# f-string 
print(f"{var1:>08n} *{inp:^12s}*")

# showcase right align w/o leading 0 that make it obsolete
print(f"{var1:>8n} *{inp:^12s}*")

Выход:

00000008 *   'cool'   *
00000008 *   'cool'   *
00000008 *   'cool'   *
       8 *   'cool'   *

Параметры мини-формата означают:

:>08n    right align, fill with 0 to 8 digits (which makes the > kinda obsolete)
         and n its a number to format

:^12s    center in 12 characters, its a string

Посмотрите также print (* objects, sep = '', end = '\ n', file = sys.stdout, flush = False) . У него есть несколько вариантов управления выводом - например, что использовать в качестве разделителя, если дано несколько вещей:

print(1,2,3,4,sep="--=--") 
print(  *[1,2,3,4], sep="\n")  # *[...] provides the list elemes as single params to print

Выход:

1--=--2--=--3--=--4

1
2
3
4
0 голосов
/ 03 ноября 2018

Возможно, вы имеете в виду что-то вроде этого:

print('%s %s'%(var1, input('Enter a number to print')))

%s идет внутри кавычек и указывает положение элементов, которые вы хотите вставить в строку.

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