首页 > 编程语言 >第八周-结对编程

第八周-结对编程

时间:2024-04-24 15:56:52浏览次数:22  
标签:结对 答题 编程 list 第八 ans time print data

作业题目

程序源代码

点击查看代码
import random
import time
import os
import json

def question():
    a = random.randint(0,100)
    b = random.choice(["+","-","*","/"])
    c = random.randint(0,100)
    d = random.choice(["+","-","*","/"])
    e = random.randint(0,100)
    while b == '/' and c==0:
        c = random.randint(0,100)
    while d == '/' and e==0:
        e = random.randint(0,100)
    question = f"{a}{b}{c}{d}{e}"
    return question

def create_que():
    q_list  = []
    while len(q_list) < 300:
        que = question()
        ans = eval(que)
        if ans in range(0,1000):
            q_list.append(que)
    with open("question.txt",'w') as file:
        for q in q_list:
            file.writelines(f"{q}\n")
    print(q_list)

def read_que():
    with open("question.txt",'r') as file:
        q_list = list(filter(None,file.read().split("\n")))
        return q_list

def ans_main():
    try:
        with open("data.json",'r') as f:
            data = json.load(f)
    except:
        data={
        "position":0,
        "t_num":10,
        "last_time":0,
        }

    try:
        q_list = read_que()
    except:
        create_que()
        q_list=read_que()

    i=0
    jump = False
    add = False
    right=0

    print("答题开始")
    print("输入@结束本次答题")
    os.system("pause")

    for q in q_list:
        os.system("cls")

        if i < data["position"] and jump == False:
            i+=1
            continue
        
        jump = True
        if add == False:
            i+=data["t_num"]
            add = True

        start_time = time.time()

        p = data["position"]
        print(f"第{p+1}题:")
        print(q)
        print("输入答案:")
        user_ans = input()

        if user_ans == "@":
            break

        ans = eval(q)
        ans = eval("{:.2f}".format(ans))
        print(f"正确答案是:{ans}")
        if eval("{:.2f}".format(eval(user_ans))) == ans:
            right+=1
            print("回答正确!")
        else:
            print("回答错误!")
        os.system("pause")
        data["position"] +=1

        if i == data["position"]:
            break
    
    os.system("cls")
    end_time = time.time()
    print(f"本次答题得分:{right*10} 分")
    print(f"用时:{round(end_time-start_time+data['last_time'],2)}秒")

    if user_ans != "@":
        print("恭喜你完成本次答题")
        data["t_num"] = 10
        data["last_time"] = 0
    else:
        data["t_num"] = i-data["position"]
        data["last_time"] = end_time-start_time
    with open("data.json",'w') as f:
        json.dump(data,f)

ans_main()

实现功能
1.生成300道四则运算题目

  • 生成含有两个运算符,计算数100以内的算式300道
  • 确保答案在0~1000之间
  • 采用txt文件存储题目

2.答题

  • 设定每轮作答10题
  • 如果中途退出答题可以从上一次答题的位置继续答题
  • 统计得分
  • 统计答题时间
  • 采用json文件储存数据信息
点击查看代码
def ans_main():
    try:
        with open("data.json",'r') as f:
            data = json.load(f)
    except:
        data={
        "position":0,
        "t_num":10,
        "last_time":0,
        }

    try:
        q_list = read_que()
    except:
        create_que()
        q_list=read_que()

    i=0
    jump = False
    add = False
    right=0

    print("答题开始")
    print("输入@结束本次答题")
    os.system("pause")

    for q in q_list:
        os.system("cls")

        if i < data["position"] and jump == False:
            i+=1
            continue
        
        jump = True
        if add == False:
            i+=data["t_num"]
            add = True

        start_time = time.time()

        p = data["position"]
        print(f"第{p+1}题:")
        print(q)
        print("输入答案:")
        user_ans = input()

        if user_ans == "@":
            break

        ans = eval(q)
        ans = eval("{:.2f}".format(ans))
        print(f"正确答案是:{ans}")
        if eval("{:.2f}".format(eval(user_ans))) == ans:
            right+=1
            print("回答正确!")
        else:
            print("回答错误!")
        os.system("pause")
        data["position"] +=1

        if i == data["position"]:
            break
    
    os.system("cls")
    end_time = time.time()
    print(f"本次答题得分:{right*10} 分")
    print(f"用时:{round(end_time-start_time+data['last_time'],2)}秒")

    if user_ans != "@":
        print("恭喜你完成本次答题")
        data["t_num"] = 10
        data["last_time"] = 0
    else:
        data["t_num"] = i-data["position"]
        data["last_time"] = end_time-start_time
    with open("data.json",'w') as f:
        json.dump(data,f)

程序运行截图


输入"@"之后:


