整型与字符串相加
你好,我正在看一本关于Python的书,其中有一个练习题是:
写一个名为right_justify的函数,这个函数接收一个字符串s作为参数,并打印这个字符串,前面加上足够的空格,使得字符串的最后一个字母在显示的第70列。
好的,我有以下代码,它打印了70个空格和字符串'allen'
def right_justify(s):
print s
right_justify(' ' * 70 + 'Allen')
但是当我尝试从字符串'Allen'中减去空格的数量时
sub = len('allen')
def right_justify(s):
print s
right_justify(' ' * 70 - sub + 'Allen')
我得到了:
"不支持的操作数类型:'str'和'int'"
为什么在没有sub变量的情况下可以工作,而有了它就不行呢?我检查过sub的类型,它是一个整数。
3 个回答
这个代码定义了一个叫做 `right_justify` 的函数。它的作用是把传入的字符串(比如名字)放到一行的右边,前面加上空格。具体来说,代码里用 `print` 函数来输出结果。这里的 `70-len(s)` 是在计算需要多少个空格,`len(s)` 是获取字符串的长度。然后用 `' '*(70-len(s))` 生成对应数量的空格,最后把这些空格和字符串 `s` 拼在一起,输出到屏幕上。
例如,当你调用 `right_justify('allen')` 时,它会在屏幕上显示出 'allen',前面加上足够的空格,让它对齐到右边。
http://en.wikibooks.org/wiki/Think_Python/Answers#Exercise_3.3
正如Mark所说,你需要在减法运算周围加上括号。
另外,你在传递给函数的参数中已经做了右对齐的工作。这个函数其实只是把你给它的内容打印出来而已。
你应该只传递一个字符串s,让right_justify函数来处理这个字符串(也就是说,先计算它的长度,然后在它前面加上适当数量的空格)再进行打印。
可以这样做:
def right_justify(s):
sub = len(s)
new_s = ' ' * (70 - sub) + s
print new_s
right_justify('Allen')
你需要加上括号:
' ' * (70 - sub) + 'Allen'
你的代码被计算成:
((' ' * 70) - sub) + 'Allen'
这样是不行的,因为你不能从一个字符串中减去一个整数。