如何遍历带条件的字符串?

时间:2019-02-18 19:21:35

标签: python string for-loop

我正在编写一个代码,该代码为字符串的每个字母赋予一定的数字,并在字符串运行了整个字符串时返回最终数字。

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

5 个答案:

答案 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

此解决方案应该很快。