Я пытаюсь решить контрольный пример из тренинга 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)
1
victor 28 Авг 2017 в 02:39

3 ответа

Лучший ответ

Вы переопределяете переменную s каждый раз и сохраняете в ней квадрат key[character] (что неверно). Вам нужно создать переменную для сохранения результата. Попробуй это:

result = 1

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

print(result)
0
Danil Speransky 27 Авг 2017 в 23:48

Вы можете попробовать это:

s = 1

for i in message:
  s *= key[i]

Обратите внимание, что более простой способ создать словарь букв и их соответствующих значений - сделать это:

import string

key = {a:i+1 for a, i in zip(string.ascii_uppercase, range(26))}

Для чисто Python3-решения вы можете использовать itertools.accumulate:

import itertools
import operator
result = list(itertools.accumulate([key[i] for i in message], func=operator.mul))[-1]

print(result)

Выход:

994500
0
Ajax1234 27 Авг 2017 в 23:58

Вы должны сохранить свой ответ в 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)
0
Daniyal Ahmed 27 Авг 2017 в 23:46