我是一个非常新的编程和承认尴尬分享我的代码批评。这段代码可以工作并产生以下问题的正确答案(https://projecteuler.net/problem=17),但是我希望我可以得到一些关于如何使它更简单、更精简的批评,或者甚至从一个全新的角度来处理这个问题,这样我就可以更好地从这个解决方案中学习。谢谢你的帮助!你知道吗
# 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))
这是我的密码:
注意,我使用了一个递归函数,并且我添加了兼性参数'I'来拼写它,它记录了words中使用的最后一个索引,从而在
for num in words
循环中节省了一些迭代(实际上不是很有用,但是它只花费了6个字符^^)。然后,我使用了一个多余的lambda函数来生成count
函数,因为函数名是某种注释。 最后,我在生成器表达式上使用了sum函数。 如果删除所有出现的' '+
并用len替换count,那么代码可能会更短,但是使用此代码可以获得正确的spell
函数。你知道吗如果您不理解粗体的术语,那么您应该读一本关于python3的书。你知道吗
如果您想腾出一些时间,您甚至可以将spell函数记忆化,或者创建一个count(spell())函数来记忆(因为字母计数整数比字符串轻)。你知道吗
可以使用if/elif
您还可以定义执行任何重复操作的函数。我也会做所有的计算,不管它的范围。比如说
对于num=55,结果是digit=0,但没关系,您可以处理它并跳过它。你知道吗
想一想如果你不得不把代码写到一百万的话会发生什么。什么看起来是重复的?把代码拉出来,做更多的函数。你知道吗
相关问题 更多 >
编程相关推荐