2016-11-18 2 views
0

Я попытался решить эту проблему, используя фактические слова и функцию len(). Я продолжаю получать 21224, но ответ 21124. Может кто-нибудь объяснить, почему? Вот проблема.Project Euler Prob 7 Python

Если числа от 1 до 5 записаны словами: один, два, три, четыре, пять, то есть 3 + 3 + 5 + 4 + 4 = 19 букв, используемых в общей сложности.

Если все цифры от 1 до 1000 (одна тысяча) включительно были записаны на словах, сколько букв будет использовано?

ПРИМЕЧАНИЕ. Не считайте пробелы или дефисы. Например, 342 (триста сорок два) содержит 23 буквы и 115 (сто пятнадцать) содержит 20 букв. Использование «и» при написании номеров соответствует британскому использованию.

one_nine='onetwothreefourfivesixseveneightnine' 
ten_nineteen='teneleventwelvethirteenfourteenfifteensixteenseventeeneighteennineteen' 
twenty_ninety_byten='twentythirtyfourtyfiftysixtyseventyeightyninety' 
one_ninetynine_list=[one_nine*9,ten_nineteen,twenty_ninety_byten*10] 
one_ninetynine=''.join(one_ninetynine_list) 

onehundred_ninehundred_byonehundred_list=[one_nine,'hundred'*9] 
onehundred_ninehundred_byonehundred=''.join(onehundred_ninehundred_byonehundred_list) 
one_onethousand_list=[one_ninetynine*10,onehundred_ninehundred_byonehundred*100,'and'*891,'onethousand'] 
one_onethousand=''.join(one_onethousand_list) 
print len(one_onethousand) 

ответ

1

Проверьте свое правописание на сорок. Правильный способ заклинания - 'сорок' не 'fourty'.

0

вы можете попробовать с этим

from num2words import num2words 

list = [] 
for i in range(1, 1001): 
    list.append(num2words(i, lang='en_GB')) 

letters = 0 
for element in list: 
    for letter in element: 
     if 97 <= ord(letter) <= 122: 
      letters += 1 

print(letters) 
+0

Когда я использую свой код в Python 2.7.11 он говорит num2words не существует. Может быть, он работает только в python 3? которые я не хочу использовать кстати. –

+0

pip install num2words –