利乐饼. 2023-10-31 16:03 采纳率: 0%
浏览 3

请问一下Python代码问题是什么

img


在输入日期为2023-3-31后就没有输出了,还有在输入日期的月份为8月时显示e变量没有

  • 写回答

2条回答 默认 最新

  • 梦幻精灵_cq 2023-11-01 02:17
    关注
    • range函数是前含后不包

      img


      所以,您应该写32才包含31日。

    • 没有e变量,暂时没看出来,您发代码片吧😄午休时给您捋捋。

    • 您整段代码的功用是想输出所输入日期是当年的第n天吧,if太多,让人有些无所适从。中午我给捋捋,代码应该可以精简下。

    • 按您思路,重构代码。调试成功

      img


      img

    苗条优雅的python代码

    #!/sur/bin/nve python
    # coding: utf-8
    
    leapyear = lambda year: 29 if not year%4 and year%100 or not year%400 else 28 # 单行匿名函数lambda:三元操作语句计算输入年份2月的天数。(闰年规则:年份被4整除但不能被100整除,或者被400整除)
    
    
    def countDay(year, month, day):    
        days = day # 输入年份最后一月的天数为总天数初值。
        
        for m in range(1, month): # 遍历整月。
            days += 31 if m in (1, 3, 5, 7, 8, 10, 12) else 30 if m in (4, 6, 9, 11) else leapyear(year) # 大月+31,平月+302月+leapyear函数返回值。
    
        return days
        
    
    if __name__ == '__main__':
        print(countDay(*map(int, input('\n输入(如2023-11-1):').strip().split('-')))) # map函数前面的*用于“破壳”,把map的三个元素赋值给year、month、day形参。
    
    

    评论 编辑记录
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-01 03:11
    关注

    【以下回答由 GPT 生成】

    这段Python代码存在以下问题:

    1. 代码中使用了未定义的变量e,在赋值之前使用了该变量,会导致NameError
    2. print(f"第%.0f天{e}")这行中的格式化字符串有错误,应该使用%作为占位符,如print("第%.0f天" % e)
    3. 在条件判断语句中,对于月份在1-12范围内的情况,没有考虑2月份的情况,应该在b in range(1, 13)的条件中添加and b != 2
    4. 在条件判断语句中,对于月份为1、3、5、7的情况,没有处理除了闰年之外的情况,应该使用or来连接两个条件,如((a % 4 == 0) and (a % 100 != 0)) or (a % 400 == 0)
    5. 在条件判断语句中,对于月份为1、3、5、7的情况,计算e的公式错误,应该是e = n + 31 * (b-1) + c
    6. 在条件判断语句中,对于月份为8、10、12的情况,计算e的公式错误,应该是e = n + 31 * (b-1) + 30 * ((b-1)//2)
    7. 在条件判断语句中,对于月份为2、4、6、9、11的情况,计算e的公式错误,应该是e = n + 31 * (b-1) + 30 * ((b-1)//2) - 1
    8. 在条件判断语句中,对于不在指定日期范围内的情况,没有给出提示信息,可以添加print("输入错误")来提示输入错误。

    修正后的代码如下:

    a, b, c = map(int, input().split('-'))
    n = c
    
    if b in range(1, 13) and c in range(1, 32):
        if b != 2:
            if b in [1, 3, 5, 7]:
                if ((a % 4 == 0) and (a % 100 != 0)) or (a % 400 == 0):
                    e = n + 31 * (b-1) + c
                else:
                    e = n + 31 * (b-1) + c - 1
            elif b in [8, 10, 12]:
                e = n + 31 * (b-1) + 30 * ((b-1)//2)
                if ((a % 4 == 0) and (a % 100 != 0)) or (a % 400 == 0):
                    e = n + 31 * (b-1) + 30 * ((b-1)//2) + 1
            elif b in [2, 4, 6, 9, 11]:
                e = n + 31 * (b-1) + 30 * ((b-1)//2) - 1
                if ((a % 4 == 0) and (a % 100 != 0)) or (a % 400 == 0):
                    if b == 2:
                        e = n + 31 * (b-1) + c
                    else:
                        e = n + 31 * (b-1) + 30 * ((b-1)//2) + 1
        else:
            if (a % 4 != 0):
                if c not in range(1, 29):
                    print("输入错误")
            else:
                if c not in range(1, 30):
                    print("输入错误")
    
        print("第%.0f天" % e)
    else:
        print("输入错误")
    


    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

    展开全部

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部