基于其他值返回python列表中索引的值

2024-04-26 00:45:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经把字母a-z列在一张单子上了。如何根据用户键入的内容查找列表中某项的值?你知道吗

例如,如果他们键入字母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

上面的方法只适用于字符而不适用于字符串..救命?!你知道吗


Tags: 用户内容列表inputstring键入type字母
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

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

对于z应该发生什么?它应该变成b?你知道吗

可以使用Python的^{}^{}函数执行以下操作:

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_totranslate然后将此映射应用于字符串。你知道吗

相关问题 更多 >