python - 为什么我在列表理解的 if 语句中收到“TypeError”?
问题描述
我正在做一个小密码项目,作为学习列表理解的一种方式。我已经编写了一个执行我想要的操作的 for 循环(注释掉的部分),并且我已经开始编写一个encMessage = [alph[alph.index(i) + keyShift] for i in list(message)]
我也注释掉的列表理解。
但是,带有附加 if 语句的列表推导会导致:TypeError: cannot concatenate 'str' and 'int' objects
.
为什么“if”部分有类型错误,但表达式没有?
import string
alph = string.ascii_lowercase
def encM (message, keyShift):
# for i in list(message):
# tempNum = alph.index(i) + keyShift
# if tempNum > 26:
# tempNum = tempNum - 26
# tempNum = alph[alph.index(i)]
# print(tempNum)
# encMessage = [alph[alph.index(i) + keyShift] for i in list(message)]
encMessage = [alph[alph.index(i) + keyShift] for i in list(message) if (alph[alph.index(i)] + keyShift > 26)]
#string1 = ''.join([str(item) for item in encMessage])
print(encMessage)
encM("test", 3)
解决方案
问题是alph[alph.index(i)] + keyShift
如果您将其更改为alph.index(i)] + keyShift
它将起作用,因为后者获取索引值而不是索引处的 str 值。
以下解决了异常:
encMessage = [alph[alph.index(i) + keyShift] for i in list(message) if (alph.index(i) + keyShift > 26)]
但是encMessage
是空的,然后我将上面的代码更改如下,这似乎给出了适当的转变:
encMessage = [alph[alph.index(i) + keyShift] for i in list(message) if (alph.index(i) + keyShift < 26)]
如果有帮助,请告诉我。
推荐阅读
- numpy - xt::where 用于 xtensor C++ 的示例用法
- javascript - 插入数据引导程序 3.3 后重定向到另一个选项卡
- proguard - 构建 App Bundle Proguard 错误
- javascript - BigCommerce:向特定产品详细信息页面添加倒数计时器
- outlook - 由于本地主机问题,无法加载 Outlook Web 插件
- c++ - LNK2019 无法在 Visual Studio 中链接静态库
- scala - Scala 类型参数作为单射映射
- c# - 使用 C# 调用 .bat 文件时,如何使 cmd 窗口显示批处理文件正在执行的操作?
- javascript - 事件侦听器在页面加载时自行触发
- arrays - 将所有数组值写入文本文件