今天学习的是通过python实现部分日语数字的练习。
众所周知,外语学习的一个关键突破点就是单词。传统学习方式无外乎,跟着老师或者背单词软件一遍一遍反复记忆,我们是知识的被动接受者。但在互联网社会,这些都被颠覆了。我们可以不再仅限于书本上的知识,充分利用网络学习我们想要了解的一切。看似庞大的知识被逐层拆解,成功唾手可得。所以,未来社会最重要的能力之一是学会拆解知识的工具。编程便是其中之一。
前言少叙,下面进入正题。
这次先学习如何用python练习日语中的数字。代码来源:Learning Japanese the Python Way | Nora Codes,有微调。
numbers = ['ゼロ',
'いち',
'に',
'さん',
'よん',
'ご',
'ろく',
'なな',
'はち',
'きゅう',
'じゅう',
]
class OutOfRangeException(Exception):
pass
def small_to_japanese(n):
"Convert a number (0-10) to Japanese."
if n > 10 or n < 0:
raise OutOfRangeException
return numbers[n]
def medium_to_japanese(n):
"Convert a number from 11 - 100 to Japanese"
if n > 100 or n < 11:
raise OutOfRangeException
digits = list(map(
int, str(n)
))
out = ""
# Omit いち in numbers > 10
if digits[0] > 1:
out += numbers[digits[0]] + " "
out += numbers[10] + " "
out += numbers[digits[1]]
return out
def number_to_japanese(n):
try:
return small_to_japanese(n)
except OutOfRangeException:
pass
try:
return medium_to_japanese(n)
except OutOfRangeException:
pass
print("只可以输入99以内的数字哟~")
if __name__ == "__main__":
from random import randint
from sys import argv
# Check if there is a command line option for max numbers
if len(argv) >= 2:
try:
MAX_NUM = int(argv[1])
except ValueError:
MAX_NUM = -1
# A little edge case handling
if MAX_NUM > 99:
print("达咩! - 只可以输入99以内的数字哟~")
exit(1)
else:
# If a max wasn't given, default to 99
MAX_NUM = 99
given = ""
done_so_far = []
number_done = 0
while True:
n = randint(0, MAX_NUM)
# If and as long as n has already been done, get a new number.
while n in done_so_far:
n = randint(0, MAX_NUM)
try:
given = input("{} 是数字几".format(
number_to_japanese(n)))
except KeyboardInterrupt:
print("再见!")
exit(1)
except EOFError:
print("再见!")
exit(1)
if given.lower() == 'quit':
print("再见!")
exit(0)
if number_done >= MAX_NUM:
print("您已完成所有数字练习~")
exit(0)
try:
given_n = int(given)
except ValueError:
given_n = -1
if given_n == n:
print("好厉害~")
done_so_far.append(n)
number_done += 1
else:
print("再接再厉! 答案是 {}.".format(n))