我不理解Python中的基本概念(C家伙)并且可以使用a)答案b)解释
def do_the_deed(srctxt, upperlower)
# srctxt = "XGID=-b----E-C---eE---c-e----B-:0:0:1:21:0:0:1:0:10"
alpha_list = srctxt[5:31]
# map chars to ascii
# [45],[66],[45],[45]....
ord_list = [map(ord, x) for x in alpha_list]
count = 0
# what I want to do but can not!!!
??? for y = int(x) in ord_list ???
if y <> 45 # acs('-') == 45
if upperlower = 'UPPER'
if ((y>= 97) and (y<= 112)): # uppercase 15 valid
count += y - 96
if upperlower = 'LOWER'
if ((y>=65) and (y<=80)): # lower case 15 valid
count += y - 64
return count
我认为这样做有一个整洁的方式
xval = [int(x) for x in ord_list[0]]
给了我第一个价值。
我可以明确地迭代0到26的范围,但这似乎是错误的想法。我一直在谷歌搜索,但我不知道正确的搜索条件。 Iterator,Enumerate,Cast ... C类术语并没有给我正确答案。
谢谢, 罗伯特
答案 0 :(得分:1)
你的问题来自这一行:
ord_list = [map(ord, x) for x in alpha_list]
您正在制作两次列表,一次列出清单([ ... for x in ...]
),另一次列出map
。所以当你(我假设)你只想要一个整数列表时,你会得到一个字符代码列表:
ord_list
是[[45], [98], [45], ..., [66], [45]]
ord_list
是[45, 98, 45, ..., 66, 45]
您可以使用map(ord, alpha_list)
或[ord(x) for x in alpha_list]
所以你的代码可能就像:
...
alpha_list = srctxt[5:31]
# map chars to ascii
# [45],[66],[45],[45]....
ord_list = map(ord, alpha_list) # or [ord(x) for x in alpha_list]
count = 0
# what I want to do but can not!!! now you can :-)
for y in ord_list:
if y <> 45:
...
答案 1 :(得分:0)
在Python中,您经常要使用词典:
import string
def do_the_deed(srctxt, upperlower):
chars = string.lowercase if upperlower == 'LOWER' else string.uppercase
translate = dict(zip(chars, range(1,27)))
return sum(translate.get(c, 0) for c in srctxt[5:31])