题目描述

【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. 【leetcode】623. Add One Row to Tree

    题目如下: Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with ...

  2. Linux系统重要文件

    Linux系统重要文件介绍与配置 一网卡配置文件 (一)网卡配置文件参数介绍 文件路径信息:/ec/sysconfig/network-scripts/ifcfg-eth0 文件作用说明:配置网卡地址 ...

  3. sql 用语句还原多数据文件的数据库

    /* 还原bak数据库文件*/ RESTORE DATABASE userdb_cs /*还原为userdb名的新数据库*/ FROM DISK = 'D:\工作资料\数据库文件\userdb.bak ...

  4. 网络协议之mDNS

    DNS(Domain Name System,域名系统)因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得 ...

  5. CocoaPods中pod search报错的解决办法

    pod search报错的原因: 每次使用pod search命令的使用会在该目录下生成一个search_index.json文件,会逐渐的增大,文件达到一定大小后,ruby解析里面的json字符就会 ...

  6. 二次封装dojo slider

    上次的二次封装timeslider,挺有意思,又来封装一个dojo的,样式还是用arcgis的.实现更多功能,包括HorizontalSlider和VerticalSlider, 刻度的显示隐藏,标签 ...

  7. POI 讀取EXCEL

    /*** 獲取單元格數值* * @param cell* @return*/private String getCellValue(Cell cell) {String cellValue = &qu ...

  8. Cocos2d Box2D之静态刚体

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. b2_staticBody 在模拟环境下静态物体是不会移动的,就好像有无限大的质量.在Box2D的内部会将质量至反,存储为零.静态物体也可 ...

  9. struct和class的相同点与不同点

    struct是c语言中常用来定义结构体时使用的 class是c++中用来定义类时所使用的 相同 struct(结构体)和class(类)内均可有不同个数.不同类型的数据 定义时 都必须在前面加上str ...

  10. 第6章 RPC之道

    6.1 认识RPC 分布式.微服务的架构思维中都不能缺少 RPC 的影子 RPC(Remote Procedure Call)远程过程调用.通过网络在跨进程的两台服务器之间传输信息,我们使用的时候不用 ...