题目描述

【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. less和vim中使用正则表达式搜索

    使用less查看 txt 文件之后,按\可以正则表达式来搜索: less phonelist.txt (232) 298-2265 (624) 381-1078 (540) 126-1980 (874 ...

  2. Linux系统重要文件(三)

    一系统运行级别文件 文件路径:/etc/inittab 文件作用说明:定义系统启动后,自动开启哪些软件程序系统 runlevel 查看当前运行级别 centos6系统运行级别: 7个级别      0 ...

  3. SpringMvc处理模型数据(也就是从数据库中查询出来的数据放到请求域中)

    这讲的是从数据库中查询到的数据,存放到请求域中.然后页面上直接可以从请求域中获取值. 有4种方式: 1):ModelAndView   是作为一个对象. /** * 目标方法的返回值可以是 Model ...

  4. 【Flutter学习】基本组件之弹窗和提示(SnackBar、BottomSheet、Dialog)

    一,概述 Flutter中的操作提示主要有这么几种 SnackBar.BottomSheet.Dialog,因为 Dialog样式比较多,放最后讲好了 二,介绍 SnackBar SnackBar的源 ...

  5. BZOJ 2806: [Ctsc2012]Cheat(单调队列优化dp+后缀自动机)

    传送门 解题思路 肯定先要建出来广义后缀自动机.刚开始以为是个二分+贪心,写了一下结果\(20\)分.说一下正解,首先显然\(L_0\)具有单调性,是可以二分的.考虑二分后怎样判合法,对于分割序列很容 ...

  6. [CSP-S模拟测试]:施工(DP+单调栈+前缀和)

    题目描述 小$Y$家门前有一条街道,街道上顺序排列着$n$幢建筑,其中左起第$i$幢建筑的高度为$h_i$.小$Y$定义街道的不美观度为所有相邻建筑高度差的绝对值之和乘上常数$c$,为了改善街道环境, ...

  7. Codeforces 510C (拓扑排序)

    原题:http://codeforces.com/problemset/problem/510/C C. Fox And Names time limit per test:2 seconds mem ...

  8. appium常见问题09_MAC打开uiautimatorviewer闪退怎么办?

    问题: 下载安装Android SDK后,并且已在.bash_profile文件中配置环境变量.但是在tools中打开定位工具uiautomatorviewer出现闪退. 解决: 首先检查环境变量配置 ...

  9. SSH服务搭建、账号密码登录远程Linux虚拟机、基于密钥的安全验证(Windows_Xshell,Linux)

    问题1:如果是两台虚拟机ping不同且其中一个虚拟机是克隆的另一个,需要更改一下MAC地址,关机状态下 一> "编辑虚拟机设置" 一>" 网络适配器" ...

  10. 转 什么是Mbps、Kbps、bps、kb、mb及其换算和区别

    Mbps 即 Milionbit pro second(百万位每秒): Kbps 即 Kilobit pro second(千位每秒): bps 即 bit pro second(位每秒): 速度单位 ...