zoukankan      html  css  js  c++  java
  • coursera-miniproject stopwatch任务总结

    ---恢复内容开始---

    首先是miniproject的说明:

    combin text drawing in canvas with time to build digital stopwatch.
    tenths of a second-秒后有一个小数点
    3 buttons "Start" "Stop""Reset"
    1.interval: 0.1s---creat_timer参数interval以毫秒为单位,0.1秒=100ms.用int,不要float
    2.event handler function for canvas draws current time event handler 为了在画布中间上显示现在的时间。在draw之前用str转换现在的时间为字符串
    3.添加“Start Stop" event handler 作用是开始和结束 ”Reset"结束及时,重新开始现在的时间,从0开始。框架刚打开的是0状态
    4.写一个helper function,  format(t)  return a string  A :BC.D   ACD [0,9]  B[0,5]有可供测试的模板。粘贴format函数def到模板中。。string return by format函数应该包含0占位。例如:format(11) = 0:01.1  format(613) = 1:01.3---提示:用除法和余数将全局变量转化成相应格式
    5.插入一个call to format到draw handler里面,秒表只要能工作超过10min就行,超过10min之后随便怎样
    6.将stopwatch变成一个测反映速度的,X(停在整数秒)Y(总体实验次数)
    7.按“Stop”后timer stop但不改变得分数。建议添加布尔变量 True-秒表工作 False-秒表停止,然后用这个数值决定按stop的时候是否更新score
    8.modify Reset设置这些数值归零
    #第四步 format(t)参考code clinic(论坛),看那里面的process可以节省时间
    评分要点:
    1.按Run,打开一个框架-有个静止的秒表
    1.有”start“按钮,可以实现开始功能
    1.有”stop“按钮,实现停止功能,并更新success/attampts
    1.有”Reset“按钮,实现复位功能
    4.画布上显示的时间符合格式要求,分秒,十分位秒,还有空白位的0
    2.按”stop"后秒表不停???success/attampts结果能更新.如果计时器已经停止,按stop仍然更新success/attampts只得1分
    1.“Reset"清除success、/attampts结果

    下面是我纠结的编码思考过程:
    首先是 format(t),将递增数字t转化成A:BC.D的格式:
    t:每隔0.1s count+1
    format(t),将t转化成A :BC.D的格式---第一节单位转换
    1325-2:12.15      1325//600 = 2-----a
    1325-2*600 = 125       125%60 = 5          125-5 = 120    120//100 = 1 ----b (除60是不是多余呢?换一个数字试试
    第二种算法 125//10 = 12
    1325-2*600 = 125       125%60 = 5          125-5 = 120    120/10 = 12    12//10 = 2----c
    有些算错了,BC这两个数字不对,考虑用string来表达?
    设t=214,格式为A:BC:D正确结果应该是0:21.4
     
    如果按照这个公式计算B = ((t - t // 600 * 600) - (t - t // 600 * 600) % 60) // 100
    t//600 = 0   t-t//600*600 =214    (t-t//600*600)%60=
    10/8晚上洗完澡后,冷静思考,确认A和D的表达没问题,问题出在B和C,然后运用推理写出了B和C的表达,format(t)的终板如下:
     
    def format(t):
        A = t // 600
        B = (t - t // 600 * 600) // 100
        C = (t - t // 600 * 600) // 10 - (t - t // 600 *600) // 100 * 10
        d = str (t)
        D = d[-1]
        return str(A) + ":" + str(B) + str(C) + "." + D
    

    第二天试验了一些数据,应该是没问题的。

    然后开始写可视frame

    Timer的格式?

    Timer不能工作 报错

    Count在最前面定义t

    Format(t)将count得到的t转换成A:BC.D的格式

    Draw_handler在画布上将Format(t)显示出来

    删掉多余的,单纯实验timer

    我解决了timer的问题!!!柳暗花明又一村啊!!!刚才躺床上都想放弃了,我删掉多余的,单纯实验timer就解决问题啦,原来simplegui.creat_timer  creat少打了一个e,应该是create啊!

    然后又报错canvas.draw_text(format(t),[100,100],24,”white”)  t没有定义

    我就设置t为全局变量 t = 0。但是画布上只显示了0:00.0,我再在tick里面声明全局变量t, 

    Def tick()

    t+=1

    return t

    点击run,就可以啦:

    现在还需要:

    1.3个可以工作的按钮

    貌似已经解决了,用timer.start()  timer.stop()

    但是开始的时候秒表就开始跑了,这是咋回事?

    2.记分牌,按到stop整秒记1分,如何表达记分牌

    3.按Run启动的秒表应该是停止状态,按start才开始框架刚打开的是0状态

    先处理第三个问题

    关于第二个问题,Stop的逻辑应该是比较复杂的,start按钮应该是比较简单的,因为stop是要记分数的

    按start后t = 0,

    现在我run以后马上开始count,不应该这样,应该是我点start之后开始count

    Tick 应该是停止的状态?

    Timer.start()

    T=0这个全局变量是否应该存在?

    点开始 timer就开始运行,第二个参数tick

    解决了!!!在最后写

    Timer.stop()

    就!行!啦!

    第二个问题:如何写两个draw handler? 用空白的试一试?看一看视频?看完视频我就知道怎么写了,是写两行:

    Def draw(canvas):

    Canvas.draw_text(format(t), [100, 100], 24, “White)#format(t)必须是字符串

    Canvas.draw_text(“Hello!”, [200, 50], 24, “White)

    按下stop,X/Y,Y值加1,X值是否加1要看是否是整数秒

    Reset"清除success、/attampts结果

    A:BC.D

    每次点击Stop, Y加1

    只要D=0,X就加1

    否则X不加1

    D = d[-1] = str(t)[-1]

    下面的代码,不能工作,stop,start,Reset都不好使了

    ---------------------------------------------------------------------------

    def stop():#stop不工作

        x = 0

        y = 0

       

        y += 1

        if int(str(t)[-1]) == 0:

            x += 1#x,y都是整数,非字符串

        else:

            return x#这里好像有问题?

        timer.stop()

        return str(x) + "/" + str(y)#这里应该不用return成字符串的,应该是 canvas.draw_text(str(x) + "/" + str(y)

        ======================================

    Stop具体要实现什么功能?

    1.秒表停止   2.Y值加1    3.如果t为整数秒,X加1

    不改动的话功能1可以实现,现在要考虑如何实现功能2。3

    另外定义一个X/Y?

    先看看code clinic

    l  按照code clinic说法,stop 按钮应该检查t% 10 == 0

    l  Draw handler call format(t)

    用布尔函数,True of False; 。建议添加布尔变量 True-秒表工作running False-秒表停止stop,然后用这个数值决定按stop的时候是否更新score

    If timer.is_running():

    之前有模板说可以给出True 和false的?

    def stop_button_handler(): 
        global num_pushes,num_succ_pushes
        if timer.is_running() and tenths_of_sec==0:#可以改
            num_succ_pushes += 1
            num_pushes += 1
            timer.stop()
        elif timer.is_running():
            num_pushes += 1
            timer.stop()
        else:
            timer.stop()

    现在参考上面的代码,试一试,上面的代码启发了我(论坛有人贴的)

    难道是draw_handler_text出了问题?一定要是字符串?

    Canvas.draw_text(str(x) + “/” + str(y), [200, 200], 24, “Green”)#这里才关键,之前一直想要这样:canvas.draw_text(stop(), [200,200])

    我搞!定!了!

    def stop():

        global x, y

        if timer.is_running() and t % 10 == 0:

            x += 1

            y += 1

            timer.stop()

        elif timer.is_running():

            y += 1

            timer.stop

        else:

            timer.stop

    删掉timer.is_running()不行,因为删掉后,计时器已经停止了,按stop x,y依然家1

    最后完成了,reset是这样的:

    Def reset():

       Global t, x, y

       T = 0

    X = 0

    Y = 0

    Timer.stop()


    完整代码如下:
    # template for "Stopwatch: The Game"
    import simplegui
    
    t = 0
    x = 0
    y = 0
    # define helper function format that converts time
    # in tenths of seconds into formatted string A:BC.D
    
    def format(t):
        A = t // 600
        B = (t - t // 600 * 600) // 100
        C = (t - t // 600 * 600) // 10 - (t - t // 600 *600) // 100 * 10
        d = str (t)
        D = d[-1]
        return str(A) + ":" + str(B) + str(C) + "." + D
       
    # define event handlers for buttons; "Start", "Stop", "Reset"
    def start():
        timer.start()#在某一个时间停止,
        
    def stop():
        global x, y
        if timer.is_running() and t % 10 == 0:
            x += 1
            y += 1
            timer.stop()
        elif timer.is_running():
            y += 1
            timer.stop()
       
    def reset():    
        global t, x, y
        t = 0    
        x = 0
        y = 0
        timer.stop()
    
    # define event handler for timer with 0.1 sec interval
    
    def tick():
        global t
        t += 1#不需要return
    
    # define draw handler
    def draw(canvas):
        canvas.draw_text(format(t), [80, 120], 50, "White")
        canvas.draw_text(str(x) + "/" + str(y), [220, 30], 35, "Green")
    # create frame
    f = simplegui.create_frame("Stopwatch", 300, 200)
    
    # register event handlers
    f.add_button("Start", start, 100)
    f.add_button("Stop", stop, 100)
    f.add_button("Reset", reset, 100)
    f.set_draw_handler(draw)
    timer = simplegui.create_timer(100, tick)
    # start frame
    f.start()
    timer.stop()
    # Please remember to review the grading rubric
    

     很有成就感!嗯!

  • 相关阅读:
    标准化:释放物联网全部潜力的万能钥匙
    Linux系统中如何删除交换文件,来解决突然关闭命令行,导致文件无法打开的问题
    echarts设置图例以及网络格局的相关细节设置
    JSON.parse()与JSON.stringify()的区别,具体例子,一看就明白
    HttpServletRequest
    HttpServletResponse
    JavaWeb核心之Servlet
    Http协议和Tomcat服务器
    dom4j解析
    DTD和Schema约束
  • 原文地址:https://www.cnblogs.com/tufei7/p/4015995.html
Copyright © 2011-2022 走看看