我是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的理解,应该在开始时删除空间。资本似乎也改变了价值 我昨晚制作了这个帖子并将其删除,因为我无法弄清楚如何让代码正常打印。现在应该没事了。
感谢任何帮助,谢谢。
答案 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