数字转中文

1. 实战目标

编写一段python程序,使用input函数接收用户输入的100以内的正整数,将正整数转换为中文描述,下面是转换的示例

4  转换后为 四
58 转换后为 五十八

要求如下:

  1. 程序使用while循环不停的接收用户的输入
  2. 当用户输入q时结束程序
  3. 只处理小于100的正整数

2. 考察知识点

  1. continue,break
  2. while
  3. int函数类型转换
  4. f-string
  5. 整除运算,取模运算

3. 思路路讲解与实现

如果输入数值小于10,直接转换与之对应的中文数字,如果输入数值大于等于10小于100,则需要分别计算出十分位和个位数,分别进行转换,最后在中间加入"十"即可,对于5,60这样的数值,个位数是0,转换为空字符串就能满足要求。

3.1 中文数字映射关系

number_dict = {
    1: "一",
    2: "二",
    3: "三",
    4: "四",
    5: "五",
    6: "六",
    7: "七",
    8: "八",
    9: "九",
}

首先定义一个字典,保存1到9所对应的中文数字,这样可以方便转换,不需要用if 语句做条件判断来计算转换后的中文。

3.2 数据预处理

while True:
    value = input("请输入一个100以内的正整数:")
    if value == "q":
        break

    if not value.isdigit():
        continue

    value = int(value)
    if value >= 100:
        continue

对退出输入的判断要放在最上面,如果用户输入的不是数字则使用conitnue语句退出当前循环,让用户继续输入,字符串的isdigit方法可用于判断字符串的内容是不是数字。

如果用户输入大于等于100, 就不处理了,因为处理逻辑太复杂,初学者难以理解。

3.3 处理10以内的转换

    if value < 10:
        print(f"转换后: {number_dict[value]}")
        continue

10以内的数值转换最简单,从字典中查出来数字所对应的中文数字,这里我使用了continue而没有使用else语句,目的是为了减少缩进的层次,对大于等于10的情况的处理逻辑可以和这个if 语句保持相同的缩进,让代码看着更美观。

3.4 处理大于等于10的情况

    units = value // 10
    units = number_dict[units]
    ones = value % 10
    if ones == 0:
        ones = ""
    else:
        ones = number_dict[ones]

    print(f"转换后: {units}十{ones}")

value // 10 得到的是十位数
ones = value % 10 得到的是个位数,如果个位数是0,则对ones赋值为空字符串,转为中文数字时,个位的0是不会用中文来表示的。

十位与个位之间用“十”连接,得到的就是转换后的中文数字。

4. 完整代码

number_dict = {
    1: "一",
    2: "二",
    3: "三",
    4: "四",
    5: "五",
    6: "六",
    7: "七",
    8: "八",
    9: "九",
}

while True:
    value = input("请输入一个100以内的正整数:")
    if value == "q":
        break

    if not value.isdigit():
        continue

    value = int(value)
    if value >= 100:
        continue

    if value < 10:
        print(f"转换后: {number_dict[value]}")
        continue

    units = value // 10
    units = number_dict[units]
    ones = value % 10
    if ones == 0:
        ones = ""
    else:
        ones = number_dict[ones]

    print(f"转换后: {units}十{ones}")

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案