我對編程非常陌生,無可否認,我的代碼在批判中分享。此代碼的工作原理和產生以下問題的正確答案(https://projecteuler.net/problem=17),但我希望我可以對如何使它不那麼醜陋和簡化,甚至從一個全新的角度來解決問題提出批評,以便我可以更好地從這個解決方案學習。非常感謝您的幫助!Project Euler no。 17 - 精簡Python
# the final list that holds the string lengths
addList = []
# dictionary holding integer:corresponding word pairs
numbersDict = {
0:"zero",
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",
20:"twenty",
30:"thirty",
40:"forty",
50:"fifty",
60:"sixty",
70:"seventy",
80:"eighty",
90:"ninety"
}
### There has to be an easier way to do all this below ###
def numberLetters(num):
letters = ""
if 0 < num <= 20:
letters += numbersDict[num]
if 21 <= num <= 99:
a,b = divmod(num, 10)
if b == 0:
letters += numbersDict[a*10]
else:
letters += numbersDict[a*10] + numbersDict[b]
if 100 <= num <= 999:
if num % 100 == 0:
letters += numbersDict[int(num/100)] + "hundred"
else:
digit = int(num/100)
num = num - digit * 100
if 0 < num <= 20:
letters += numbersDict[digit] + "hundredand" + numbersDict[num]
if 21 <= num <= 99:
a,b = divmod(num, 10)
if b == 0:
letters += numbersDict[digit] + "hundredand" + numbersDict[a*10]
else:
letters += numbersDict[digit] + "hundredand" + numbersDict[a*10] + numbersDict[b]
if num == 1000:
letters += "onethousand"
return letters
for i in range(1,1001):
addList.append(len(numberLetters(i)))
print(sum(addList))
如果您想對工作代碼進行批評,請在[Code Review](http://codereview.stackexchange.com/) – Blastfurnace