首页 > 解决方案 > 一条线解决

问题描述

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

我已经解决了,如下图

def alienNumbers(s):

    final = []
    new_final = []

    T_count = 0
    y_count = 0
    count = 0
    a_count = 0
    N_count = 0
    U_count = 0

    for i in s:

        final.append(i)

    for k in final:

        if k == "T":

            T_count += 1

        if k == "y":

            y_count += 1

        if k == "!":

            count += 1

        if k == "a":

            a_count += 1

        if k == "N":

            N_count += 1

        if k == "U":

            U_count += 1

    for j in final:

        if j not in new_final:

            new_final.append(j)

    for m in new_final:

        if m == "T":

            value1 = 1024 * T_count

        if m == "y":

            value2 = 598 * y_count

        if m == "!":

            value3 = 121 * count

        if m == "a":

            value4 = 42 * a_count

        if m == "N":

            value5 = 6 * N_count

        if m == "U":

            value6 = 1 * U_count

    total = value1 + value2 + value3 + value4 + value5 + value6

    print(total)

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

标签: python-3.x

解决方案


通过将字符映射到一个字典来创建一个值列表,其中键是字符,值是它们的编码值,然后使用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))))

使用dict.get0 作为默认值不会抛出KeyError,也不会改变总金额。


推荐阅读