如何确保在python中的for循环中考虑重复的字符

时间:2016-10-13 02:18:10

标签: python for-loop

我正在练习教科书中的练习,并且我要求创建一个命名的数字命理程序,根据字母表中的升序为每个字母分配一个值,并返回总和字母。

我写的代码适用于任何不重复信件的名称。例如,如果名称是' kayla',我知道if语句将在' a'的第一个实例处停止。在其当前设计中是否有一种方法可以捕获多个字母,还是需要以不同的方式对字母进行排序?

def main():

   alphabet = 'abcdefghijklmnopqrstuvwxyxz'
   user_name = raw_input('Please enter your name ')
   value = sum = 0

   for char in alphabet:
      value = value + 1
      if char in user_name:
          sum = sum + value

   print sum

3 个答案:

答案 0 :(得分:1)

由于你正在阅读一本教科书,并且我认为不想要答案,这里有一个提示。你正在迭代(循环)错误的东西。您应该循环user_name,而不是alphabet

<强>更新即可。如果你想要一个好的&#34; Pythonic&#34;解决你的问题,这是一种方式:

user_name = raw_input('Please enter your name ')
print sum(ord(letter.upper())-64 for letter in user_name)

<强>解释

  1. ord返回字符的ASCII代码,例如65的{​​{1}}
  2. A-Z的ASCII代码为65到90,顺序正确
  3. 减去64会为'A'提供1,为A提供2,依此类推
  4. B是一个内置函数,可以满足您的期望
  5. sum的参数是一个表达式,其求值为一系列数字,sum
  6. 中每个字母对应一个数字

答案 1 :(得分:1)

in函数仅验证列表中是否存在元素。您可以通过多种方式解决问题,但我认为学习的好方法是创建一个字典来存储字母,值对,然后迭代名称字符以对值进行求和:

def main():
   alphabet = 'abcdefghijklmnopqrstuvwxyxz'
   values, val = {}, 1
   for char in alphabet:
       values[char] = val
       val += 1
   print values
   user_name = raw_input('Please enter your name ')
   value = sum = 0

   for char in user_name.lower():
       sum += values[char]

   print sum

if __name__ == '__main__':
    main()

另一种形式是使用索引字符串函数来获取字符串中字母位置的值。 以下是示例代码:

def main():
    alphabet = 'abcdefghijklmnopqrstuvwxyxz'
    user_name = raw_input('Please enter your name ')
    sum = 0

    for char in user_name.lower():
        sum += alphabet.index(char) + 1
    print sum

if __name__ == '__main__':
    main()

答案 2 :(得分:0)

使用列表推导和内置sum函数的一种非常简单的方法:

   alphabet = 'abcdefghijklmnopqrstuvwxyxz'
   user_name = raw_input('Please enter your name ')
   user_name = user_name.lower().strip()
   value = sum([alphabet.index(c)+1 for c in user_name])
   print(value)