题解 | 学英语

学英语

https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc?tpId=37&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=&judgeStatus=&tags=&title=&gioEnter=menu&dayCountBigMember=365%E5%A4%A9

def one(num):
    switcher = {
        1: "one",
        2: "two",
        3: "three",
        4: "four",
        5: "five",
        6: "six",
        7: "seven",
        8: "eight",
        9: "nine",
    }
    return switcher.get(num, "")


def two_less_20(num):
    switcher = {
        10: "ten",
        11: "eleven",
        12: "twelve",
        13: "thirteen",
        14: "fourteen",
        15: "fifteen",
        16: "sixteen",
        17: "seventeen",
        18: "eighteen",
        19: "nineteen",
    }
    return switcher.get(num, "")


def ten(num):
    switcher = {
        2: "twenty",
        3: "thirty",
        4: "forty",
        5: "fifty",
        6: "sixty",
        7: "seventy",
        8: "eighty",
        9: "ninety",
    }
    return switcher.get(num, "")


def two(num):
    if not num:
        return ""
    elif num < 10:
        return one(num)
    elif num < 20:
        return two_less_20(num)
    else:
        tenner = num // 10
        rest = num % 10
        return ten(tenner) + ("" if rest == 0 else " " + one(rest))


def split_number_into_threes(number):
    # 将数字转换为字符串
    num_str = str(number)
    # 计算有多少位
    length = len(num_str)
    # 使用切片和步长从右向左每三位进行切分
    parts = [num_str[max(i - 3, 0) : i] for i in range(length, 0, -3)]
    # 返回一个从左到右的分割结果
    return parts[::-1]


def hunderd(num):
    if len(num) == 1:
        return one(int(num))
    hundred = int(num) // 100
    rest = int(num) % 100
    if hundred and rest:
        return one(hundred) + " hundred and " + two(rest)
    elif not hundred and rest:
        return two(rest)
    elif hundred and not rest:
        return one(hundred) + " hundred"


num_split = split_number_into_threes(input())
result = []
for i in range(len(num_split) - 1, -1, -1):
    result.append(hunderd(num_split[i]))

result = result[::-1]
if len(num_split) == 3:
    print(result[0] + " million " + result[1] + " thousand " + result[2])
elif len(num_split) == 2:
    print(result[0] + " thousand " + result[1])
else:
    print(result[0])

方法比较笨,但是比较直观易懂

全部评论

相关推荐

02-26 09:15
已编辑
蚌埠学院 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务