#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
хорошая идея, но единственным недостатком является то, что она в среднем выполняется медленнее, чем поиск по ключу. Пробел в качестве первого элемента «» в числах также кажется чем-то нежелательным.