项目17使用Python
我目前正在使用Python解决Euler项目的第17个问题。以下是问题陈述的链接: 以下是我的Python解决方案:项目17使用Python,python,Python,我目前正在使用Python解决Euler项目的第17个问题。以下是问题陈述的链接: 以下是我的Python解决方案: def no_to_words(n): num = str(n) s = "" hunds = n/100 ten = n%100 tens = ten/10 units = ten%10 if(len(num) == 3): if(n == 100): return "one hu
def no_to_words(n):
num = str(n)
s = ""
hunds = n/100
ten = n%100
tens = ten/10
units = ten%10
if(len(num) == 3):
if(n == 100):
return "one hundred"
if(hunds == 1):
s = s + "one hundred and"
elif(hunds == 2):
s = s + "two hundred and"
elif(hunds == 3):
s = s + "three hundred and"
elif(hunds == 4):
s = s + "four hundred and"
elif(hunds == 5):
s = s + "five hundred and"
elif(hunds == 6):
s = s + "six hundred and"
elif(hunds == 7):
s = s + "seven hundred and"
elif(hunds == 8):
s = s + "eight hundred and"
else:
s = s + "nine hundred and"
if(ten == 11):
s = s + " eleven"
return s
elif(ten == 12):
s = s + " twelve"
return s
elif(ten == 13):
s = s + " thirteen"
return s
elif(ten == 14):
s = s + " fourteen"
return s
elif(ten == 15):
s = s + " fifteen"
return s
elif(ten == 16):
s = s + " sixteen"
return s
elif(ten == 17):
s = s + " seventeen"
return s
elif(ten == 18):
s = s + " eighteen"
return s
elif(ten == 19):
s = s + " nineteen"
return s
if(tens == 2):
s = s + " twenty"
elif(tens == 3):
s = s + " thirty"
elif(tens == 4):
s = s + " forty"
elif(tens == 5):
s = s + " fifty"
elif(tens == 6):
s = s + " sixty"
elif(tens == 7):
s = s + " seventy"
elif(tens == 8):
s = s + " eighty"
elif(tens == 9):
s = s + " ninety"
if(units == 1):
s = s + " one"
elif(units == 2):
s = s + " two"
elif(units == 3):
s = s + " three"
elif(units == 4):
s = s + " four"
elif(units == 5):
s = s + " five"
elif(units == 6):
s = s + " six"
elif(units == 7):
s = s + " seven"
elif(units == 8):
s = s + " eight"
elif(units == 9):
s = s + " nine"
if(len(num) == 2):
if(n == 10):
return "ten"
if(ten == 11):
s = s + "eleven"
return s
elif(ten == 12):
s = s + "twelve"
return s
elif(ten == 13):
s = s + "thirteen"
return s
elif(ten == 14):
s = s + "fourteen"
return s
elif(ten == 15):
s = s + "fifteen"
return s
elif(ten == 16):
s = s + "sixteen"
return s
elif(ten == 17):
s = s + "seventeen"
return s
elif(ten == 18):
s = s + "eighteen"
return s
elif(ten == 19):
s = s + "nineteen"
return s
if(tens == 2):
s = s + "twenty"
elif(tens == 3):
s = s + "thirty"
elif(tens == 4):
s = s + "forty"
elif(tens == 5):
s = s + "fifty"
elif(tens == 6):
s = s + "sixty"
elif(tens == 7):
s = s + "seventy"
elif(tens == 8):
s = s + "eighty"
elif(tens == 9):
s = s + "ninety"
if(units == 1):
s = s + " one"
elif(units == 2):
s = s + " two"
elif(units == 3):
s = s + " three"
elif(units == 4):
s = s + " four"
elif(units == 5):
s = s + " five"
elif(units == 6):
s = s + " six"
elif(units == 7):
s = s + " seven"
elif(units == 8):
s = s + " eight"
elif(units == 9):
s = s + " nine"
if(len(num) == 1):
if(units == 1):
s = "one"
elif(units == 2):
s = "two"
elif(units == 3):
s = "three"
elif(units == 4):
s = "four"
elif(units == 5):
s = "five"
elif(units == 6):
s = "six"
elif(units == 7):
s = "seven"
elif(units == 8):
s = "eight"
elif(units == 9):
s = "nine"
if(len(num) == 4):
return "one thousand"
return s
final = ""
for e in range(1, 1001):
s = no_to_words(e)
final = final + s
ultimate = final.replace(" ", "")
print len(ultimate)
现在,这个问题的答案是(扰流板):
21124
然而,我的答案是21121。我的代码怎么了?我似乎想不出这个问题。您从未讨论过
tens==1的情况。你不考虑100的精确倍数。 < P>你从未涉及过<代码> TENS==1 的情况。你不考虑100的精确倍数。 < P>看起来你可能在这里重新发明轮子。我用了图书馆,而不是用“不”字。这似乎给了我正确的答案
total = 0
for num in range(1, 1001):
total += len(num2words(num).replace(" ", "").replace("-", ""))
print(total)
21124
看起来你可能正在重新发明轮子。我用了图书馆,而不是用“不”字。这似乎给了我正确的答案
total = 0
for num in range(1, 1001):
total += len(num2words(num).replace(" ", "").replace("-", ""))
print(total)
21124
你应该真正了解列表和字典;10例如,一次使用10条if语句可以通过使用字典查找来替换。想想使用number={1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7',8:'8',9:'9',10:'10',11:'11',12:'12',13:'13',14:'14',15:'15',16:'16',17:'18',19:'19',20:'20',30:'30',40:'40',50:'50',60:'60',70:'70',80:'80',90:'90',100:'000:'
…运行提供的示例,no-to-u-words(342)=“九百零二”
和no-to-u-words(115)=='玖佰壹拾伍'
。我从你的代码中得到了答案16981,所以我不知道你在运行什么。你应该真正了解列表和字典;例如,使用字典查找可以一次替换10 if语句。想想你可以用number={1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7',8:'8',9:'9',10:'10',11:'11',12:'12',13:'13',14:'14',15:'15',16:'16',17:'18',19:'19',20:'20',30:'30',40:'40',50:'50',60:'60',70:'70',80:'80',90:'90',100:'000:'
…运行提供的示例,no-to-u-words(342)='九百零二'
和no-to-u-u-words(115)='九百一十五'
。我从您的代码中得到了答案16981,所以我不知道您在运行什么。是的。因此缺少了“十”—例如210变成了“二百零二”—还有“和”这正是我所需要的!谢谢你指出这两点。是的。所以缺少了“十”——例如210变成了“二百零一”——还有“和”,这是不应该的,例如200也变成了“二百零一”。这正是我所需要的!感谢您指出这两点。我想我可以看到您的观点,但如果有人对重新生成函数感兴趣,我认为num2words是最好的建模代码。如果您不想查看源代码,也许单元测试可以帮您找出问题。我认为最好的方法是sson这个问题告诉人们,在开始一项需要大量精力的任务(我想说186行代码符合条件)之前,就开始使用python查看包索引,看看是否有什么东西可以在短时间内完成任务。我不同意的唯一一点是,解决project Euler问题并不是要有代码来解决问题,而是要弄清楚如何编写问题。而依赖库来完成所有感兴趣的部分似乎是完全不可行的事实上,如果OP没有提到Euler项目(或类似项目),我想我可以看到你的观点,但如果有人有兴趣重新制作函数,我会认为num2words是最好的建模代码。如果你不想看源代码,也许单元测试可以帮助你找出问题。我认为这是这个问题的最好教训em教授人们在开始一项需要大量精力的任务之前就开始使用python(我想说186行代码符合条件)查看包索引,看看是否有什么东西可以在短时间内完成任务。我不同意的唯一一点是,解决project Euler问题并不是要有代码来解决问题,而是要弄清楚如何编写问题。而依赖库来完成所有感兴趣的部分似乎是完全不可行的事实上,如果OP没有提到Euler项目(或类似的项目),我会争取你的答案被接受。