题目描述

【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. Python3 使用HTMLTestRunner.py 报错ImportError: No module named 'StringIO'处理方法

    HTMLTestRunner.py文件是基于Python2的语法,python3使用需要修改语法: 1.>>> 94行 import io # import StringIO 2.& ...

  2. 【HDOJ6601】Keen On Everything But Triangle(主席树)

    题意:给定一个长为n的序列,有q次询问,每次询问[l,r]这段区间内挑三个数,能组成的三角形的最大周长,无解输出-1 n,q<=1e5,a[i]<=1e9 思路:题解写法和我的不太一样 先 ...

  3. Delphi读取和写入utf-8编码格式的文件

    读取UTF-8格式的文件内容 function LoadUTF8File(AFileName: string): string; var ffileStream:TFileStream; fAnsiB ...

  4. php 封装原生数据导入的方法(csv文件格式)

    //前端---部分代码 <form class="form-inline" style="margin-top: 20px" method="p ...

  5. ALM11服务器IP变更相关配置修改

    最近项目新增了网络控制,需要把ALM服务器迁移到新的区域.服务器整体复制后更改了IP地址. ALM与Oracle在同一台服务器(windows server 2008 R2) ALM的配置也需要做如下 ...

  6. JavaScript-Tool-截取头像:ShearPhoto

    ylbtech-JavaScript-Tool-截取头像:ShearPhoto ShearPhoto 2.0 发布,支持HTML5本地截取头像,支持美图秀秀特效,支持几十M数码相片压缩截取 1.返回顶 ...

  7. HP Loadrunner 12.53的下载与安装

    HP Loadrunner 12.53的下载与安装   HP Loadrunner 12.53的下载:http://pan.baidu.com/s/1c23axHm HP Loadrunner 12. ...

  8. C++怎样通过嵌入汇编写一个函数

    参考:http://msdn.microsoft.com/en-us/library/h5w10wxs.aspx 普通的函数,Compiler会自动生成prologue和epilogue,但是通过在函 ...

  9. PAT甲级【2019年3月考题】——A1156 SexyPrimes【20】

    Sexy primes are pairs of primes of the form (p, p+6), so-named since “sex” is the Latin word for “si ...

  10. Java实验报告(四)&第六周学习总结

    班级 计科二班 学号 20188425 姓名 IM 完成时间2019/10/07 评分等级 一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现: 二.实验的内容 ( ...