【问题标题】:addition of int and str添加 int 和 str
【发布时间】:2011-11-30 17:21:46
【问题描述】:

你好,我正在阅读这本 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 形式出现。

【问题讨论】:

    标签: python


    【解决方案1】:

    def right_justify(s): . print (' '*(70-len(s))+s) . right_justify('艾伦') 艾伦

    http://en.wikibooks.org/wiki/Think_Python/Answers#Exercise_3.3

    【讨论】:

      【解决方案2】:

      正如马克所说,你需要在减法周围加上括号。

      此外,您正在传递的参数中执行 right_justify 的工作。该函数只是打印你现在给它的东西。

      您应该只传递一个字符串 s,然后让 right_justify 处理该字符串(即计算其长度,然后在其前面添加适当数量的空白),然后再打印它。

      类似:

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

      【讨论】:

      • 另外,这只是一个练习。在现实世界中,最好使用format。即:print '{:>30}'.format(s)
      • @philberndt 我粘贴的行与上面函数中的三行完全相同。它也应该更普遍。
      【解决方案3】:

      你需要括号:

      ' ' * (70 - sub) + 'Allen'
      

      您的代码被评估为:

      ((' ' * 70) - sub) + 'Allen'
      

      这不起作用,因为您不能从字符串中减去 int。

      【讨论】:

      • 是的,我试过了,但是我之前添加了错误的括号,我没有走错路,我尝试了 ((' ' * 70 - sub) + 'Allen') 谢谢
      • @philhxc,如果他的回答有帮助,请单击答案旁边的复选标记以表明您接受该答案。此外,Jdog 的回答也有很好的建议。
      猜你喜欢
      • 1970-01-01
      • 2022-12-04
      • 2012-05-08
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多