接收和旋转文本的功能

时间:2017-08-30 01:39:32

标签: python function join encryption caesar-cipher

你能帮我写一个函数,它接收一个字符char(即一个无限长的字符串)和一个整数旋转。我的函数应该返回一个无限长度的新字符串,结果是通过向右旋转的位数旋转char。我对此代码的输出应该是这样的:

Type a message:
Hey, you!
Rotate by:
5
Mjd, dtz!

到目前为止,这就是我所拥有的:

def rotate_character(char, rot):
   move = 97 if char.islower() else 65
   return chr((ord(char) + rot - move) % 26 + move)

char = input('Type a message: ')
rot = int(input('Rotate by: '))
print(rotate_character(char, rot))

这是我收到的错误消息:

TypeError: ord() expected a character, but string of length 9 found on line 3

2 个答案:

答案 0 :(得分:0)

def rotated_ascii(rotate_by):
    return ascii_uppercase[rotate_by:] + ascii_uppercase[:rotate_by] + ascii_lowercase[rotate_by:] + ascii_lowercase[:rotate_by]


def rotate_text(t,rotate_by):
    tab = str.maketrans(ascii_uppercase + ascii_lowercase,rotated_ascii(rotate_by))
    return t.translate(tab)

print(rotate_text("Hey, You!",5))

答案 1 :(得分:0)

def rotate_character(char, rot):
    res = ""
    for c in char:
        if c.isalpha():
            move = 97 if c.islower() else 65
            res += chr((ord(c) + rot - move) % 26 + move)
        else:
            res += c
    return res

ord返回一个单字符串的Unicode代码点。查看代码,传递给rotate_character的第一个参数是一个长度可能大于1的字符串。