我正在编写一个代码,该代码为字符串的每个字母赋予一定的数字,并在字符串运行了整个字符串时返回最终数字。
我也尝试过使用elif,但没有得到正确的结果。
full_name = str(input('Enter your full name: '))
full_name.upper()
sum = 0
for i in full_name:
if 'A' or 'J' or 'S' in full_name:
sum += 1
if 'B' or 'K' or 'T' in full_name:
sum += 2
if 'C' or 'L' or 'U' in full_name:
sum +=3
if 'D' or 'M' or 'V' in full_name:
sum +=4
if 'E' or 'N' or 'W' in full_name:
sum+=5
if 'F' or 'O' or 'X' in full_name:
sum+=6
if 'G' or 'P' or 'Y' in full_name:
sum+=7
if 'H' or 'Q' or 'Z' in full_name:
sum+=8
if 'I' or 'R' in full_name:
sum+=9
print(sum)
我的代码正在运行,但是我没有得到正确的号码。例如,如果full_name = 'abc'
,运行代码,我将得到sum = 135
。我应该得到sum= 6
答案 0 :(得分:2)
我认为您没有保存您的最高翻译要求,您的总数可能是在说谎。无论如何,我会使用带有查找值的字典,而不是像这样的if语句链。
full_name = str(input('Enter your full name: ')).upper()
letters = {"A":1, "J":1, "S":1, "B":2, "K":2, "T":2, "C":3, "L":3, "U":3,
"D":4, "M":4, "V":4, "E":5, "N":5, "W":5, "F":6, "O":6, "X":6,
"G":7, "P":7, "Y":7, "H":8, "Q":8, "Z":8, "I":9, "R":9}
total = 0
for i in full_name:
try:
total += letters.get(i)
except TypeError: #handles items not in dictionary such as space and punct
pass
print(total)
答案 1 :(得分:2)
尝试一下:
full_name = input('Enter your full name: ').upper()
Sum = 0
for i in full_name:
if i == ('A' or 'J' or 'S'):
Sum += 1
if i == ('B' or 'K' or 'T'):
Sum += 2
if i == ('C' or 'L' or 'U'):
Sum +=3
if i == ('D' or 'M' or 'V'):
Sum +=4
if i == ('E' or 'N' or 'W'):
Sum+=5
if i == ('F' or 'O' or 'X'):
Sum+=6
if i == ('G' or 'P' or 'Y'):
Sum+=7
if i == ('H' or 'Q' or 'Z'):
Sum+=8
if i == ('I' or 'R'):
Sum+=9
print(Sum)
您可以通过以下方式编写代码:
full_name = input('Enter your full name: ').upper()
t = ''.maketrans('AJSBKTCLUDMVENWFOXGPYHQZIR','11122233344455566677788899')
List = [i.translate(t) for i in full_name]
Sum = 0
for x in List:
Sum += int(x)
print(Sum)
答案 2 :(得分:0)
full_name = str(input('Enter your full name: '))
full_name = full_name.upper()
sum = 0
for i in full_name:
if ('A' in i) or ('J' in i) or ('S' in i):
sum += 1
if ('B' in i) or ('K' in i) or ('T' in i):
sum += 2
if ('C' in i) or ('L' in i) or ('U' in i):
sum +=3
if ('D' in i) or ('M' in i) or ('V' in i):
sum +=4
if ('E' in i) or ('N' in i) or ('W' in i):
sum+=5
if ('F' in i) or ('O' in i) or ('X' in i):
sum+=6
if ('G' in i) or ('P' in i) or ('Y' in i):
sum+=7
if ('H' in i) or ('Q' in i) or ('Z' in i):
sum+=8
if ('I' in i) or ('R' in i):
sum+=9
print(sum)
您犯了几个错误:
.upper确实以大写形式返回到字符串,但是您需要将其保存在以后的地方。
您不想嵌套if,如果它包含A,B,C,D和E,则不希望在其中添加5。
对于全名中的i,通过全名进行迭代,您可以将i用作全名中的每个字符。
X在“ Y”中,如果X在Y中,则返回true,因此只需对它们使用逻辑运算符。
答案 3 :(得分:0)
好吧,让我们仔细考虑一下您实际在做什么,以便了解失败的原因:
首先,第一部分应该是
full_name = full_name.upper()
因此变量被修改并存储
然后,在for循环中,您要询问
if 'A' or 'J' or 'S' in full_name
由于'A'
将位于full_name
中,sum
将增加您选择的值。
然后,您没有进行循环的下一步,而是询问
if 'B' or 'K' or 'T' in full_name:
由于'B'
将位于full_name
中,因此sum
将增加您选择的值。
您实际上根本没有使用i
变量,而是在询问'foo'
是否在full_name
中,并且总是这样(在您给出的示例中),然后 转到第二步,然后再次执行,依此类推。
您想要做的是使用i
变量,以便您可以逐步进行评估,当它满足条件时,请转到迭代的下一步。
您要尝试执行的操作应如下所示:
full_name = full_name.upper()
sum = 0
for i in full_name:
if i == 'A' or i == 'J' or i == 'S':
sum += 1
elif i == 'B' or i == 'K' or i == 'T':
sum += 2
elif i == 'C' or i == 'L' or i == 'U':
sum +=3
elif i == 'D' or i == 'M' or i == 'V':
sum +=4
elif i == 'E' or i == 'N' or i == 'W':
sum+=5
elif i == 'F' or i == 'O' or i == 'X':
sum+=6
elif i == 'G' or i == 'P' or i == 'Y':
sum+=7
elif i == 'H' or i == 'Q' or i == 'Z':
sum+=8
else i == 'I' or i == 'R':
sum+=9
print(sum)
希望有帮助。
答案 4 :(得分:0)
如果您想使用if
语句,则可以使用以下结构:
full_name = full_name.upper()
sum = 0
for i in full_name:
if i in 'AJS':
sum += 1
elif i in 'BKT':
sum += 2
...
这是我的解决方案。首先,您可以使用交集找到名称与字符串s
之间的常见字母。其次,您可以使用函数itemgetter()
从字典中获取值并将其求和:
from itertools import count
from operator import itemgetter
s = 'AJSBKTCLUDMVENWFOXGPYHQZIR'
# create dict for lookups
c = (i for i in count(start=1) for _ in range(3))
d = {i: next(c) for i in s}
# {'A': 1, 'J': 1, 'S': 1, 'B': 2, 'K': 2, 'T': 2, 'C': 3, 'L': 3, 'U': 3, 'D': 4, 'M': 4, 'V': 4, 'E': 5, 'N': 5, 'W': 5, 'F': 6, 'O': 6, 'X': 6, 'G': 7, 'P': 7, 'Y': 7, 'H': 8, 'Q': 8, 'Z': 8, 'I': 9, 'R': 9}
def func(name):
name = name.upper()
intersec = set(name).intersection(s)
return sum(itemgetter(*intersec)(d))
print(func('Mykola Zotko'))
# 33
此解决方案应该很快。