2015-10-09 159 views
0

我已將字母a-z放在列表中。我如何根據用戶輸入的內容找到列表中某個項目的值?基於其他值返回python列表中索引的值

例如,如果他們鍵入字母a它將返回cf將返回hx將返回z

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
newletters = [] 

offset = 2 

userInput = input('type a string') 
newvalue = chr(ord(userInput)+offset) 
split = list(newvalue) 
print split 

上面的作品是一個字符,但不是一個字符串..幫助?!

+3

顯示您的嘗試... –

+0

@AvinashRaj道歉。現在已經完成 –

+0

[Python:我如何增加一個字符?]可能的重複(http://stackoverflow.com/questions/2156892/python-how-can-i-increment-a-char) – idjaw

回答

2

你可以試試這個:

>>> offset = 2 
>>> aString = raw_input("digit a letter: ") 
>>> aString 
'a' 
>>> chr(ord(aString)+offset) 
'c' 

文檔:


如果你想遍歷一個ENT ire字符串,一個簡單的方法是使用for循環。我假設輸入字符串總是小寫。

EDIT2:我改進了解決方案來處理的情況下,當一個字母是'y''z'和沒有「旋轉」應該開始一不字母字符,例如:

# with only offset addiction this return a non-alphabetic character 
>>> chr(ord('z')+2) 
'|' 

# the 'z' rotation return the letter 'b' 
>>> letter = "z" 
>>> ord_letter = ord(letter)+offset 
>>> ord_letter_rotated = ((ord_letter - 97) % 26) + 97 
>>> chr(ord_letter_rotated) 
'b' 

代碼溶液:

offset = 2 
aString = raw_input("digit the string to convert: ") 
#aString = "abz" 
newString = "" 

for letter in aString: 
    ord_letter = ord(letter)+offset 
    ord_letter_rotated = ((ord_letter - 97) % 26) + 97 
    newString += chr(ord_letter_rotated) 

print newString 

此代碼的整個小寫字母表的輸出:

cdefghijklmnopqrstuvwxyzab 

注意:您可以獲取小寫字母的也是免費的這樣:

>>> import string 
>>> string.lowercase 
'abcdefghijklmnopqrstuvwxyz' 

請參閱Wikipedia頁面,瞭解一些有關ROT13

https://en.wikipedia.org/wiki/ROT13

+0

好吧,這是好的。你知道如何爲整個字符串做這個嗎? –

+0

你可以添加一個'for'循環。現在我修改解決方案。 –

+0

會字符串拆分不工作? –

1

應該發生什麼z?它應該成爲b

您可以使用Python maketranstranslate功能,要做到這一點,如下所示:

import string 

def rotate(text, by): 
    s_from = string.ascii_lowercase 
    s_to = string.ascii_lowercase[by:] + string.ascii_lowercase[:by] 
    cypher_table = string.maketrans(s_from, s_to) 
    return text.translate(cypher_table) 

user_input = raw_input('type a string: ').lower() 
print rotate(user_input, 2) 

這會作用於整個字符串如下:

type a string: abcxyz 
cdezab 

它是如何工作的?

如果打印s_froms_to它們看起來如下:

abcdefghijklmnopqrstuvwxyz 
cdefghijklmnopqrstuvwxyzab 

maketrans創建一個映射表中s_from字符映射到s_to。然後translate將此映射應用於您的字符串。

相關問題