可能重复:如何搜索嵌套列表网格并在Python中给出字母坐标?
我目前有这个嵌套列表作为6x6网格:
grid = [["Z","9","G","Q","T","3"],
["Y","8","F","P","S","2"],
["X","7","E","O","R","1"],
["W","6","D","N","M","0"],
["V","5","C","L","K","U"],
["J","4","B","I","H","A"]]
行和列称为A,B,C,D,E,F,而不是通常的0,1,2,3,4,5 . 因此,需要将字母转换为数字,然后必须在嵌套列表中找到该项 .
例如,如果用户键入:FE CC ED ED CD这应该找到HELLO的字母并打印出单词HELLO,因为这是加密的消息 .
如何管理我的任何帮助将不胜感激 .
5 回答
要将字符转换为整数,您可以执行以下操作:
要访问网格中的字符,你可以这样做(我假设输入被称为
input
):这样做的原因是
ord(x)
返回字符x
的值,无论你的字符集是什么,并且无论是ASCII,Latin-1,UTF-8还是别的,这些字母都按顺序排列 .你可以通过在交互式解释器中试验它来看到这一点:
您可以使用映射将字母转换为数字 . 这样的映射很容易从
string.ascii_uppercase
字符串生成:使用
letter_to_index
然后将一个字母(例如E
)变成一个数字(4
)是微不足道的:使用空格分隔的输入,这将变为:
其他技术使用
ord()
获取字母的ASCII序号(减去ord('A')
使其基于0)或使用.index()
onstring.ascii_uppercase
(这将更慢) .将它们的相对速度与timeit module进行比较是确定哪一种是最快技术的最佳方法(如果你这么小心):
字典(映射)方法最快;使用
ord()
紧随其后(如果你只计算ord('A')
一次),并且使用.index()
需要几乎三倍的时间 .