重新启动程序:


答完最后一题:


博客体会
本次和学号2230117同学的结对编程,我们完成了对这一个简单的出题程序的设计和实现。采取了本人较为熟悉,也更加方便的python语言来实现程序。对于合作搭档不熟悉语言的问题,我选择了对他进行简单的教学。我认为使用更加合适的工具能够避免一些繁琐的编码过程。python语言的学习,对于有编程基础的同学来说是非常容易的。例如,如果使用我们都学习过的c++,java语言,必然会涉及到繁琐的数据结构,加重我们二人程序设计的负担。使用python语言就没有这些问题。
在这次结对编程实验中,虽然对比我个人单人编程,编码效率下降,但是另一位同学也在我编码的过程中发现了许多错误之处,和我一起进行逻辑上的修正,这也是我个人无法在短时间内做到的。
总的来说,这次实验使我学到了很多。我相信没有任何一个程序员能够一步做到完美,写出没有bug的程序。结对编程意义就在于二人相互监督,相互指出错误,来降低代码的错误率。但是如果二人水平不一致,也可能导致效率下降的问题。

标签:结对,答题,编程,list,第八,ans,time,print,data
From: https://www.cnblogs.com/bilikali/p/18155616

相关文章

  • 我为什么学习Rust编程?
    2024-04-24下午,今下午感受到如果要睡觉就应该让音响在自己耳边程序轰炸.翻看gitee,又再次看到这个loop示例,这几天忙于工作,除了偶尔刷下rust视频,rust的电子书,其他的都看得比较少,主要还是感觉工作疲倦之余已经没有精力来继续回顾和延伸.其实后来感觉不是的,就像那会儿接......
  • 并发编程(Semaphore)
    Semaphore,信号量,它保存了一系列的许可(permits),每次调用acquire()都将消耗一个许可,每次调用release()都将归还一个许可特性Semaphore通常用于限制同一时间对共享资源的访问次数上,也就是常说的限流。下面我们一起来学习Java中Semaphore是如何实现的。类结构Semaphore中包含了一......
  • 并发编程(CyclicBarrier)
    CyclicBarrier是一个同步器,允许一组线程相互之间等待,直到到达某个公共屏障点(commonbarrierpoint),再继续执行CyclicBarrier与CountDownLatch异同都可以阻塞一组线程等待被唤醒CyclicBarrier是最后一个线程到达后会自动唤醒,而CountDownLatch需要显式调用countDown方法Cyc......
  • C#的基于.net framework的Dll模块编程(二) - 编程手把手系列文章
          今天继续这个系列博文的编写。接上次的篇幅,这次介绍关于C#的Dll类库的创建的内容。因为是手把手系列,所以对于需要入门的朋友来说还是挺好的,下面开始咯: 一、新建Dll类库;这里直接创建例子的Dll类库项目,至于项目文件目录的存放布局后面的例子中会介绍。......
  • Pyhton - 类元编程
    目录身为对象的类type:内置的类工厂函数类元编程是指在运行时创建或定制类的技艺。在Python中,类是一等对象,因此任何时候都可以使用函数新建类,无须使用class关键字。类装饰器也是函数,不过能够审查、修改,甚至把被装饰的类替换成另一个类。最后元类是类元编程最高级的工具:使用元类可......
  • 单向循环链表和双向链表程序编程
    链表学习记录设计单向循环链表的接口/***********************************************************************************************************设计单向循环链表的接口****Copyright(c)[email protected]*************......
  • Flink状态编程:为什么不建议在ValueState里面存Map?
    Flink状态编程:为什么不建议在ValueState里面存Map?文章目录先说结论性能:TTL:State需要存什么数据Heap模式ValueState和MapState如何存储StateBackend模式如何存储和读写State数据1.RocksDB模式ValueState和MapState如何存储1.1ValueState如何映射为RocksDB......
  • 前端编程另一种数据传输方法,window.postMessage 技术
    window.postMessage是一项非常实用的浏览器技术,它允许不同窗口或框架之间进行安全的消息传递。一、技术介绍window.postMessage可以在不同的源之间传递消息,包括跨域的情况。这为跨文档通信提供了一种强大而灵活的方式。二、使用方法举例假设有两个页面,一个是发送方页面send......
  • 实验3 C语言函数应用编程
    task1.c1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN8067voidprint_text(intline,intcol,chartext[]);//函数声明8voidprint_spaces(intn);//函数声明9voidpri......
  • C#异步编程
    既然有了多线程为什么还需要异步   异步并不意味者多线程,单线程同样可以异步异步默认借助线程池   多线程经常阻塞,二异步要求不阻塞多线程与异步的使用场景不同  多线程:       适合CPU密集型操作 适合长期运行任务线程的创建与开销较大......