【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 ...
随机推荐
- Arrays.asList()报错java.lang.UnsupportedOperationException
问题: 使用工具类Arrays.asList()方法把数组转换成集合时,不能使用修改集合相关的方法,比如add,remove.这个ArrayList是Arrays类自己定义的一个内部类!这个内部类没有 ...
- tensorflow函数介绍(1)
tensorflow中的tensor表示一种数据结构,而flow则表现为一种计算模型,两者合起来就是通过计算图的形式来进行计算表述,其每个计算都是计算图上的一个节点,节点间的边表示了计算之间的依赖关系 ...
- nuget cli 打包发包
微软官网打包说明:https://docs.microsoft.com/zh-cn/nuget/quickstart/create-and-publish-a-package-using-visual ...
- Linux基础优化(二)
Linux基础优化(二) 一操作系统字符优化 避免出现中文乱码,UTF-8支持中文GBK-Xx支持中文 (一)查看默认编码 [root@centos7 ~]# echo $LANG en_US.UTF ...
- C#编写ActiveX控件
用C#编写ActiveX控件 http://www.cnblogs.com/homer/archive/2005/01/04/86473.html http://www.cnblogs.com/hom ...
- [CSP-S模拟测试]:attack(支配树+LCA+bitset)
题目传送门(内部题55) 输入格式 第一行,包含两个整数:$n,m,q$,表示敌军城市数.路数和情报数.接下来$m$行,每行包含两个整数:$u,v$,表示从$u$到$v$包含一条单向道路.接下来$q$ ...
- 【SpringBoot】 理解SpringBoot的启动原理
前言 前文已经介绍了Spring Bean的生命周期,那么使用过程中发现SpringBoot 的启动非常快捷,本文将介绍SpringBoot的内部启动原理. 启动过程 如上图所示,我们先分析下Spri ...
- ustc FreeBSD / rust 镜像源
http://mirrors.ustc.edu.cn/help/ Rust Crates 源使用帮助 地址 https://mirrors.ustc.edu.cn/crates.io-index/ 说 ...
- Fiddler之iOS手机抓包代理设置
一.前置步骤:官网下载并安装好 二.设置iOS手机代理到windows电脑 1.打开Fiddler,点击上方Tools,进入Options,选择HTTPS,按下图设置 2.fiddler默认监听端口8 ...
- Ajax跨域(CROS)请求中的Preflighted requests
Ajax跨域(CROS)请求中的Preflighted requests:https://www.aliyun.com/jiaocheng/862989.html 10 分钟理解跨域请求:https: ...