Donc, je travaillais sur le projet Euler n ° 17, en essayant de trouver la réponse, sans vraiment viser l'efficacité. Cependant, après avoir lu tous les numéros (je pense) imprimés, je ne peux pas trouver ce qui mène à une réponse exactement 100 caractères sur la bonne réponse. Alors j'ai décidé de venir sur SO pour savoir, et quand je l'ai compilé en ligne en utilisant Python 2.7 sur accident, j'ai eu un résultat radicalement différent! Je ne suis pas sûr pourquoi la compilation dans Python 2.7 conduit à une réponse sensiblement fausse, et dans Python 3 c'est à peine éteint. Quoi qu'il en soit voici les deux endroits que je Compilé en ligne:Résultats inattendus pour le projet Euler n ° 17 (Python 3 vs Python 2.7)
Bonne réponse, Mon Python 3 réponse, Mon Python 2.7 Réponse: 21124, 21224, 18632
Python 3:http://ideone.com/ugfSV1
Python 2.7: Je ne sais pas comment le partager, donc il vous suffit de copier et coller le code ci-dessous manuellement http://www.compileonline.com/execute_python_online.php
Voici mon algorithme:
import time
start = time.time()
singles = {0: "",
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
8: "eight",
9: "nine",
10: "ten",
11: "eleven",
12: "twelve",
13: "thirteen",
14: "fourteen",
15: "fifteen",
16: "sixteen",
17: "seventeen",
18: "eighteen",
19: "nineteen"}
tens = {2: "twenty",
3: "thirty",
4: "fourty",
5: "fifty",
6: "sixty",
7: "seventy",
8: "eighty",
9: "ninety"}
hundred = "hundred"
count = 0
for num in range(1001):
if len(str(num)) == 4:
word = "onethousand"
elif len(str(num)) == 3:
first = singles[num // 100] + hundred
if num % 100 == 0:
first = singles[num // 100] + hundred
second = ""
elif num % 100 < 20:
first += "and"
second = singles[num % 100]
elif num % 100 < 100:
first += "and"
second = tens[(num % 100) // 10]
if isinstance(((num % 100)/10), float) and (num % 100 > 20):
third = singles[(num % 100) % 10]
else:
third = ""
word = first + second + third
elif len(str(num)) == 2:
if num > 19:
first = tens[num // 10]
second = singles[num % 10]
word = first + second
else:
word = singles[num]
elif len(str(num)) == 1:
word = singles[num]
print(word)
count += len(word)
print("The total number of letters in all words from 1 to 1000 is: {}".format(
count))
print("Time: {}".format(time.time() - start))
' "quarante"' ne devrait pas avoir 'u' .. – DSM
@DSM Incroyable lol merci beaucoup. –