你好我正在阅读这本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的类型,它以int形式出现。
答案 0 :(得分:6)
你需要括号:
' ' * (70 - sub) + 'Allen'
您的代码评估为:
((' ' * 70) - sub) + 'Allen'
这不起作用,因为你不能从字符串中减去一个int。
答案 1 :(得分:5)
正如马克所说,你需要围绕减法做括号。
此外,您正在传递的参数中执行right_justify的工作。该功能只是打印出你现在提供的内容。
你应该只传递一个字符串s,然后让right_justify对字符串进行处理(即计算出它的长度,然后在它之前添加适当数量的空格),然后再打印它。
类似的东西:
def right_justify(s):
sub = len(s)
new_s = ' ' * (70 - sub) + s
print new_s
right_justify('Allen')
答案 2 :(得分:0)
def right_justify(s): 。 print(''*(70-len(s))+ s) 。 right_justify( '艾伦') 艾伦
http://en.wikibooks.org/wiki/Think_Python/Answers#Exercise_3.3