如何迭代应用条件的字符串?

问题描述 投票:0回答:5

我正在编写一个代码,它给字符串的每个字母一个特定的数字,并在运行整个字符串时返回最后的数字。

我也尝试过使用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

python string for-loop
5个回答
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)

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)

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以大写形式返回字符串,但您需要将其保存在某处以备后用。

你不想嵌套ifs,如果它包含A,B,C,D和E,你不想添加5。

对于full_name中的i,通过full_name迭代,并且可以使用i作为full_name中的每个char。

'Y'中的X,如果X在Y中,则返回true,因此只需使用逻辑运算符。


0
投票

好的,让我们暂时考虑一下你实际做了什么,这样你才明白为什么会失败:

首先,第一部分应该是

full_name = full_name.upper()

因此修改并存储变量

然后,在for循环中你正在问

if 'A' or 'J' or 'S' in full_name

因为'A'将在full_namesum将增加您选择的值。然后,无需进入循环的下一步,您就会问

if 'B' or 'K' or 'T' in full_name:

因为'B'将在full_namesum将增加您选择的值。

你实际上根本没有使用你的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)

希望能帮助到你。


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

这个解决方案应该非常快。

© www.soinside.com 2019 - 2024. All rights reserved.