题目描述

【Speech Module】:输入一个数字,将其转换成英文表达形式,字符串中的所有单词必须以一个空格字符分隔。

【输入】:一个数字(int)

【输出】:代表数字的英文字符串(str)

【前提】:0 < number < 1000

【范例】:

checkio(4)=='four'

checkio(143)=='one hundred forty three'

checkio(12)=='twelve'

checkio(101)=='one hundred one'

checkio(212)=='two hundred twelve'

checkio(40)=='forty'

解题思路

将输入的数字分为四种情况:

0 ≤ 数字 < 10:直接返回 FIRST_TEN[number - 1] 即可;

10 ≤ 数字 < 20:直接返回 SECOND_TEN[number - 10] 即可;

20 ≤ 数字 < 100:如果是 10 的倍数(number % 10 == 0),直接返回 OTHER_TENS[number // 10 - 2] 即可,如果不是 10 的倍数(number % 10 != 0),那么就要将其十位和个位连起来,即:OTHER_TENS[number // 10 - 2] + ' ' + FIRST_TEN[number % 10 - 1];

100 ≤ 数字 < 999:与第三种情况类似,实现判断是不是 100 的倍数,如果是则直接返回 FIRST_TEN[number // 100 - 1] + ' ' + HUNDRED,如果不是,则判断其除以 100 的余数是不是 10 的倍数,也就是后两位是不是 10 的倍数,即重复第三步即可。

代码实现

FIRST_TEN = ["one", "two", "three", "four", "five", "six", "seven",

"eight", "nine"]

SECOND_TEN = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",

"sixteen", "seventeen", "eighteen", "nineteen"]

OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy",

"eighty", "ninety"]

HUNDRED = "hundred"

def checkio(number):

if number >= 0 and number < 10:

english = FIRST_TEN[number - 1]

return english

elif number >= 10 and number < 20:

english = SECOND_TEN[number - 10]

return english

elif number >= 20 and number < 100:

if number % 10 == 0:

english = OTHER_TENS[number // 10 - 2]

return english

else:

english = OTHER_TENS[number // 10 - 2] + ' ' + FIRST_TEN[number % 10 - 1]

return english

else:

if number % 100 == 0:

english = FIRST_TEN[number // 100 - 1] + ' ' + HUNDRED

return english

else:

english = FIRST_TEN[number // 100 - 1] + ' ' + HUNDRED + ' ' + checkio(number % 100)

return english

if __name__ == '__main__':

#These "asserts" using only for self-checking and not necessary for auto-testing

assert checkio(4) == 'four', "1st example"

assert checkio(133) == 'one hundred thirty three', "2nd example"

assert checkio(12) == 'twelve', "3rd example"

assert checkio(101) == 'one hundred one', "4th example"

assert checkio(212) == 'two hundred twelve', "5th example"

assert checkio(40) == 'forty', "6th example"

assert not checkio(212).endswith(' '), "Don't forget strip whitespaces at the end of string"

print('Done! Go and Check it!')

大神解答

大神解答 NO.1

def checkio(number):

"""Convert Arabic numerals to English

"""

num1 = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]

num11 = [

"ten",

"eleven ",

"twelve",

"thirteen",

"fourteen",

"fifteen",

"sixteen",

"seventeen",

"eighteen",

"nineteen",

]

num2 = [

"",

"",

"twenty ",

"thirty ",

"forty ",

"fifty ",

"sixty ",

"seventy ",

"eighty ",

"ninety ",

]

num3 = [

"",

"one hundred ",

"two hundred ",

"three hundred ",

"four hundred ",

"five hundred ",

"six hundred ",

"seven hundred ",

"eight hundred ",

"nine hundred ",

]

num4 = ["", "one thousand"]

if number < 10 or number > 19:

a = str(number)

if number < 10:

a = "000" + a

elif number < 100:

a = "00" + a

elif number < 1000:

a = "0" + a

if a[2] == "1":

spel = num4[int(a[0])] + num3[int(a[1])] + num11[int(a[3])]

else:

spel = num4[int(a[0])] + num3[int(a[1])] + num2[int(a[2])] + num1[int(a[3])]

else:

spel = num11[(number - 10)]

if spel[-1] == " ":

spel = spel[0:-1]

return spel

大神解答 NO.2

FIRST_TEN = ["", "one", "two", "three", "four", "five", "six", "seven",

"eight", "nine"]

SECOND_TEN = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",

"sixteen", "seventeen", "eighteen", "nineteen"]

OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy",

"eighty", "ninety"]

def checkio(number):

result = ''

if number >= 100:

result += f'{FIRST_TEN[int(number/100)]} hundred '

number %= 100

if number >= 20:

result += f'{OTHER_TENS[int(number/10)-2]} {FIRST_TEN[number % 10]}'

elif number >= 10:

result += SECOND_TEN[number % 10]

else:

result += FIRST_TEN[number]

return result.rstrip()

外汇返佣 NO.3

FIRST_TEN = ["one", "two", "three", "four", "five", "six", "seven",

"eight", "nine"]

SECOND_TEN = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",

"sixteen", "seventeen", "eighteen", "nineteen"]

OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy",

"eighty", "ninety"]

HUNDRED = "hundred"

def checkio(number):

