前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一份学习Python的礼包

一份学习Python的礼包

作者头像
stormwen
发布2019-08-05 11:05:11
3130
发布2019-08-05 11:05:11
举报
文章被收录于专栏:公众号:googpy公众号:googpy

数字1到5可以被写成:one,two,three,four,five,这些字母的总长度为:3+3+5+4+4=19,现在求序列1到1000(包括1000),这些数字写成单词,总长度为多少?空格和连字符不计算。

比如342(three hundred and forty-two)长度为23,115(one hundred and fifteen)长度为20,1000(one thousand)长度为11。

求解说明

假设N为[1,1000]之间的数字,可以分为以下四种情况:

(1)、当0<N<=20,直接1-20范围内数字对应的单词,用数字作为下标直接取出数组中的单词;

(2)、当20<N<100,此时数字由个位和十位组成,十位从20<N<100取出,对应个位是否为零分类讨论;当个位数不为0时,还要从0<N<=20内取出个位;

(3)、当100< =N <100,此时英语单词中会包含“hundred”这个单词,在不是整百时,还需要用到“and”这个单词。此时单词组成是这样的:百位+hundred+(“and”+0<N<=20对应的单词)或者当b大于20时,此时从20<N<100取出对应单词;

(4)、当N=1000时,作为常量,即“one thousand”。

具体代码如下:

代码语言:javascript
复制
mapping = {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',100:'hundred',1000:'thousand'}

def less_than_twenty(n):    #0~20
    if n<=20 and n>0:
        return mapping[n]

def less_than_hundred(n):   #20~100
    if n>20 and n<100:
        a=int(n/10)       #十位数
        b=n%10            #个位数
        if b==0:
            return mapping[a*10]
        else:
            return  mapping[a*10]+mapping[b]

def less_than_thousand(n):    #100~1000
    words = []
    if n>=100 and n<1000:
        a = int(n/100)
        b = n%100
        words.append(mapping[a])
        words.append(mapping[100])
        if b>0 and b<=20:
            words.append('and')
            words.append(less_than_twenty(b))
        if b>20:
            words.append('and')
            words.append(less_than_hundred(b))
    return ''.join(words)

def get_words(n):
    if n>0 and n<=20:
        return less_than_twenty(n)
    elif n<100:
        return less_than_hundred(n)
    elif n>=100 and n<1000:
        return less_than_thousand(n)
    elif n==1000:
        return 'onethousand'

res = map(get_words,[x for x in range(1,1001)])
print(sum(map(len,res)))

结果

代码语言:javascript
复制
21124

这道题是综合了字典、列表、函数、逻辑判断和高级函数,如果这道题会了,Python极速入门差不多了。

我把最近分享的入门题目整理在了一起,如果有需要的小伙伴可以后台「入门」即可获取,每道题都很经典,都是我花时间从leetcode上找的,对于编程小白或者是Python的初学者都是很有帮助的。

最后,我再给大家分享一个Python的入门与进阶的视频,是一个慕课网上的视频,老师通过具体实例来讲Python知识,通俗易懂,大家有需要,后台回复「1024」即可获得。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 googpy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档