视频直播网站开发运营步骤,辽宁省住房和城乡建设厅网站进不去,有谁认识做微网站的,移动开发网在Python中将字母转换为数字
如何完成以下步骤#xff1f;
characters [abcdefghijklmnopqrtuvwxyz]
numbers [123456789101112131415161718192021222324]
text raw_input( Write text: )
我已经尝试了许多方法来解决它#xff0c;但无法做到。 我想做事。 如果我键入“ h…在Python中将字母转换为数字
如何完成以下步骤
characters [abcdefghijklmnopqrtuvwxyz]
numbers [123456789101112131415161718192021222324]
text raw_input( Write text: )
我已经尝试了许多方法来解决它但无法做到。 我想做事。 如果我键入“ hello”则输出的数字将按字母顺序排列。 示例a 1 字母。
altin asked 2020-02-06T03:46:14Z
14个解决方案
77 votes
那么这样的事情呢
print [ord(char) - 96 for char in raw_input(Write Text: ).lower()]
奥德
清单理解
ASCII字符代码
编辑
自从你问我要解释后我会...尽管[]已经在评论中很好地解释了它。
让我们从不止一行开始。
input raw_input(Write Text: )
input input.lower()
output []
for character in input:
number ord(character) - 96
output.append(number)
print output
这做同样的事情但更具可读性。 在尝试理解我的第一个答案之前请确保您了解这里发生的情况。 这里的一切都是非常标准的简单的Python。 要注意的一件事是ord函数。 ord代表序数几乎每种高级语言都将提供此类功能。 它为您映射到任何字符的数字表示形式。 ord的逆函数称为chr。
chr(ord(x)) x # for any character, not just x.
如果您自己进行测试则a的序数为97我上面发布的第三个链接将显示完整的ASCII字符集。每个小写字母的范围为97-12226个字符。因此如果您减去 从任何小写字母的序号96开始假设您采用a 1您将获得其在字母表中的位置。因此b 98c 99等的序数。当您 减去96b 2c 3依此类推。
我发布的初始解决方案的其余部分只是一些Python技巧您可以学习这些技巧称为列表理解。 但是我不会像在奥尔德是你的朋友的情况下那样专注于学习以任何语言来解决问题。 我希望这有帮助。
sberry answered 2020-02-06T03:47:04Z
15 votes
您可以使用chr和ord在字母和整数之间进行转换。
这是一个简单的例子。chr(97)
aord(a)
97
Statham answered 2020-02-06T03:47:29Z
9 votes
如果要大量使用此转换请考虑计算一次并将结果放入字典中import stringdidict(zip(string.letters,[ord(c)%32 for c in string.letters]))di[c]
3
优点是字典查找非常快而在每次调用时都遍历列表。for c in sorted(di.keys()):print {0}:{1} .format(c, di[c])
# what you would expect....
the wolf answered 2020-02-06T03:47:53Z
8 votes
不必太基础但这是char1 [abcdefghijkl
mnopqrstuvwxyz]
与此非常不同char2 [a,b,c,d,e,f,g,h,i,j,k,l,
m,n,o,p,q,r,s,t,u,v,w,x,y,z]
第一个没有逗号和问题的内容是一个包含26个元素的字符串的一个元素列表。 第二个是26个元素列表每个列表的长度为单个字符。
如果打印每个print char1, len(char1), len(char1[0])
[abcdefghijklmnopqrstuvwxyz] 1 26print char2, len(char2), len(char2[0])
[a, b, c, d, e, f, g, h, i, j, k, l,
m, n, o, p, q,r, s, t, u, v, w, x, y, z] 26 1
显然需要采取额外的步骤才能将characters[abc...]的各个字符变成可迭代的字符。
如果您具有从“ a”到“ z”和/或从“ A”到“ Z”的字符序列则可以通过列表理解轻松返回该字符的编号[ord(x)%32 for x in char2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
对于您拥有的数据结构类型您需要首先访问该字符串[ord(x)%32 for x in char1[0]]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
因此如果您的代码清单与您的问题相同则可能是您的问题。
合理的替代方法是characters[abc...]
您可以看到您的characters[abc...]不带逗号与在像[abc...]这样的列表中键入字符串中的所有字符一样。
所以现在尝试import string[ord(x.lower())-96 for x in string.letters]
[1,2,...26, 1,2,3...26] # my ellipseschar3[string.letters] # one string as element[0][ord(x)%32 for x in char3[0]][ord(x)%32 for x in [string.letters][0]]
dawg answered 2020-02-06T03:48:58Z
6 votes
这是我以前用于此目的的功能。 适用于大写和小写。
def convert_char(old):
if len(old) ! 1:
return 0
new ord(old)
if 65 new 90:
# Upper case letter
return new - 64
elif 97 new 122:
# Lower case letter
return new - 96
# Unrecognized character
return 0
parent5446 answered 2020-02-06T03:49:18Z
5 votes
像这样
[str(ord(c)31) for c in text]
Kabie answered 2020-02-06T03:49:38Z
3 votes[str(ord(string.lower(c)) - ord(a) 1) for c in string.letters]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26]
marcog answered 2020-02-06T03:49:54Z
3 votes
def letter_to_int(letter):
alphabet list(abcdefghijklmnopqrstuvwxyz)
return alphabet.index(letter) 1
在此如果列表包含x则索引x函数将返回x的位置值。
ehfgk78 answered 2020-02-06T03:50:14Z
2 votes
这是我用来将excel列字母转换为数字的方法因此限制为3个字母但是如果您需要更多可以很容易地扩展它。 可能不是最好的方法但是它可以满足我的需求。
def letter_to_number(letters):
letters letters.lower()
dictionary {a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10,k:11,l:12,m:13,n:14,o:15,p:16,q:17,r:18,s:19,t:20,u:21,v:22,w:23,x:24,y:25,z:26}
strlen len(letters)
if strlen 1:
number dictionary[letters]
elif strlen 2:
first_letter letters[0]
first_number dictionary[first_letter]
second_letter letters[1]
second_number dictionary[second_letter]
number (first_number * 26) second_number
elif strlen 3:
first_letter letters[0]
first_number dictionary[first_letter]
second_letter letters[1]
second_number dictionary[second_letter]
third_letter letters[2]
third_number dictionary[third_letter]
number (first_number * 26 * 26) (second_number * 26) third_number
return number
Kurt Maupin answered 2020-02-06T03:50:34Z
1 votes
如果目标是仅转换字母abcd .... xyz和ABCD .... XYZ我将使用一个函数
from string import letters
def rank(x, d dict((letr,n%261) for n,letr in enumerate(letters[0:52]))):
return d[x]
我写了[0:52]是因为我的Python 2.7版本显示了该值
* ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
用于string.letters参数。
因为参数d接收一个值作为默认参数所以在执行函数定义以生成函数对象的那一刻该值的演算仅执行一次。因此即使该函数被调用了三千次也可以在不重新计算该值的情况下使用该函数。
顺便说一下该函数的每次调用都不再使用lower。 在构造默认参数时已处理了大写字母的情况。
。
一个使用示例
word supercalifragilisticexpialidocious
print .join( letter if rank(letter)%3!0 else . for letter in word)
结果
s.pe..a .... ag ... st..e.p.a.d ..... s
。
它也可以与map一起使用
print map(rank,ImmunoElectroPhoresis)
结果
[9、13、13、21、14、15、5、12、5、3、20、18、15、16、8、15、18、5、19、9、19]
eyquem answered 2020-02-06T03:51:52Z
1 votes
如果您只是想将数字映射到字母则只需执行以下简单操作
def letter_to_index(letter):
_alphabet abcdefghijklmnopqrstuvwxyz
return next((i for i, _letter in enumerate(_alphabet) if _letter letter), None)
当然如果要使其从1开始则只需添加i 1代表i...等。
regularex answered 2020-02-06T03:52:17Z
1 votes
如果您正相反例如1 A2 B等则可以使用以下代码。 请注意由于我只能将一个班级的班级转换为ABC等所以我最多只能升至2级。
loopvariable 0
numberofdivisions 53
while (loopvariable
if(loopvariable26):
print(chr(65loopvariable))
loopvariable 1
if(loopvariable 26 and loopvariable 53):
print(chr(65)chr(65(loopvariable-27)))
Haris Np answered 2020-02-06T03:52:37Z
1 votes
使用此功能。 它将字母字符串转换为其等效的数字值
def convAlph2Num(sent):
alphArray list(string.ascii_lowercase)
alphSet set(alphArray)
sentArray list(sent.lower())
x []
for u in sentArray:
if u in alphSet:
u alphArray.index(u) 1
x.append(u)
print(x)
return
dabire answered 2020-02-06T03:52:57Z
0 votes
这是我要解决的问题的解决方案其中您要转换字符串中所有字母的位置并以字母的位置返回英文字母的位置。
[https://gist.github.com/bondnotanymore/e0f1dcaacfb782348e74fac8b224769e]
如果您想详细了解它请告诉我。我使用了以下概念 -列表理解 -字典理解
nomoreabond2017 answered 2020-02-06T03:53:27Z