📜  在Python中映射函数和字典以求和 ASCII 值

📅  最后修改于: 2022-05-13 01:54:56.098000             🧑  作者: Mango

在Python中映射函数和字典以求和 ASCII 值

给定一个英语句子(也可以包含数字),我们需要计算并打印该句子中每个单词的字符的 ASCII 值之和。

例子:

Input :  GeeksforGeeks, a computer science portal
         for geeks
Output : Sentence representation as sum of ASCII 
         each character in a word:
         1361 97 879 730 658 327 527 
         Total sum -> 4579
Here, [GeeksforGeeks, ] -> 1361, [a] -> 97, [computer] 
-> 879, [science] -> 730 [portal] -> 658, [for] 
-> 327, [geeks] -> 527 

Input : I am a geek
Output : Sum of ASCII values:
         73 206 97 412 
         Total sum -> 788

此问题已有解决方案,请参考句子中每个单词的 ASCII 值总和链接。我们将在Python中使用 map()函数和 Dictionary 数据结构快速解决这个问题。做法很简单,

  1. 首先拆分句子中的所有单词,用空格分隔。
  2. 创建一个空字典,其中包含单词作为键,其字符的 ASCII 值之和作为值。
  3. 现在遍历拆分单词的列表,并为当前单词的每个字符上的每个单词映射 ord(chr)函数,它们计算当前单词每个字符的 ascii 值的总和。
  4. 在遍历上面创建的结果字典中对应单词的每个单词映射总和时。
  5. 通过查找结果字典,遍历拆分的单词列表并打印其对应的 ascii 值。
      # Function to find sums of ASCII values of each 
      # word in a sentence in
        
      def asciiSums(sentence):
        
          # split words separated by space
          words = sentence.split(' ')
        
          # create empty dictionary
          result = {}
        
          # calculate sum of ascii values of each word
          for word in words:
               currentSum = sum(map(ord,word))
        
               # map sum and word into resultant dictionary
               result[word] = currentSum
        
          totalSum = 0
        
          # iterate list of splited words in order to print
          # sum of ascii values of each word sequentially
          sumsOfAscii = [result[word] for word in words]
          print ('Sum of ASCII values:')
          print (' '.join(map(str,sumsOfAscii)))
          print ('Total Sum -> ',sum(sumsOfAscii))
        
      # Driver program
      if __name__ == "__main__":
          sentence = 'I am a geek'
          asciiSums(sentence)
      

      输出:

      Sum of ASCII values:
      1361 97 879 730 658 327 527 
      Total sum -> 4579