我正在尝试制作一个反向函数,它接受输入(文本)并输出反转版本.所以"Polar"会打印raloP.
def reverse(text):
list = []
text = str(text)
x = len(text) - 1
list.append("T" * x)
for i in text:
list.insert(x, i)
x -= 1
print "".join(list)
reverse("Something")
Run Code Online (Sandbox Code Playgroud)
正如其他人所提到的,Python已经提供了几种方法来反转字符串.简单的方法是使用扩展切片:s[::-1]创建一个反向版本的字符串s.另一种方法是使用该reversed功能:''.join(reversed(s)).但我想尝试为自己实施它可能是有益的.
您的代码有几个问题.
首先,
list = []
Run Code Online (Sandbox Code Playgroud)
您不应该将其list用作变量名称,因为它会影响内置list类型.它不会在这里受到伤害,但它会使代码混乱,如果你稍后尝试list()在函数中使用它会引发一个带有神秘错误消息的异常.
text = str(text)
Run Code Online (Sandbox Code Playgroud)
是多余的.text已经是一个字符串.str(text)返回原始的字符串对象,所以它不会伤害任何东西,但它仍然毫无意义.
x = len(text) - 1
list.append("T" * x)
Run Code Online (Sandbox Code Playgroud)
你在这里有一个错误的错误.你真的想用原始字符串中的项目填充列表,这是一个简短的项目.此外,此代码将字符串作为单个项目附加到列表中,而不是作为x每个字符的单独项目.
list.insert(x, i)
Run Code Online (Sandbox Code Playgroud)
该.insert方法将新项目插入到列表中,插入点之后的后续项目向上移动以腾出空间.我们不希望这样,我们只想覆盖该x位置的当前项目,我们可以通过索引来实现.
当您的代码没有按照您期望的方式运行时,print在战略位置添加语句以确保变量具有它们应该具有的值是一个好主意.这使得更容易找到出错的地方.
无论如何,这是修复后的代码版本.
def reverse(text):
lst = []
x = len(text)
lst.extend("T" * x)
for i in text:
x -= 1
lst[x] = i
print "".join(lst)
reverse("Something")
Run Code Online (Sandbox Code Playgroud)
产量
gnihtemoS
Run Code Online (Sandbox Code Playgroud)
这是另一种方法,展示如何使用.insert:
def reverse(text):
lst = []
for i in text:
lst.insert(0, i)
print "".join(lst)
Run Code Online (Sandbox Code Playgroud)
最后,我们可以使用字符串连接,而不是使用列表.但是,这种方法的效率较低,特别是对于庞大的字符串,但在现代版本的Python中,它并不像以前那样低效,因为该str类型已经过优化以处理这种相当常见的操作.
def reverse(text):
s = ''
for i in text:
s = i + s
print s
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你真的应该学习Python 3,Python 2在2020年达到其官方生命终结.