我把字母a-z放在一个列表中。如何根据用户输入的内容找到列表中项目的值?
例如,如果他们输入字母a
,则会返回c
,f
会返回h
而x
会返回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
上面的内容适用于某个字符但不适用于字符串。帮助?!
答案 0 :(得分:2)
你可以试试这个:
>>> offset = 2
>>> aString = raw_input("digit a letter: ")
>>> aString
'a'
>>> chr(ord(aString)+offset)
'c'
文件:
如果要迭代整个字符串,一种简单的方法是使用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'
请参阅维基百科页面,了解有关ROT13
的信息:
答案 1 :(得分:1)
z
会发生什么?应该变成b
吗?
您可以使用Python的maketrans
和translate
函数执行此操作,如下所示:
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_from
和s_to
,则其外观如下:
abcdefghijklmnopqrstuvwxyz
cdefghijklmnopqrstuvwxyzab
maketrans
创建了一个映射表,用于将s_from
中的字符映射到s_to
。然后translate
将此映射应用于您的字符串。