如何通过Python中的某个值更改字符串中每个字符的值?

问题描述 投票:-1回答:2

我希望用户输入一个字符串和一个值来向前或向后移动字符。我想通过用户输入的值+每个字符在字符串中的位置来向前移动每个字符。我希望它仅对字母和数字有效,因此空格和符号不受影响。例如,如果用户输入“ 5”作为值,并输入“ a b c”作为字符串,我想将“ a”更改为“ f”; “ b”到“ i”;“ c”到“ l”。因此,输出将是“ f i l”。

假设用户仅输入小写字母。

message = input("Enter your message: ")
for characters in message:

python encryption
2个回答
0
投票

如评论中所述,您所需要做的就是正确使用ord()chr()内置方法。另外,对于字母在字符串中的位置,您可以简单地使用enumerate()

我会用类似这样的东西来实现:

def enc(n, s):
    return "".join(
    chr(ord(letter) + n + i) \
    if ord('a') <= ord(letter) <= ord('z') or ord('0') <= ord(letter) <= ord('9') \
    else letter for i, letter in enumerate(s))

这样,您可以通过传递enc()参数来调用n函数来设置要向前移动每个字符的数字,而s参数是字符串本身。

例如:

>>> enc(5, 'a b c')
'f i l'

0
投票

将ord和chr用于'a-z'或'0-9'范围内的字符

  • 如果旋转使您超出范围,则将旋转的字符调整回范围内
  • 示例'z'旋转1将会是ord('z')+ 1的'{']
  • 但是,经过调整后变成'a'

代码

def rot_n(s, n):
    def limit(i, lower, upper):
        " Limits characters to their range after rotation "
        interval = upper - lower + 1
        while i > upper:
            i -= interval
        while i < lower:
            i += interval
        return i

    def lookup(v):
        " Rotates a character "
        o, c = ord(v), v.lower()

        if 'a' <= c <= 'z':
            ans = limit(o + n, ord('a'), ord('z'))

            return chr(ans)

        elif '0' <= c <= '9':
            ans = limit(o + n, ord('0'), ord('9'))

            return chr(and)

        # Does not rotate non-letters 
        return v

    # Map rotation over the string
    return ''.join(map(lookup, s))

Test

print(rot_n('abcde 1234', 1))    # bcdef 2345
print(rot_n('abcde 1234', -1))   # zabcd 0123 (handles positive and negative rotation)
print(rot_n('abcde 1234', 26))   # abcde 7890 (only numbers are changed for factors of 26)
print(rot_n('abcde 1234', -26))  # abcde 5678  (only numbers are changed for factors of 26)
© www.soinside.com 2019 - 2024. All rights reserved.