用python练习1~99以内的日语

今天学习的是通过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))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值