2017-08-30 38 views
0

你能幫我寫一個函數,它接收一個字符字符(即,一個無限長度的字符串)和整數旋轉。我的函數應該返回一個無限長度的新字符串,由旋轉的位置向右旋轉的結果。我對這段代碼的輸出應該是這樣的:函數接收和旋轉文本

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 

回答

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)) 
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的字符串。