python - 如何在字符串中添加元素
问题描述
如何在字符串中添加一些元素?我写了这段代码,但它给了我这个错误:
“frase2[i] += frase[i]
IndexError:字符串索引超出范围“
我的代码是:
def copia(frase):
i = 0
while i < len(frase):
frase2 = ""
if (frase[i] >= 'a' and frase[i] <='z') or (frase[i] >= 'A' and frase[i] <= 'Z'):
frase2[i] += frase[i]
else:
frase2[i] += " "
i += 1
return frase2
frase = getString("Inserisci frase: ")
print(copia(frase))
我怎样才能解决这个问题?
解决方案
您的代码有两个问题。首先,正如已经指出的那样,frase2[i] +=
必须是frase2 += ...
,因为frase2[i]
尚不存在。您希望附加到整个字符串,而不是附加到那个特定的字符。其次,您frase2 = ""
在循环的每次迭代中设置。在循环开始之前移动那条线!
接下来,您可以通过直接迭代字符,使用for
循环而不是while
,并使用比较链接而不是那些复杂的and
和or
语句来改进代码:
def copia(frase):
frase2 = ""
for c in frase:
if 'a' <= c <= 'z' or 'A' <= c <= 'Z':
frase2 += c
else:
frase2 += " "
return frase2
或者你甚至可以使用str.isalpha
(不完全一样,但可能更像你真正想要的,例如还允许重音字符),使用三元a if c else b
并将循环移动到 a 内的生成器表达式中str.join
:
def copia(frase):
return ''.join(c if c.isalpha() else " " for c in frase)
推荐阅读
- angular - 在检测到 2 个更改后调用函数
- javascript - 根据循环中的变量设置表的可见性
- sqlite - 在 SQLite FLutter 数据库中创建 DATETIME 列?
- javascript - 获取 Lumen 控制器结果作为 Vue.js 组件
- python - 如何将 Flask 与在 Docker 容器中运行的 Postgres 连接起来?
- email - 在没有内容处置的 MimeKit 中识别邮件附件的问题
- java - 客户端线程(套接字)中的循环仅输入两次(android)
- apache-spark - 火花
:1: 错误:';' 预期但发现双重文字 - javascript - 如何防止或停止父组件在 vuejs 中重新渲染
- c# - 使用 SignalR、ASP.NET Core 和 SQL 依赖注入在浏览器中显示实时数据库更改