【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 ...
随机推荐
- js百度地图API创建弧线并修改弧线的弧度
去百度API官网下载CurveLine.min.js,注意复制下来的Js前面的行号要删除. // 百度地图API功能 var map = new BMap.Map("container&qu ...
- 【leetcode】331. Verify Preorder Serialization of a Binary Tree
题目如下: One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null ...
- DELPHI 10 SEATTLE 在OSX上安装PASERVER
旧版本的DELPHI在安装目录下里的PASERVER目录有安装文件,但奇怪在这个SEATTLE上的PASERVER目录下只有一个EXE程序的安装程序,显然不能安装到OSX里,需要在Embarcad ...
- 媲美5G的Wifi网速、“备战”资产一键领……揭秘双11小二背后的保障力量
如今,双11不光是购物狂欢节,更是对技术的一次“大考”,对于阿里巴巴企业内部运营的基础保障技术而言,亦是如此. 回溯双11历史,这背后也经历过“小米加步枪”的阶段:作战室从随处是网线,交换机放地上的“ ...
- Security基础(六):部署Zabbix监控平台、配置及使用Zabbix监控系统、自定义Zabbix监控项目、实现Zabbix报警功能
一.部署Zabbix监控平台 目标: 本案例要求部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 在监控服务器上安装LAMP环境 修改PHP配置文件,满足Zab ...
- BUUCTF | easy_tornado
第一次遇到模板注入的题,赶紧记笔记,此篇相当于对大佬的做法的复现Orz,师傅太强了https://blog.csdn.net/weixin_44255856/article/details/97687 ...
- [CSP-S模拟测试]:z(模拟+map+小根堆)
题目背景 $\frac{1}{4}$遇到了一道水题,$eooooo$完全不会做,于是去请教小$D$.结果小$D$已经去了阿塞拜疆,于是,$\frac{1}{4}$只好来问你,这道题是这样的: 题目描述 ...
- 2019-05-16 Ubuntu使用
Ubuntu的基本操作 查看操作系统版本 https://www.hostingadvice.com/how-to/ubuntu-show-version/ clu@sha01vmdev08:~/so ...
- A Guide To using IMU (Accelerometer and Gyroscope Devices) in Embedded Applications.
介绍 本指南的目的是大家感兴趣的惯性MEMS(微机电系统)传感器,特别是加速计和陀螺仪和IMU组合设备(惯性测量单元). 例如IMU单位:Acc_Gyro_6DOF对MCU处理单元UsbThumb提供 ...
- Nuget-Swagger-Swashbuckle:Swashbuckle
ylbtech-Nuget-Swagger-Swashbuckle:Swashbuckle 1.返回顶部 1. Seamlessly adds a Swagger to WebApi projects ...