鱼C论坛

 找回密码
 立即注册
查看: 1737|回复: 12

哪位大佬教教我这俩个题目怎么做?想了几个小时了想不明白

[复制链接]
发表于 2022-3-6 21:51:51 | 显示全部楼层 |阅读模式
20鱼币
-733828ffdf4aa4c9.jpg eef274dba71a40d.jpg

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-6 22:29:15 | 显示全部楼层
可以放一下链接吗?或者你点开他那里计算某一天是星期几的公式放上来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 00:01:16 | 显示全部楼层
数字转英文:
# 将 0 ~ 9 的数字转换成英文
def unit_to_word(u):
    words = {
        0: 'zero', 1: 'one', 2: 'two', 3: 'three',
        4: 'four', 5: 'five', 6: 'six', 7: 'seven',
        8: 'eight', 9: 'nine'
    }
    return words[u]

# 将 10 ~ 19,20 ~ 99 的十位部分数字转换成英文
def tens_to_word(t):
    words = {
        10: 'ten', 11: 'eleven', 12: 'twelve', 
        13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 
        16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 
        19: 'nineteen', 20: 'twenty', 30: 'thirty', 
        40: 'forty', 50: 'fifty', 60: 'sixty',
        70: 'seventy', 80: 'eighty', 90: 'ninety'
    }
    if 10 <= t < 20 or not t % 10:
        return words[t]
    else:
        a, b = divmod(t, 10)
        return words[a*10] + ' ' + unit_to_word(b)

# 将 百位数字转换成英文
def hundreds_to_word(h):
    a, b = divmod(h, 100)
    if b < 10:
        return f"{unit_to_word(a)} hundred and {unit_to_word(b)}"
    else:
        return f"{unit_to_word(a)} hundred and {tens_to_word(b)}"

print(hundreds_to_word(729))

输出日历:
def day(y, m, d):
    ans = 0
    month = [31,29,31,30,31,30,31,31,30,31,30,31]
 
    if not isLeapYear(y):
        month[1] = 28
 
    for i in range(1,y):  # 注意计算之前年的天数时要从1开始计算
        if isLeapYear(i):
            ans += 366
            # ans = ans % 7
        else:
            ans += 365
            # ans = ans % 7
 
    for i in range(m-1):   # 这里因为月份是由数组表示的,从1月加到m-1月在数组中就是从下标0加到下标m-2
        ans +=  month[i]
        # ans = ans % 7
 
    ans += d 
 
    return ans % 7# 最后这里对7取余也可以,如果计算的年数过多可以边加天数,边对7取余,就像注释掉的那些代码一样

def isLeapYear(y):
    if (y % 400 == 0) or (y % 100 != 0 and y % 4 == 0):
        return True
    else:
        return False

def calendar(y, m):
    month = [31,29,31,30,31,30,31,31,30,31,30,31]
 
    if not isLeapYear(y):
        month[1] = 28
    print(f"\t\t\t{y}年{m}月\t\t\t")
    print()
    print('\t'.join(['Su', 'M', 'Tu', 'W', 'Th', 'F', 'Sa']))
    temp = [''] * 7
    d = month[m-1]
    for i in range(1, d + 1):
        temp[day(y, m, i)] = str(i)
        if temp[-1] != '' or i == d:
            print('\t'.join(temp))
            temp = [''] * 7

calendar(2022, 3)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-7 07:58:15 | 显示全部楼层

Screenshot_20220307_075637.jpg
那个转化成英文的输出形式不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 08:03:38 | 显示全部楼层
风百默 发表于 2022-3-7 07:58
那个转化成英文的输出形式不对?

个位数的跟十位数的是另两个函数,你看一下注释,我有写着注释的,

题目不是要求 转换个位,十位,百位的用不同函数吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 08:10:50 | 显示全部楼层
风百默 发表于 2022-3-7 07:58
那个转化成英文的输出形式不对?

我改一下,可能是我理解错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 08:18:35 | 显示全部楼层
本帖最后由 isdkz 于 2022-3-8 20:39 编辑
风百默 发表于 2022-3-7 07:58
那个转化成英文的输出形式不对?


