首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图在print语句中用%替换普通变量

试图在print语句中用%替换普通变量
EN

Stack Overflow用户
提问于 2018-11-03 09:23:33
回答 2查看 702关注 0票数 1

基本上,我正在学习一些python基础知识,并且没有执行以下问题:

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

现在,我试图使用%方法打印变量的输出和声明“您已经输入”的字符串。

除了其他代码:print(%s + ' ' + (input('Enter a number to print')) %(var))之外,还尝试过这样做,但是在%s上给出了语法错误

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-03 09:30:05

也许你的意思是这样的:

代码语言:javascript
复制
print('%s %s'%(var1, input('Enter a number to print')))

%s进入引号内,并指示要在字符串中插入的元素的位置。

票数 1
EN

Stack Overflow用户

发布于 2018-11-03 09:44:09

不要。这种格式化字符串的方法来自python2.x,在python 3.x中处理字符串格式的方法要简单得多:

您的代码有两个问题:

代码语言:javascript
复制
print(var1 + ' ' + (input('Enter a number to print')))

是,如果var1是一个字符串,它就能工作-如果不是,它会崩溃:

代码语言:javascript
复制
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'

你可以

代码语言:javascript
复制
var1 = 8
print(var1 , ' ' + (input('Enter a number to print')))

但随后您就失去了格式化var1的能力。另外:input是在print之前计算的,因此它的文本位于一行,然后是print-statements输出--那么为什么将它们放在同一行中呢?

更好的是:

代码语言:javascript
复制
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}*")

输出:

代码语言:javascript
复制
00000008 *   'cool'   *
00000008 *   'cool'   *
00000008 *   'cool'   *
       8 *   'cool'   *

迷你格式参数意味着:

代码语言:javascript
复制
:>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

您也可以看看对象,sep=‘',end='\n',file=sys.stdout,flush=False)。它有几个选项来控制输出- f.e。如果给出了多个东西,应该使用什么作为分隔器:

代码语言:javascript
复制
print(1,2,3,4,sep="--=--") 
print(  *[1,2,3,4], sep="\n")  # *[...] provides the list elemes as single params to print

输出:

代码语言:javascript
复制
1--=--2--=--3--=--4

1
2
3
4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53130002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档