我正在编写一个代码,它给字符串的每个字母一个特定的数字,并在运行整个字符串时返回最后的数字。
我也尝试过使用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
我认为你不能保存你的上层翻译,而你的总翻译可能会骗你。无论如何,我可以使用查找的值字典而不是像这样的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)
试试这个:
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)
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以大写形式返回字符串,但您需要将其保存在某处以备后用。
你不想嵌套ifs,如果它包含A,B,C,D和E,你不想添加5。
对于full_name中的i,通过full_name迭代,并且可以使用i作为full_name中的每个char。
'Y'中的X,如果X在Y中,则返回true,因此只需使用逻辑运算符。
好的,让我们暂时考虑一下你实际做了什么,这样你才明白为什么会失败:
首先,第一部分应该是
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)
希望能帮助到你。
如果你想使用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
这个解决方案应该非常快。