開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- Ruby (プログラミング言語)
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 10章(章全部で復習), 10.5(練習問題続き)、拡張 english_number、を解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
- Rubyクックブック ―エキスパートのための応用レシピ集
拡張 english_number
コード(BBEdit)
sample.rb
#!/usr/bin/env ruby2.0 #-*- coding: utf-8 -*- def english_number number return '負ではない数値を入力してください' if number < 0 return 'zero' if number == 0 num_string = '' ones_place = %w[one two three four five six seven eight nine] tens_place = %w[ten twenty thirty forty fifty sixty seventy eighty ninety] teenagers = %w[eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen] others = [ [2, 'hundred'], [3, 'thousand'], [6, 'million'], [9, 'billion'], [12, 'trillion'], [15, 'quandrillion'], [18, 'quintillion'], [21, 'sextillion'], [24, 'septillion']] left = number while others.length > 0 other = others.pop n = other[0] name = other[1] d = 10 ** n write = left / d left -= write * d if write > 0 pre = english_number write num_string = num_string + pre + ' ' + name num_string += ' ' if left > 0 end end write = left / 10 left -= write * 10 if write > 0 if write == 1 and left > 0 num_string += teenagers[left - 1] left = 0 else num_string += tens_place[write - 1] end if left > 0 num_string += '-' end end write = left left = 0 num_string += ones_place[write - 1] if write > 0 num_string end n = 1234567890123456789012345 puts n puts english_number n
入出力結果(Terminal)
$ ./sample.rb 1234567890123456789012345 one septillion two hundred thirty-four sextillion five hundred sixty-seven quintillion eight hundred ninety quandrillion one hundred twenty-three trillion four hundred fifty-six billion seven hundred eighty-nine million twelve thousand three hundred forty-five $
ちなみにpython3.4の場合。
コード(BBEdit)
sample.py
#!/usr/bin/env python #-*- coding: utf-8 -*- def englishNumber(num): if num < 0: return "負でない数値を入力してください" if num == 0: return 'zero' num_string = '' ones_place = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] tens_place = ["ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"] teenagers = ["eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"] others = [ [2, 'hundred'], [3, 'thousand'], [6, 'million'], [9, 'billion'], [12, 'trillion'], [15, 'quandrillion'], [18, 'quintillion'], [21, 'sextillion'], [24, 'septillion']] left = num while len(others) > 0: other = others.pop() n = other[0] name = other[1] d = 10 ** n write = left // d left -= write * d if write > 0: pre = englishNumber(write) num_string = num_string + pre + ' ' + name if left > 0: num_string += ' ' write = left // 10 left -= write * 10 if write > 0: if write == 1 and left > 0: num_string += teenagers[left - 1] left = 0 else: num_string += tens_place[write - 1] if left > 0: num_string += ' ' write = left left = 0 if write > 0: num_string += ones_place[write - 1] return num_string n = 1234567890123456789012345 print(n) print(englishNumber(n))
入出力結果(Terminal)
$ ./sample.py 1234567890123456789012345 one septillion two hundred thirty four sextillion five hundred sixty seven quintillion eight hundred ninety quandrillion one hundred twenty three trillion four hundred fifty six billion seven hundred eighty nine million twelve thousand three hundred forty five $
0 コメント:
コメントを投稿