Sagittaro 2022-07-12 19:07 采纳率: 33.3%
浏览 55
已结题

python编程遇到的问题

【问题描述】
班主任李华想为班级安装一台考勤设备。请使用Python完成考勤计划。
您的程序需要支持三个操作:学生签到,检查某个学生何时签到,检查在特定时间和之前签到的学生人数。
【输入表格】
第一个是带有整数的行,表示操作的总数 N。
接下来的 n 行,每行三个参数 o n t 以空格分隔。
·如果 o 是整数 1,则表示同学已登录,以下参数 n 和 t 分别表示学生的姓名和签到时间。n是一个没有空格的字符串,t是时间,格式是24小时格式,它是一个四位数的整数hhmm,这意味着小时-分钟。例如,1320 表示 13:20。
·如果 o 是整数 2,则表示教师要对某个学生的签到时间进行检查。以下参数 n 表示同学的姓名,参数 t 在这里毫无意义。
·如果 o 是整数 3,则表示教师想要检查在特定时间(含)和之前签到的学生人数。下面的参数n在这里是没有意义的,参数t表示时间。时间格式与上述相同。
【输出格式】
对于每个 o==2 和 o==3,输出一行整数。
当 o==2 时,输出一个四位数整数,表示学生的签到时间,格式与上述相同(参见输入表单)。如果同学未签入,则输出整数 9999。
当 o==3 时,输出一个正整数,表示此时此刻和之前签到的学生人数。
【示例输入】
5
1 Jim 1010
2 Jim 0000
1 LiHua 1111
3 x 1100
2 XiaoMing 0000
【示例输出】
1010
1
9999
【示例说明】
对于操作 2 Jim 0000,Jim 的签入时间为 10:10,因此输出为 1010
对于操作 3 x 1100,只有 Jim 在 11:00 之前签到(1 名学生),因此输出 1
对于操作 2 XiaoMing 0000,由于XiaoMing从未签入,因此输出应为 9999
【数据范围】
1<=n<=1000

建议使用Python的字典来执行此任务。

然后是我编写的代码如下:

n = int(input())
stdin = []
login = []
logincnt = 0
checkcnt = 0
for i in range(n):
    temp = input().split()
    stdin.append(temp)
for i in range(n):
    if(stdin[i][0] == "1"):
        login.append([stdin[i][1], stdin[i][2]])
        logincnt += 1
    if(stdin[i][0] == "2"):
        check = 0
        for j in range(logincnt):
            if(login[j][0] == stdin[i][1]):
                print(login[j][1])
                check = 1
        if(check == 0):
            print("9999")
    if(stdin[i][0] == "3"):
        for k in range(logincnt):
            if(int(login[k][1]) <= int(stdin[i][2])):
                checkcnt += 1
        print(checkcnt)

这段代码只能通过评测点2/10,不太明白哪一部分有问题,故特地来请教。

  • 写回答

2条回答 默认 最新

  • 天际的海浪 2022-07-12 19:50
    关注

    #checkcnt要每次计算都重置为 0
    你题目的解答代码如下:

    n = int(input())
    stdin = []
    login = []
    logincnt = 0
    checkcnt = 0
    for i in range(n):
        temp = input().split()
        stdin.append(temp)
    for i in range(n):
        if(stdin[i][0] == "1"):
            login.append([stdin[i][1], stdin[i][2]])
            logincnt += 1
        if(stdin[i][0] == "2"):
            check = 0
            for j in range(logincnt):
                if(login[j][0] == stdin[i][1]):
                    print(login[j][1])
                    check = 1
            if(check == 0):
                print("9999")
        if(stdin[i][0] == "3"):
            checkcnt = 0  #checkcnt要每次计算都重置为 0
            for k in range(logincnt):
                if(int(login[k][1]) <= int(stdin[i][2])):
                    checkcnt += 1
            print(checkcnt)
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月12日
  • 已采纳回答 7月12日
  • 修改了问题 7月12日
  • 赞助了问题酬金10元 7月12日
  • 展开全部

悬赏问题

  • ¥15 商城生产日期批次库存问题
  • ¥15 esp8266控制共阳极wrgb灯板无法关闭所有led灯
  • ¥100 python读取速度问题
  • ¥15 stm32f407使用DMA问题
  • ¥15 您好 这个API接口该怎么弄 网站搭建好了 API也有 现在就不知道该怎么填写API 不知道怎么用
  • ¥88 用uniapp写一个多端的程序,用到高德地图,用高德的JSAPI吗?
  • ¥20 关于#c++#的问题:水果店管理系统
  • ¥30 dbLinq最新版linq sqlite
  • ¥20 对D盘进行分盘之前没有将visual studio2022卸载掉,现在该如何下载回来
  • ¥15 完成虚拟机环境配置,还有安装kettle