如果都要用 hundreds_to_word 这个函数转换的话,就改成这样
# 将 0 ~ 9 的数字转换成英文
def unit_to_word(u):
    words = {
        0: 'zero', 1: 'one', 2: 'two', 3: 'three',
        4: 'four', 5: 'five', 6: 'six', 7: 'seven',
        8: 'eight', 9: 'nine'
    }
    return words[u]

# 将 10 ~ 19,20 ~ 99 的十位部分数字转换成英文
def tens_to_word(t):
    words = {
        10: 'ten', 11: 'eleven', 12: 'twelve', 
        13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 
        16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 
        19: 'nineteen', 20: 'twenty', 30: 'thirty', 
        40: 'forty', 50: 'fifty', 60: 'sixty',
        70: 'seventy', 80: 'eighty', 90: 'ninety'
    }
    if 10 <= t < 20 or not t % 10:
        return words[t]
    else:
        a, b = divmod(t, 10)
        return words[a*10] + ' ' + unit_to_word(b)

# 将 百位数字转换成英文
def hundreds_to_word(h):
    if h <10:
        return unit_to_word(h)
    elif 10 <= h < 100:
        return tens_to_word(h)
    elif h % 100 == 0:
        return f"{unit_to_word(h//100)} hundred"
    else:
        a, b = divmod(h, 100)
        if b < 10:
            return f"{unit_to_word(a)} hundred and {unit_to_word(b)}"
        else:
            return f"{unit_to_word(a)} hundred and {tens_to_word(b)}"

print(hundreds_to_word(99))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-8 20:31:33 | 显示全部楼层
isdkz 发表于 2022-3-7 08:18
如果都要用 hundreds_to_word 这个函数转换的话,就改成这样


还是有点问题
-45c1d189cb7807f0.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-8 20:35:02 | 显示全部楼层
isdkz 发表于 2022-3-7 08:18
如果都要用 hundreds_to_word 这个函数转换的话,就改成这样

大佬,return f"{}and{}"是什么形式的返回方式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 20:41:21 | 显示全部楼层
风百默 发表于 2022-3-8 20:35
大佬,return f"{}and{}"是什么形式的返回方式

f-string的字符串格式化方式,python 格式化字符串的方式你可以看一下这个:

https://mp.weixin.qq.com/s/mpjDJ50T5ZjskKIIZO6_vQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 20:41:59 | 显示全部楼层
风百默 发表于 2022-3-8 20:35
大佬,return f"{}and{}"是什么形式的返回方式

你试一下这个:
# 将 0 ~ 9 的数字转换成英文
def unit_to_word(u):
    words = {
        0: 'zero', 1: 'one', 2: 'two', 3: 'three',
        4: 'four', 5: 'five', 6: 'six', 7: 'seven',
        8: 'eight', 9: 'nine'
    }
    return words[u]

# 将 10 ~ 19,20 ~ 99 的十位部分数字转换成英文
def tens_to_word(t):
    words = {
        10: 'ten', 11: 'eleven', 12: 'twelve', 
        13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 
        16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 
        19: 'nineteen', 20: 'twenty', 30: 'thirty', 
        40: 'forty', 50: 'fifty', 60: 'sixty',
        70: 'seventy', 80: 'eighty', 90: 'ninety'
    }
    if 10 <= t < 20 or not t % 10:
        return words[t]
    else:
        a, b = divmod(t, 10)
        return words[a*10] + ' ' + unit_to_word(b)

# 将 百位数字转换成英文
def hundreds_to_word(h):
    if h <10:
        return unit_to_word(h)
    elif 10 <= h < 100:
        return tens_to_word(h)
    elif h % 100 == 0:
        return f"{unit_to_word(h//100)} hundred"
    else:
        a, b = divmod(h, 100)
        if b < 10:
            return f"{unit_to_word(a)} hundred and {unit_to_word(b)}"
        else:
            return f"{unit_to_word(a)} hundred and {tens_to_word(b)}"

print(hundreds_to_word(99))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-8 22:05:40 | 显示全部楼层

大佬,这个第八行和16行为什么要用个循环,这是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 22:09:17 | 显示全部楼层
风百默 发表于 2022-3-8 22:05
大佬,这个第八行和16行为什么要用个循环,这是什么意思

为了计算特定日期到公元 1 年 1 月 1日距离多少天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 04:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表