为什么我在列表理解的 if 语句中得到 "TypeError"?
Why am I getting a "TypeError" in an if statement for a list comprehension?
我正在做一个小密码项目,以此来学习列表理解。我已经编写了一个 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)]
如果有帮助,请告诉我。
我正在做一个小密码项目,以此来学习列表理解。我已经编写了一个 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)]
如果有帮助,请告诉我。