添加int和str

phi*_*ndt 1 python

你好,我正在读这本蟒蛇书,其中一个练习说:

编写一个名为right_justify的函数,该函数将名为s的字符串作为参数,并打印具有足够前导空格的字符串,以便字符串的最后一个字母位于显示的第70列.

好吧所以我有以下代码打印70个空格和字符串'allen'

def right_justify(s):
    print s
right_justify(' ' * 70 + 'Allen')
Run Code Online (Sandbox Code Playgroud)

但当我试图从字符串'Allen'中减去空格数

sub = len('allen')
def right_justify(s):
    print s
right_justify(' ' * 70 - sub + 'Allen')
Run Code Online (Sandbox Code Playgroud)

我得到:

" - str'和'int'的"不支持的操作数类型"

为什么没有子变量就可以工作呢?我检查了sub的类型,它以int形式出现.

Mar*_*ers 6

你需要括号:

' ' * (70 - sub) + 'Allen'
Run Code Online (Sandbox Code Playgroud)

您的代码评估为:

((' ' * 70) - sub) + 'Allen'
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为你不能从字符串中减去一个int.

  • @philhxc,如果他的回答有帮助,请单击答案旁边的复选标记表示您接受答案.此外,Jdog的回答有很好的建议. (2认同)

Jdo*_*dog 5

正如马克所说,你的减法需要括号.

此外,您正在传递的参数中执行right_justify的工作.该功能只是打印出你现在提供的内容.

你应该只传递一个字符串,然后让right_justify对字符串进行处理(即计算出它的长度,然后在它之前添加适当数量的空格),然后再打印它.

就像是:

def right_justify(s):
    sub = len(s)
    new_s = ' ' * (70 - sub) + s 
    print new_s

right_justify('Allen')
Run Code Online (Sandbox Code Playgroud)