我正在练习教科书中的练习,并且我要求创建一个命名的数字命理程序,根据字母表中的升序为每个字母分配一个值,并返回总和字母。
我写的代码适用于任何不重复信件的名称。例如,如果名称是' 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
答案 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)
<强>解释强>:
ord
返回字符的ASCII代码,例如65
的{{1}} 'A'
提供1
,为A
提供2
,依此类推B
是一个内置函数,可以满足您的期望sum
的参数是一个表达式,其求值为一系列数字,sum
答案 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)