【问题标题】:Trying to reverse a string by prepending characters尝试通过添加字符来反转字符串
【发布时间】:2021-03-09 20:27:00
【问题描述】:

我正在开发一个反转字符串的函数,当我运行它时出现两个错误,一个在tot -= i 显示TypeError: unsupported operand type(s) for -=: 'str' and 'str',另一个在print(reverse(thestr))。

但是,如果我将+ 放入tot += i,它就可以工作。我该如何解决这个问题,至于我在使用-时的理解会反其道而行之?

def reverse(c):
    tot = ''
    for i in c:
        tot -= i
    return tot
thestr = 'This is a Test'
print(reverse(thestr))

【问题讨论】:

  • - 运算符没有为字符串定义。认为tot -= i 将i 添加到tot 的左侧是个好主意,但这不是它的工作原理。
  • 改用tot = i + tot。
  • 也许您应该在i 的右侧添加tot 并将其分配回tot?
  • 这能回答你的问题吗? Prepend text to beginning of string(哎呀,这是 JavaScript,但答案是一样的......)
  • “据我所知,使用 - 它会反过来”不,事实并非如此,因为错误表明

标签: python python-3.x


【解决方案1】:

据我了解,使用 - 它会反过来

这是不正确的。

要预先添加,您可以这样做:

tot = i + tot

或者,要更 Python 化地解决问题,请使用 reversed():

def reverse(c):
    tot = ''
    for i in reversed(c):
        tot += i
    return tot

然后可以使用''.join() 进行简化:

def reverse(c):
    return ''.join(reversed(c))

或者干脆使用反向切片:

def reverse(c):
    return c[::-1]

【讨论】:

  • 反转字符串的“pythonic”方法很简单,如果你打算使用reversed,你最好使用reversed
  • @juanpa 哦,是的,我忘了,哈哈。已添加,谢谢
  • 感谢您提供的信息。我正在向你们所有人学习很多东西。谢谢
【解决方案2】:

您的代码不会反转字符串。这将:

def reverse(c):
    l = len(c)
    tot = ''
    for i in range(l):
        tot += c[l - i - 1]
    return tot
thestr ='This is a Test'
print(reverse(thestr))

【讨论】:

  • for i in reversed(range(len(c))): tot += c[i] 更简单一些,但是当你可以像我在my answer 中写的那样做for i in reversed(c): tot += i 时,使用索引是没有意义的。
  • 使用索引是开始 IMO 的更好地方。初学者可能会对reversed 的工作原理感到困惑
猜你喜欢
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 2014-01-30
相关资源
最近更新 更多