python-3.x - 无法使用“for”循环函数反转文本
问题描述
我想使用循环和函数来反转字符串。但是当我使用以下代码时,它再次输出完全相同的字符串。但它假设反转字符串。我不知道为什么。
def reversed_word(word):
x=''
for i in range(len(word)):
x+=word[i-len(word)]
print(i-len(word))
return x
a=reversed_word('APPLE')
print(a)
解决方案
如果您查看调试语句的输出(print
函数中的 ),您会看到您正在使用索引-5
到-1
.
由于负索引指定到字符串末尾的距离, -5
is A
,-4 是第一个P
,依此类推。而且,由于您将这些依次附加到最初的空字符串中,因此您只需按照它们在原始字符串中出现的顺序添加字母。
要以其他顺序添加它们,您可以简单地使用len(word) - i - 1
作为索引,给出序列(len-1) .. 0
(而不是-len .. -1
,它等于0 .. (len-1)
):
def reversed_word(word):
result = ""
for i in range(len(word)):
result += word[len(word) - i - 1]
return result
另一种选择是意识到您根本不需要使用索引,因为迭代字符串一次会给您一个字符。但是,由于它按顺序为您提供了这些字符,因此您需要通过为每个字符添加前缀而不是附加来调整构建反转字符串的方式:
def reverse_string(word):
result = ""
for char in word:
result = char + result
return result
APPLE
这将反向字符串(从)构建为A
、PA
、PPA
和。LPPA
ELPPA
当然,你也可以完全Pythonic:
def reverse_string(word):
return "".join([word[i] for i in range(len(word), -1, -1)])
这使用列表推导在原始字符串中创建一个字符列表(以相反的顺序),然后将该列表连接成一个字符串(带有一个空分隔符)。
可能不是我交作业的东西(除非我想惹恼标记),但你应该知道,这就是专业的 Pythonistas 通常解决问题的方式。
推荐阅读
- pandas - 带有许多列的 Pandas v 0.25 groupby 会导致内存错误
- oracle - Oracle TO_DATE 错误地转换了 2020/01/07 之后的日期
- javascript - Puppeteer - 如何在没有导航的情况下点击链接
- vb.net - 打开非活动的comport,插入用户名和密码
- node.js - 如何从另一个位置访问图像以创建反应应用程序?
- javascript - webpack 中的 handlebars-loader 是做什么的?
- python - Hyperopt 分类任务引发错误“TypeError: __init__() got an unexpected keyword argument 'n_iter'”
- python - 我用 dict.pop 的“For”直到最后都没有做
- ios - 使用 UserDefault 自定义套件作为命名空间键
- python - 使用自定义类方法/函数安全使用 exec()?