Как преобразовать ввод в алфавитном порядке в числа и сложить их вместе

#python #python-3.x

Вопрос:

я пытаюсь преобразовать пользовательский ввод только в алфавиты и преобразовать каждый алфавит в число(например, a=1, b=2), а затем цифры вместе. Я смог завершить первую часть, но не уверен, как сделать вторую часть.

 import re name = input("Name: ") cleaned_name = filter(str.isalpha, name) cleaned_name = "".join(cleaned_name) print("Your 'cleaned up' name is: ", cleaned_name) numbers = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6,'g':7,'h':8,'i':9,'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} for al in range(len(cleaned_name)):  print(numbers,sep=' ')  #if input is jay1joe2, cleaned name will be jayjoe #after the 'numerology', will print the following below #10 1 25 10 15 5 = 66  

Комментарии:

1. зачем импортировать re , если вы им не пользуетесь?

2. снова прочитал свой любимый учебник по python?

Ответ №1:

Что-то подобное должно сработать для того, что вы пытаетесь сделать.

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

 import string  # name = input("Name: ") name = 'jay1joe2'  cleaned_name = filter(str.isalpha, name) cleaned_name = "".join(cleaned_name) print("Your 'cleaned up' name is: ", cleaned_name)  numbers = {char: i for i, char in enumerate(string.ascii_lowercase, start=1)}  result = list(map(numbers.get, cleaned_name)) print(*result, sep=' ', end=' ') print('=', sum(result))  

Где вторая часть (после numbers ) также может быть написана альтернативно следующим образом, используя f-строки в 3.6 :

 result = [numbers[c] for c in cleaned_name] print(f"{' '.join(map(str, result))} = {sum(result)}")  

Результат:

 Your 'cleaned up' name is: jayjoe 10 1 25 10 15 5 = 66  

Ответ №2:

 name = input("Name: ") name = name.lower() name1 = list(name) Addition: int = 0 for k in name1:  if ord(k)-96 lt; 1 or ord(k)-96 gt; 26:  pass  else:  Addition = Addition   ord(k) - 96 print(Addition)  

Мы можем использовать коды ascii для цифр и символов 🙂

Ответ №3:

во-первых, более простым способом найти «числовое» значение строки было бы иметь одну длинную строку со всеми буквами алфавита, т. Е.: numbers = "abcd..." а затем найти «точку» данной буквы, которую вы могли бы сделать number.find(letter) .

для второй части я бы использовал цикл for, поэтому

 number_name = "" numbers = "abcdefghijklmnopqrstuvwxyz" for letter in cleaned_name:  number_name  = str(number.find(letter))   " " number_name = number_name[:-1] # to remove the extra   at the end print(number_name)  

`

Комментарии:

1. Я едва ли понимаю, что ваше предложение лучше, чем использование диктанта, как это делает ОП.

2. он чище и отвечает на заданный вопрос?

3. «чище» — это ваше собственное мнение, и я с ним не согласен. Дело в том, что это, безусловно, менее эффективно.

4. @35308 Я должен был бы подтвердить, что использование dict here в целом является лучшим вариантом (более быстрый поиск с помощью хэш-карты). Это .find хорошая идея, но единственным недостатком является то, что она в среднем выполняется медленнее, чем поиск по ключу. Пробел в качестве первого элемента «» в числах также кажется чем-то нежелательным.