d = {f'x{i}': number%10**i//10**(i-1) for i in range(1, 4)}

res = ''

if d['x3']:

res += ' {} {}'.format(FIRST_TEN[d['x3'] - 1], HUNDRED)

if d['x2'] == 1:

res += ' {}'.format(SECOND_TEN[d['x1']])

elif d['x2']:

res += ' {}'.format(OTHER_TENS[d['x2'] - 2])

if d['x1'] and  not (d['x2'] == 1):

res += ' {}'.format(FIRST_TEN[d['x1'] - 1])

return res.strip()

大神解答 NO.4

FIRST_TEN = ["one", "two", "three", "four", "five", "six", "seven",

"eight", "nine"]

SECOND_TEN = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",

"sixteen", "seventeen", "eighteen", "nineteen"]

OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy",

"eighty", "ninety"]

HUNDRED = "hundred"

def checkio(number):

ret =''

h = number//100

t = (number - h*100)//10

f = number - h*100 - t*10

if h > 0:

ret += FIRST_TEN[h-1] + ' ' + HUNDRED + ' '

if t == 0 and f > 0:

ret += FIRST_TEN[f-1] + ' '

elif t == 1:

ret += SECOND_TEN[f] + ' '

elif t>1:

ret += OTHER_TENS[t-2] + ' '

if f>0:

ret += FIRST_TEN[f-1] + ' '

return ret[:-1]

【Python CheckiO 题解】SP的更多相关文章

  1. 一人一python挑战题解

    题目id: 1 just print a+b give you two var a and b, print the value of a+b, just do it!! print a+b 题目id ...

  2. python chanllenge题解

    网址:chanllenge 修改url最后的html的前缀为答案,就可以过关. 页面上很多只有一幅图片,实际上题目描述全在页面源码中. 然后推荐一个在线代码运行的网站 ideone 查看所有源码:ht ...

  3. 2019-06-03 校内python模拟题解(所有非原题)

    一起来女装吧 本题改编自USACO(USA Computing Olympiad) 1.1节的第一题 (感谢lsy同学对本题题面的贡献) 直接计算就好了 chr:将ASCII码转成字符 ord:字符对 ...

  4. LeetCode python实现题解(持续更新)

    目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变 ...

  5. The Python Challenge 题解

    仔细阅读,图画下面的提示(网页的 title 也是重要的提示信息,至少告诉你考察的对象是什么) 1. 238 >> 2**38 274877906944L 根据提示,在 URL 地址处,0 ...

  6. 利用python代码获取文件特定的内容,并保存为文档

    说明:有段时间需要读取上百个文件的单点能(sp),就写了下面的代码(计算化学狗努力转行中^-^) import os.path import re # 1 遍历指定目录,显示目录下的所有文件名 def ...

  7. 【ARTS】01_02_左耳听风-20181119~1125

    Algorithm 做一个 leetcode 的算法题 Unique Email Addresses https://leetcode.com/problems/unique-email-addres ...

  8. Linux 应用笔记

    Linux 应用笔记 Linux 应用笔记 小书匠 Raspberry Pi 常用命令 CentOs Raspberry Ubuntu python 实用教程 Vim 权限问题 内存分配 shell ...

  9. Maya API编程快速入门

    一.Maya API编程简介 Autodesk® Maya® is an open product. This means that anyone outside of Autodesk can ch ...

随机推荐

  1. struts2的作用是什么

    struts2是一种重量级的框架,位于MVC架构中的controller,可以分析出来,它是用于接受页面信息然后通过内部处理,将结果返回. 同时struts2也是一个web层的MVC框架,那么什么是s ...

  2. mui is not defined

    vue项目中引用mui.js,我是在main.js中这样引入的,    结果报错  查找资料,最后在mui.js的最后添加了这样一句  这是因为mui并不能像jquery那样作为全局对象存在,加上wi ...

  3. vue开发微信公众号--地图

    在最近开发的微信公众号中,要实现一个打卡功能: 由于个人感觉微信SDK里面的地图不太好用,所以使用了腾讯地图. 在项目中引入腾讯地图 1,需要登录腾讯地图网站,注册一个账户,获得一个key. 2,然后 ...

  4. BZOJ 5137: [Usaco2017 Dec]Standing Out from the Herd(后缀自动机)

    传送门 解题思路 这个似乎和以前做过的一道题很像,只不过这个是求本质不同子串个数.肯定是先把广义\(SAM\)造出来,然后\(dfs\)时把子节点的信息合并到父节点上,看哪个只被一个串覆盖,\(ans ...

  5. spring boot 修改banner

    在resources目录下新建一个banner.txt,里面添加要显示的内容,如: ////////////////////////////////////////////////////////// ...

  6. (转)maven怎么 引入(或引用/使用) 自定义(或本地/第三方) jar的三种方式 图文教程 方法二最简单

    转:https://blog.csdn.net/wabiaozia/article/details/52798194 准备工作: 假如我有一个自定义jar是:123456.jar,下载地址http:/ ...

  7. VB.NET导出Excel 轻松实现Excel的服务器与客户端交换 服务器不安装Office

    说来VB.Net这个也是之前的一个项目中用到的.今天拿来总结下用途,项目需求,不让在服务器安装Office办公软件.这个也是煞费了一顿. 主要的思路就是 在导出的时候,利用DataTable做中间变量 ...

  8. STM32几个IO的工作模式

    浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了.  开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻 ...

  9. 控制banner内容

    Spring Boot启动的时候默认的banner是spring的字样,看多了觉得挺单调的,Spring Boot为我们提供了自定义banner的功能. 自定义banner只需要在resource下新 ...

  10. 2015年6月发布了ECMAScript6版本

    2015年6月 node.js.npm | cnpm.cli angular2.x.react.js.Vue.js