名称的数值

时间:2015-02-09 06:45:44

标签: python

我是python的新手,遇到了一个我正在努力解决的问题。目标是输入一个人的全名并计算字母值的总和。第一部分只需要第一个名字,第二部分需要他们的全名(我可以得到第一部分)。

def main():
    """To print a names numeric value"""
    name = input("Enter your full name here: ") #enters a name
    name.replace("", "") #removes all spaces
    str.lower(name) #converts all characters to lower case
    output = [] #creates an empty list
    for character in name: 
        number = ord(character) - 96 #ASCII code to make a=1
        output.append(number) #adds number to the empty list

    print sum(output) #prints sum of output
main()

如果我输入名字和姓氏,则会给出错误的值。我认为问题是空间,但从我对python的理解,应该在开始时删除空间。资本似乎也改变了价值 我昨晚制作了这个帖子并将其删除,因为我无法弄清楚如何让代码正常打印。现在应该没事了。

感谢任何帮助,谢谢。

5 个答案:

答案 0 :(得分:0)

name.replace("", "")

应该是

name.replace(" ","")

答案 1 :(得分:0)

你的替换电话是错误的。

name.replace("", "")

用空字符串替换name中的空字符串,然后将结果抛出。你想要

name = name.replace(' ', '')

Python中的字符串是不可变的,这意味着您无法修改其内容。因此,对字符串执行某些转换的字符串函数永远不会更改原始字符串,它们必须返回一个新字符串。但是你可以将新字符串绑定到旧名称,正如我上面所做的那样。

Python并没有抱怨作为.replace()的第一个参数给出的空字符串,这似乎很奇怪。但这样做完全没问题。例如,

>>> s='abcdef'
>>> s.replace('','-')
'-a-b-c-d-e-f-'

答案 2 :(得分:0)

不是为了删除不良角色,为什么不算数好呢?

from string import ascii_lowercase

# create a letter-value dictionary
base = ord("a") - 1
letter_value = {ch: ord(ch) - base for ch in ascii_lowercase}

def name_value(s):
    return sum(letter_value.get(ch, 0) for ch in s.lower())

答案 3 :(得分:0)

以下代码可满足您的需求:

def main():
    """To print a names numeric value"""
    name = input("Enter your full name here: ")
    return sum(ord(character) - 96 for character in name.lower() if character != " ")

示例:

>>> main()
Enter your full name here: a
1
>>> main()
Enter your full name here: abc
6
>>> main()
Enter your full name here: a b          c
6

讨论

代码正文缩小为:

sum(ord(character) - 96 for character in name.lower() if character != " ")

一次拍摄一件:

  • sum(...)

    这是对内容的总结。

  • ord(character) - 96

    这会产生您想要的数字。

  • for character in name.lower()

    这会循环小写版name中的每个字符。

  • if character != " "

    这会将循环限制为那些不是空白的字符。

替代

完成同样事情的方式略有不同:

def main():
    """To print a names numeric value"""
    name = input("Enter your full name here: ")
    return sum( ord(c) - 96 for c in name.replace(' ', '').lower())

如果字符!=“”`,这将消除replace(' ', '') instead of with的空白。否则,它的工作方式相同。

答案 4 :(得分:0)

已经提出了一些观点,但我会重申。

name.replace(" ", "") #removes all spaces
miniscule_name = name.lower() #converts all characters to lower case

需要分配小写,可以重新分配到相同的名称,没有区别。

for character in miniscule_name:
    number = ord(character) - 96   #ASCII code to make a=1
    output.append(number) #adds number to the empty list