Совпадение буквы с соответствующим номером в списке в Jython - PullRequest
1 голос
/ 06 апреля 2020

Я смотрю на создание программы, чтобы, когда пользователь вводит имя в качестве аргумента, он сопоставляет каждую букву с соответствующим числом, хранящимся в списке.

Например:

def nameNumbers(name):
    alphabetList = ['Aa', 8.17, 'Bb', 1.49, 'Cc', 2.78, 'Dd', 4.25, 
  'Ee', 12.70, 'Ff', 2.23, 'Gg', 2.02, 'Hh', 6.09, 'Ii', 6.97, 
  'Jj', 0.15, 'Kk', 0.77, 'Ll', 4.03, 'Mm', 2.41, 'Nn', 6.75, 
  'Oo', 7.51, 'Pp', 1.93, 'Qq', 0.10, 'Rr', 5.99, 'Ss', 6.33, 
  'Tt', 9.06, 'Uu', 2.76, 'Vv', 0.98, 'Ww', 2.36, 'Xx', 0.15, 
  'Yy', 1.97, 'Zz', 0.07]

Так что, если бы я должен был передать "Адам", он бы возвратил:

8.17
4.25
8.17
2.41

Пока я получил это, но он возвращает только один элемент в списке и нуждается в вводе, чтобы быть точным:

    for letter in name:
     indexOfLetter = alphabetList.index(name)
     letterFrequency = alphabetList[indexOfLetter + 1] 
     print(letterFrequency)

Спасибо!

1 Ответ

0 голосов
/ 06 апреля 2020

Небольшое изменение в вашем коде

Код

def nameNumbers(name):
  alphabetList = ['Aa', 8.17, 'Bb', 1.49, 'Cc', 2.78, 'Dd', 4.25, 
  'Ee', 12.70, 'Ff', 2.23, 'Gg', 2.02, 'Hh', 6.09, 'Ii', 6.97, 
  'Jj', 0.15, 'Kk', 0.77, 'Ll', 4.03, 'Mm', 2.41, 'Nn', 6.75, 
  'Oo', 7.51, 'Pp', 1.93, 'Qq', 0.10, 'Rr', 5.99, 'Ss', 6.33, 
  'Tt', 9.06, 'Uu', 2.76, 'Vv', 0.98, 'Ww', 2.36, 'Xx', 0.15, 
  'Yy', 1.97, 'Zz', 0.07]

  for letter in name:
     # Since each has upper followed by lower case
     # Use letter.upper() + letter.lower() since you have upper 
     indexOfLetter = alphabetList.index(letter.upper() + letter.lower())
     letterFrequency = alphabetList[indexOfLetter + 1] 
     print(letterFrequency)


nameNumbers("Adam")

Выход

8.17
4.25
8.17
2.41

Альтернатива

Программа должна вычислять числа и печатать программу извне.

Кроме того, для l oop можно заменить более краткими представлениями списка.

def nameNumbers(name):
  alphabetList = ['Aa', 8.17, 'Bb', 1.49, 'Cc', 2.78, 'Dd', 4.25, 
  'Ee', 12.70, 'Ff', 2.23, 'Gg', 2.02, 'Hh', 6.09, 'Ii', 6.97, 
  'Jj', 0.15, 'Kk', 0.77, 'Ll', 4.03, 'Mm', 2.41, 'Nn', 6.75, 
  'Oo', 7.51, 'Pp', 1.93, 'Qq', 0.10, 'Rr', 5.99, 'Ss', 6.33, 
  'Tt', 9.06, 'Uu', 2.76, 'Vv', 0.98, 'Ww', 2.36, 'Xx', 0.15, 
  'Yy', 1.97, 'Zz', 0.07]

  indexes = [alphabetList.index(letter.upper() + letter.lower()) for letter in name]
  return [alphabetList[i+1] for i in indexes]

print(*nameNumbers("Adam"), sep="\n")

Тот же вывод, что и выше.

...