【Python CheckiO 题解】SP
题目描述
【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的更多相关文章
- 一人一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 ...
- python chanllenge题解
网址:chanllenge 修改url最后的html的前缀为答案,就可以过关. 页面上很多只有一幅图片,实际上题目描述全在页面源码中. 然后推荐一个在线代码运行的网站 ideone 查看所有源码:ht ...
- 2019-06-03 校内python模拟题解(所有非原题)
一起来女装吧 本题改编自USACO(USA Computing Olympiad) 1.1节的第一题 (感谢lsy同学对本题题面的贡献) 直接计算就好了 chr:将ASCII码转成字符 ord:字符对 ...
- LeetCode python实现题解(持续更新)
目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变 ...
- The Python Challenge 题解
仔细阅读,图画下面的提示(网页的 title 也是重要的提示信息,至少告诉你考察的对象是什么) 1. 238 >> 2**38 274877906944L 根据提示,在 URL 地址处,0 ...
- 利用python代码获取文件特定的内容,并保存为文档
说明:有段时间需要读取上百个文件的单点能(sp),就写了下面的代码(计算化学狗努力转行中^-^) import os.path import re # 1 遍历指定目录,显示目录下的所有文件名 def ...
- 【ARTS】01_02_左耳听风-20181119~1125
Algorithm 做一个 leetcode 的算法题 Unique Email Addresses https://leetcode.com/problems/unique-email-addres ...
- Linux 应用笔记
Linux 应用笔记 Linux 应用笔记 小书匠 Raspberry Pi 常用命令 CentOs Raspberry Ubuntu python 实用教程 Vim 权限问题 内存分配 shell ...
- Maya API编程快速入门
一.Maya API编程简介 Autodesk® Maya® is an open product. This means that anyone outside of Autodesk can ch ...
随机推荐
- vue项目中echarts使用渐变效果报错echarts is not defined
解决办法:在当前单组件中在引用一次
- jmeter+ant+jenkins搭建接口自动化测试环境
jmeter+ant+jenkins搭建接口自动化测试环境(基于win) 1.jmeter jmeter依赖java运行环境,所以需要提前下载jdk并配置好环境变量 官网下载(http://jmete ...
- Redis事件通知示例
1. redis如同zk一样,提供了事件监听(或者说是回调机制), 下面是redis的配置说明: ############################# EVENT NOTIFICATION ## ...
- 《Spring Cloud构建微服务架构》系列博文示例
SpringCloud-Learning 源码下载地址:http://download.csdn.net/detail/k21325/9650968 本项目内容为Spring Cloud教 ...
- 服务器上的 IPProxy代理设置
1.window 平台 CCProxy 安装包 传送门: http://www.xue51.com/soft/2794.html 该页面详细的说明了ccproxy怎么安装.怎么破jie.... 下面老 ...
- Understanding identities in IIS
Understanding identities in IIS https://support.microsoft.com/en-my/help/4466942/understanding-ident ...
- crontab不能正常执行的五种原因
1 crond服务未启动 crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止.如果停止了就无法执行任何定时任务了,解决的方法是打开它: crond 或 ...
- Linux查看文件大小5个常用命令
1. 前言 Linux 系统有非常好用的命令,功能也非常丰富,如果你对命令行工具熟悉,可以非常高效率完成维护工具.本文主要介绍Linux系统中,用于查看文件大小的命令. Linux 查看文件大小5个常 ...
- git 多个远程仓库
有时候一个git项目需要使用多个远程库,如:测试环境+生产环境,国内加国外等 项目根目录下修改 .git/config 文件 vim .git/config 新增远程一个远程仓库 并为其命名 :如 ...
- python可变参数类型 a,*args,**kwargs
a - int *args --tuple **kwargs -- dict *args是非关键字参数,用于元组,**kw是关键字参数,用于字典 可变参数 在Python函数中,还可以定义可变参数.顾 ...