循环遍历具有int值的字符串的字符

2024-10-04 07:25:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解决USACO培训中的一个测试用例:“你的车在这里”。我尝试分配字母表中的数字值,并将字符串中的每个字符相乘,得到一个乘积。你知道吗

示例:

C   O   M   E   T  Q       
3 *  15 *   13 * 5  * 20 * 17  =  994500 

不幸的是,产品总是乱七八糟。你知道吗

key = {
    'A':1,
    'B':2,
    'C':3,
    'D':4,
    'E':5,
    'F':6,
    'G':7,
    'H':8,
    'I':8,
    'J':10,
    'K':11,
    'L':12,
    'M':13,
    'N':14,
    'O':15,
    'P':16,
    'Q':17,
    'R':18,
    'S':19,
    'T':20,
    'U':21,
    'V':22,
    'W':23,
    'X':24,
    'Y':25,
    'Z':26
}

file = open("testdata.txt", "r")

message = file.readline(2)

for character in message:
    preSignal = key[character]
    s = preSignal*key[character]
    print(s)

Tags: key字符串示例message产品测试用例数字open
3条回答

问题与解决方案

您的问题是,您实际上是在覆盖循环的每次迭代s的值。您需要创建一个变量来保存每次迭代的当前结果的值,并将其添加到该变量中

result = 1
for character in message:
    result *= key[character] # same as result = result * key[character]

改进

您可以简化字母到数字的映射:

key = {chr(number): number - 64 for number in range(65, 91)}

或者可以使用string.ascii_letters

from string import ascii_letters
key = {letter: number for number, letter in enumerate(ascii_letters, 1)}

每次都重写变量s,并将平方key[character]保存到它(这是不对的)。您需要创建一个变量来保存结果。试试这个:

result = 1

for character in message:
    result *= key[character]

print(result)

您需要在相乘之前将答案保存到s,这样您的代码将是:

key = {'A':1,
   'B':2,
   'C':3,
   'D':4,
   'E':5,
   'F':6,
   'G':7,
   'H':8,
   'I':8,
   'J':10,
   'K':11,
   'L':12,
   'M':13,
   'N':14,
   'O':15,
   'P':16,
   'Q':17,
   'R':18,
   'S':19,
   'T':20,
   'U':21,
   'V':22,
   'W':23,
   'X':24,
   'Y':25,
   'Z':26}

infile = open("testdata.txt", "r")

message = infile.readline(2)
s=1
for character in message:

    s = s*key[character]
print(s)

相关问题 更多 >