【问题标题】:python3 sum in stings each letter valuepython3 sum in stings 每个字母值
【发布时间】:2022-12-19 23:45:07
【问题描述】:

我需要字符串字母值 ex 中的总和。 一 = 1 b = 2 c = 3 d = 4

alphabet = 'abcdefghijklmnopqrstuvwxyz'

v1

string = "abcd"

# #result = sum(string) so 
if string[0] and string[1] and string[2] and string[3] in alphabet:
   if string[0] is alphabet[0] and string[1] is alphabet[1] and string[2] is alphabet[2] and string[3] is alphabet[3]:
      print(a+b+c+d)

v2

string = ("ab","aa","dc",)

if string[0][0] and string[0][1] and string[1][0] and string[1][1] and string[2][0] and string[2][1] in alphabet:
   if string[0] is alphabet[0] and string[1] is alphabet[1] and string[2] is alphabet[2] and string[3] is alphabet[3]:
      print(a+b+c+d)   

解决办法是什么?你能帮助我吗

【问题讨论】:

标签: string algorithm sorting python-3.x


【解决方案1】:

使用sum() functiongenerator expression;由 string.ascii_lowercase 构建的字典可以用作获取每个字母的整数值的方法:

from string import ascii_lowercase

letter_value = {c: i for i, c in enumerate(ascii_lowercase, 1)}
wordsum = sum(letter_value.get(c, 0) for c in word if c)

enumerate(ascii_lowercase, 1) 在迭代时产生 (index, letter) 对,从 1 开始。这给你 (1, 'a')(2, 'b') 等。它们可以在字典中转换为 c: i 字母对,将字母映射到整数。

接下来,使用 dict.get() method 可以选择默认值;对于输入字符串中的任何字符,您可以查找数值并将其映射为整数,但如果该字符不是小写字母,则会返回 0sum(...) 循环部分然后简单地将这些值相加。

如果您需要支持单词序列,只需再次使用sum()。将上面的 sum() 调用放在一个函数中,并将该函数应用于序列中的每个单词:

from string import ascii_lowercase

letter_value = {c: i for i, c in enumerate(ascii_lowercase, 1)}

def sum_word(word):
    return sum(letter_value.get(c, 0) for c in word if c)

def sum_words(words):
    return sum(sum_word(word) for word in words)

【讨论】:

  • 我会使用 {chr(i+96):i for i in range(1, 27)} 而不是导入 ascii_lowercase
  • @StevenSummers:这是一个品味问题;我认为这是自我记录这种方式。
  • @MartijnPieters 你是我的英雄
  • @MartijnPieters 我如何对字符串组合产品求和,我尝试了 sum(letter_value.get(c,0) * letter_value.values() for c in zip(m) if c) 但我得到错误 unsupported operand type(s) for *: 'int' 和 'dict_values'
  • @PyDroid:使用import operator,然后使用reduce(operator.mul, (letter_value.get(c, 0) for c in word if c), 1)来生成文字产品。
【解决方案2】:

老式的方法是利用小写字母是连续的这一事实,所以ord(b) - ord(a) == 1

data = "abcd"
print("Sum:", sum(ord(c)-ord("a")+1 for c in data))

当然你可以“优化”它以减少计算次数,尽管在这种情况下它看起来很愚蠢:

ord_a = ord("a")
print("Sum:", sum(ord(c)-ord_a for c in data)+len(data))

【讨论】:

  • 谢谢亚历克斯,你能帮我吗,如何获得产品字符串?前任。如果我有总和 a+b+c+d 而不是我需要比较总和和乘积如果 a+b+c+d != a * b * c * d
  • 我用谷歌搜索“python 产品”和boom!。谷歌搜索结果中的第二次点击向您展示了如何去做。 (如图所示定义它,然后使用 prod() 而不是 sum()。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2022-11-17
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多