Распознавание чисел, записанных прописью от 1 до 99
Суть в том, что мне нужно чтобы строка(например: сорок три) преобразовалась в число(43) с использованием кортежей. Я пытался что-то сделать сам, но код не выводит числа.
numberstuple = (('нуль', 0), ('один', 1), ('два', 2), ('три', 3), ('четыре', 4), ('пять', 5), ('шесть', 6), ('семь', 7), ('восемь', 8), ('девять', 9),
('десять', 10), ('одиннадцать', 11), ('двенадцать', 12), ('тринадцать', 13), ('четырнадцать', 14), ('пятнадцать', 15), ('шестнадцать', 16), ('семнадцать', 17), ('восемнадцать', 18), ('девятнадцать', 19),
('двадцать', 20), ('тридцать', 30), ('сорок', 40), ('пятьдесят', 50), ('шестьдесят', 60), ('семьдесят', 70), ('восемьдесят', 80), ('девяносто', 90))
def process_input_numbers(input_numbers):
total_sum = 0
single_numbers = [num for num in input_numbers if num not in ['десять', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто']]
composite_numbers = [num for num in input_numbers if num in ['десять', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто']]
for num_word in composite_numbers:
if num_word == 'десять':
total_sum += 10
elif num_word == 'двадцать':
total_sum += 20
elif num_word == 'тридцать':
total_sum += 30
elif num_word == 'сорок':
total_sum += 40
elif num_word == 'пятьдесят':
total_sum += 50
elif num_word == 'шестьдесят':
total_sum += 60
elif num_word == 'семьдесят':
total_sum += 70
elif num_word == 'восемьдесят':
total_sum += 80
elif num_word == 'девяносто':
total_sum += 90
for num_word in single_numbers:
for num_name, num_value in numberstuple:
if num_word == num_name:
total_sum += num_value
return total_sum
N = int(input("Введите количество чисел для обработки: "))
result_sum = 0
while N != 0:
input_numbers = input()
result_sum += process_input_numbers(input_numbers)
N -= 1
print("Сумма входных чисел:", result_sum)
Спасибо за внимание и да пребудет с вами сила.
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Циклы сделаны по буквам, не по словам. Поправьте в двух местах
[num for num in input_numbers ...]
→
[num for num in input_numbers.split() ...]
.
Но не проще ли сделать решение более прямолинейным?
def numeric_value(text):
values = {
'один': 1,
'два': 2,
'три': 3,
'четыре': 4,
'пять': 5,
'шесть': 6,
'семь': 7,
'восемь': 8,
'девять': 9,
'десять': 10,
'одиннадцать': 11,
'двенадцать': 12,
'тринадцать': 13,
'четырнадцать': 14,
'пятнадцать': 15,
'шестнадцать': 16,
'семнадцать': 17,
'восемнадцать': 18,
'девятнадцать': 19,
'двадцать': 20,
'тридцать': 30,
'сорок': 40,
'пятьдесят': 50,
'шестьдесят': 60,
'семьдесят': 70,
'восемьдесят': 80,
'девяносто': 90
}
return sum(values[w] for w in text.split())