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

2024-10-01 05:00:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在完成教科书上的练习,我被要求创建一个数字命理程序,它取一个名字,根据字母表中的升序给每个字母赋值,并返回字母的总和。你知道吗

我写的代码对任何不重复字母的名字都适用。例如,如果名称是'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

Tags: namein程序ifvalue字母数字名字
3条回答

既然你正在读一本教科书,我想你不只是想要答案,这里有一个提示。你在重复(循环)错误的事情。你应该在user_name上循环,而不是alphabet。你知道吗

更新。如果你想要一个很好的“Pythonic”解决方案,这是一种方法:

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

解释:

  1. ord返回字符的ASCII码,例如65'A'
  2. A-Z的ASCII码是65到90,顺序正好
  3. 减去64得到1表示A2表示B,依此类推
  4. sum是一个内置函数,它只执行您所期望的操作
  5. sum的参数是一个表达式,它的计算结果是一个数字序列,user_name中的每个字母对应一个

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()

使用列表理解和内置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)

相关问题 更多 >