簡體   English   中英

rot13沒有正確翻譯python

[英]rot13 not translating correctly python

我正在嘗試將字符串轉換為rot13,所以我編寫了以下代碼:

def str_rot_13(my_string):
    list_string = list(my_string)
    number_string = [ord(x) for x in list_string]
    new_number_string = [x + 13 for x in number_string]   
    new_list_string = [chr(x) for x in new_number_string]
    my_new_string = ''.join(new_list_string)
    return my_new_string

我的問題是,如果我在字母表中向下走,它會開始返回奇怪的數字和斜線。 我嘗試在ord('a')中創建一個范圍到ord('z'),但它仍然返回數字和斜杠。 任何幫助,將不勝感激!

通過做(((x + 13-97)%26)+97) X值將始終在97和122之間( ord("a") = 97, ord("z") = 122 )然后你輸出將始終是一個完全由字母組成的字符串。

def str_rot_13(my_string):
    list_string = list(my_string)
    number_string = [ord(x) for x in list_string]
    new_number_string = [(((x + 13-97)%26)+97) for x in number_string]   
    new_list_string = [chr(x) for x in new_number_string]
    my_new_string = ''.join(new_list_string)
    return my_new_string

輸出:

>>> print str_rot_13("my string")
zlafgevat
>>> 

rot13的想法是(英文)字母表中有26個字母。 因此,應用rot13會為您提供原始字符串。 然而, ord會給你Ascii符號(其中有128個)。

如何使用string.ascii_lowercase

import string    

def str_rot_13(my_string):
    alphabet = list(string.ascii_lowercase)
    list_string = list(my_string)
    number_string = [alphabet.index(x) for x in list_string]
    new_number_string = [x + 13 for x in number_string]   
    new_list_string = [alphabet[x%26] for x in new_number_string]
    my_new_string = ''.join(new_list_string)
    return my_new_string

或者更短

def rot13(s):
    alphabet = list(string.ascii_lowercase)
    chars = map(lambda x: alphabet[(alphabet.index(x) + 13) %26], s)
    return ''.join(chars)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM