Python 3.x 一行求解

Python 3.x 一行求解,python-3.x,Python 3.x,问题是。在战争中,两个外来物种之间的奇怪通讯被截获。美国国家科学院顶级语言学家已经确定这些外星人使用了一种奇怪的编号系统。它们有各种数值的符号,它们只需将给定数字中符号的所有值相加即可计算出数字。美国宇航局的语言学家为您提供了下表中的符号及其数值。因为他们有很多这样的数字要计算,所以他们希望你编写一个函数,他们可以用它来自动完成这项任务。值1024 598 121 42 Sym因此a!啊!!UNaU表示1095的值(有关说明,请参见下表)数字值发生Total value Running Tota

问题是。在战争中,两个外来物种之间的奇怪通讯被截获。美国国家科学院顶级语言学家已经确定这些外星人使用了一种奇怪的编号系统。它们有各种数值的符号,它们只需将给定数字中符号的所有值相加即可计算出数字。美国宇航局的语言学家为您提供了下表中的符号及其数值。因为他们有很多这样的数字要计算,所以他们希望你编写一个函数,他们可以用它来自动完成这项任务。值1024 598 121 42 Sym因此a!啊!!UNaU表示1095的值(有关说明,请参见下表)数字值发生Total value Running Total 1024 598 121 42 0 x 10240 1×598 598 3 x 121363 3 x 42=126 598 961 1087 1093 1095 AlienNumber,该数值采用一个字符串参数s,并返回由函数s表示的整数值。因为外星人只知道这些字符,所以你可以假设s中没有字符在这个集合之外:(T,y,!,a,N,U Callenge:尝试使这个函数的整个主体只有一行长>>>alienNumbers(“a!ya!U!NaU”)1095>>>alienNumbers(“aaaUUU”)129

我解决了它,如下所示

def校准编号:
最终=[]
新的最终版本=[]
T_计数=0
y_计数=0
计数=0
a_计数=0
N_计数=0
U_计数=0
对于s中的i:
最后。附加(i)
对于期末考试中的k:
如果k==“T”:
T_计数+=1
如果k==“y”:
y_计数+=1
如果k==“!”:
计数+=1
如果k==“a”:
a_计数+=1
如果k==“N”:
N_计数+=1
如果k==“U”:
U_计数+=1
对于期末考试中的j:
如果j不在新的_决赛中:
新的_final.append(j)
对于新科大决赛中的m:
如果m==“T”:
值1=1024*T\u计数
如果m==“y”:
值2=598*y_计数
如果m==“!”:
值3=121*计数
如果m==“a”:
值4=42*a\u计数
如果m==“N”:
值5=6*N\u计数
如果m==“U”:
值6=1*U\U计数
总计=值1+值2+值3+值4+值5+值6
打印(总计)

但显然,这个问题可以在python中使用.count()函数在一行代码中解决,我似乎无法解决。有人能帮忙吗?

通过将字符映射到dict来创建一个值列表,其中键是字符,值是它们的编码值,然后使用
sum
将所有值相加:

def alienNumbers(s): print(sum(map(lambda x: {"T" : 1024, "y" : 598, "!" : 121, "a" : 42, "N" : 6, "U" : 1}[x], list(s))))
假设在
T,y,!,a,N,U之外没有字符,这将起作用。我假设您在问题中添加了
字符作为打字错误

编辑

忘了添加以下内容:如果要接受任何字符并只计算词汇表中的字符,则可以将该函数更改为:

def alienNumbers(s): print(sum(map(lambda x: {"T" : 1024, "y" : 598, "!" : 121, "a" : 42, "N" : 6, "U" : 1}.get(x, 0), list(s))))
使用默认值为0的
dict.get
将不会抛出
KeyError
,也不会更改总金额