• 當前位置:首頁 > IT技術 > 微信平臺 > 正文

    Python答題并統計的小程序
    2022-02-14 14:08:56



    文章目錄

    前言

    也是一個??django???/??pywebio??的項目。

    D:.
    │ putMessage.py

    └─server
    │ Data
    │ db.sqlite3
    │ manage.py

    └─server
    │ asgi.py
    │ settings.py
    │ urls.py
    │ wsgi.py
    │ __init__.py

    └─__pycache__
    settings.cpython-36.pyc
    urls.cpython-36.pyc
    wsgi.cpython-36.pyc
    __init__.cpython-36.pyc

    實現了個什么效果?在線答題并統計答題結果。

    正文

    這個東西比我的那個登錄驗證模板要簡單一些。但是,這個項目也有一個有趣的東西。我們來看看吧。。

    創建項目的命令:

    django-admin startproject

    1.??settings.py??

    也是添加那一項??ALLOWED_HOSTS??? 的元素??*??,這里不再贅述。

    2.??urls.py??

    主要的服務器程序。

    from django.shortcuts import HttpResponse
    from django.urls import path
    from json import dumps

    avg = 0 # 記錄平均分
    humen = 0 # 記錄人數
    names = [] # 記錄答題人名字
    avgtime = 0 # 記錄平均時間

    def readAs(request): # 讀取和寫入
    global humen,avg,names,avgtime
    reads,data,temp = [],[],[]
    with open('Data','r',encoding='utf-8') as f:
    reads = f.read().splitlines()
    # 添加請求來的數據
    text = '%s的成績是%s,%s' % (request.GET['name'],request.GET['score'],request.GET['time'])
    reads.append(text)
    for i in range(0,len(reads)):
    temp = reads[i].split('的成績是')
    # 分割字符串、儲存字典
    t = reads[i].split(',')
    data.append({'name':temp[0],'score':float(temp[1].split(',')[0]),'time':int(t[1])})
    del temp,reads
    # 儲存數據
    humen = len(data)
    for i in range(0,humen):
    avg += data[i]['score']
    avg /= humen
    for i in range(0,humen):
    print(data[i]['name'])
    names.append(data[i]['name'])
    for i in range(0,len(data)):
    avgtime += data[i]['time']
    avgtime /= humen
    # 重新寫入
    with open('Data','a',encoding='utf-8') as f:
    f.write(text + ' ')
    return HttpResponse(dumps({'humen':str(humen),'avg':str(int(avg)),'time':str(int(avgtime))}))

    def main(request):
    return HttpResponse('<p><b>當前答題情況:</b></p><font face="Courier New" color="green"><b><p>答題人數:%d</p><p>答題平均分:%d</p><p>平均用時:%s秒</p><p><a href="/answer" title="答題列表">答題列表</a></p></b></font>' % (humen,avg,avgtime))

    def answerList(request): # 答題名單
    string = ''
    for i in range(0,len(names)):
    string += '%s ' % names[i]
    return HttpResponse(string)

    urlpatterns = [
    path('read/',readAs),
    path('',main),
    path('answer/',answerList)
    ]

    3.??putMessage.py??

    客戶端,發送請求用的。

    from pywebio.input import *
    from pywebio.output import *
    from requests import get
    from random import randint
    from time import time

    url = 'http://127.0.0.1:8000/' # 默認IP
    operate,answer = [],[]
    right = 0 # 正答
    n = 5 # 五道題
    tempSco = 100 / n # 一道題的分數

    # 如果不能整除
    if 100 % n:
    n = 5
    tempSco = 20

    # 隨機生成運算題
    for i in range(0,n):
    a,b,c = randint(1,9),randint(1,9),0
    if a < b:
    c = b
    b = a
    a = c
    del c
    operate.append('%d%s%d' % (a,['+','-','*'][randint(0,2)],b))

    # 計算答案
    for i in range(0,len(operate)):
    answer.append(eval(operate[i]))

    # 顯示
    put_markdown('請你認真答題!')
    name = input('請輸入你的名字:')
    if ('的成績是' in name) or (',' in name):
    put_markdown('你的名字中含有非法字符,請修改。')
    exit()
    last = time() # 計時開始
    for i in range(0,len(operate)):
    ua = input('請回答:%s=?' % operate[i])
    if ua == str(answer[i]):
    right += 1
    current = time() # 計時結束
    right *= tempSco # 計算正確率

    # 發送請求
    x = int(current-last)
    params = {
    'name':name,
    'score':right,
    'time':x,
    }
    res = get(url + 'read/',params=params).json()
    put_markdown('已經有%s人提交,平均分是:%s,平均用時:%s 你的分數:%f,你的用時:%d' % (res['humen'],res['avg'],res['time'],int(right),x))

    實現的效果

    運行服務器,打開客戶端。

    Python答題并統計的小程序_數據

    Python答題并統計的小程序_python_02

    5道題。

    Python答題并統計的小程序_django_03

    Python答題并統計的小程序_django_04

    Python答題并統計的小程序_python_05

    下載

    點這下載。



    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码