【问题标题】:Q:python: why is my char considered as a str?问:python:为什么我的 char 被认为是 str?
【发布时间】:2017-08-15 09:44:48
【问题描述】:

我刚启动 python,遇到了一个愚蠢的错误,但我不明白为什么它不起作用

def encryption(str1):
    i = 0
    for x in str1:
        if (x >= 'a' and x <= 'z' or x >= 'A' and x <= 'Z'):
            str1[i] = str1[i] + 3 % 26 #str[i] = x + 3 % 26
        i+=1
    return str1

当我执行程序时出现此错误:

TypeError:字符串索引必须是整数,而不是 str。

有人能解释一下为什么 str[i] - 23 被认为是 str 吗?对我来说,我只是在修改 char 的 ascii 值。

【问题讨论】:

  • 这不是 C,尝试ord(str1[i]) 获取字符的 ASCII 值。为什么要将索引与 x 混合?并且错误似乎在其他地方......
  • 并在发布前修正缩进。
  • 记住字符串是不可变的
  • 我混合了两者,因为我基本上只尝试了 x 然后只是 str1[I] 然后我扭曲了两者等等...... ^^

标签: python string


【解决方案1】:

python 中的字符串不像 C 中的数组。它们是不可变的,即 您无法对字符串进行适当的更改。轮到你了 将字符串放入列表(类似于 c 数组)或创建一个新的空字符串 并将每个加密的字母连接到它上面(这可能会更快)。 Ord 将字符串转换为 ascii 数字,而 chr 将其反转。 如果字符在 {a-z A-Z}

中,isalpha 方法测试 true
str1 = 'this is a test string!@#$@#$@'

def encryption(str1):
    new_string = ''
    for character in str1:
        if character.isalpha():
            new_string += chr(ord(character) + 3 % 26)
        else:
            new_string += character
    return new_string

print(encryption(str1))

【讨论】:

  • 哦,好吧,我想我会做一个大型的 Python 字符串培训课程,但我没想到 Python 和 C 字符串之间有这么大的区别。好的,谢谢。
  • 主要区别在于不变性。您可以索引字符串,就像在 C 中一样,但您不能更改单个字符元素。如果你想把它变成一个伪 C 数组做一个列表理解数组 = [ x for x in string ],然后在更改后使用 "".join(array) 将其压缩回来。虽然,我的答案中的方法会更快,更pythonic。
  • 是的,我不会用python来模仿c,所以我会尝试像你一样推理。
猜你喜欢
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多