2017-10-21 22 views
1
def string_transf(): 
    input('Enter a word or string') 
    #letters = 'abcdefghijklmnopqrstvwxyz' 
    #for i in letters: 
      #i+= 

    if c >= 'a' and c <='z': 
     i = 'z' - c + 'a' 
     print(i) 

我試圖想出一個算法,但我迷路了。a變成z,b變成y。 abcd變成zyxw ...等python

+1

提示:使用'ORD(..)'和' CHR(..)'。 –

+0

不要使用'&',這是按位和,並使用'和'這是布爾和 –

+0

抱歉,只是一個快速的草圖@ juanpa.arrivillaga – macha

回答

0

既然你沒有說你要處理大寫字母,這裏是一個單行的答案:

>>> ''.join(chr(122 - ord(c) + 97) for c in 'abcd') 
'zyxw' 

其中122 ord('z')和97 ord('a')ord函數將字符轉換爲其Unicode代碼點,並且chr函數完全相反。

如果你願意,你可以跳過非小寫字符:

>>> ''.join(chr(122 - ord(c) + 97) for c in 'abcdEFG' if 'a' <= c <= 'z') 
'zyxw' 

如果你想處理大寫遵循同樣的模式:

>>> def inv(c): 
... if 'a' <= c <= 'z': 
... return chr(122 - ord(c) + 97) 
... if 'A' <= c <= 'Z': 
... return chr(90 - ord(c) + 65) 
... return c 
... 
>>> ''.join(inv(c) for c in 'Hello world!') 
'Svool dliow!' 
+0

這真棒,一個巧妙的方式來做到這一點! – macha

+0

@macha謝謝:)。它非常接近你得到的。您只需要利用'ord'和'chr'函數,以便Python知道要添加和減少的內容。如果問題得到解決,隨時將問題標記爲已回答! – user8808265

1

您可以使用以下方法。
創建字典my_map,它描述了角色的轉換:

import string 
ascii_alph = string.ascii_lowercase 

my_map = dict(zip(ascii_alph, ascii_alph[::-1])) 

str_input = 'abcd' 
str_output = ''.join(my_map[c] for c in str_input) # assume every c in my_map 

print(str_output) # zyxw 


你也可以實現與translate方法:

# my_map = string.maketrans(ascii_alph, ascii_alph[::-1]) # Python 2 
my_map = str.maketrans(ascii_alph, ascii_alph[::-1]) # Python 3 

str_input = 'abcd' 
str_output = str_input.translate(my_map) 

print(str_output) # zyxw 


對於一般的情況下(ASCII大寫等字符),您隨時可以擴展'my_map'字典。

請注意,所描述的方法非常靈活,因爲它使您不僅可以翻譯字母翻轉的情況。

+2

如果你打算這樣做,你也可以使用'str.translate' –

+0

@ juanpa.arrivillaga哇...我今晚忍住了... –

+0

非常感謝@maximtitarenko我很感激。 – macha

相關問題