中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何实现打乱试题与答案简单考试代码?
作者:
标题: 如何实现打乱试题与答案简单考试代码? 上一主题 | 下一主题
pykacha
初级用户





积分 156
发帖 73
注册 2008-5-9
状态 离线
『楼 主』:  如何实现打乱试题与答案简单考试代码?

具体问题是这样的:
在shiti.txt文件里有大概如下内容,总共有20题(答案间用Tab,-y表示此答案为正确答案,用来判断是否加分用的,出题时不显示出来):
////////////////////////////////////
1.你今年多大?
a.几岁        b.十几岁-y        c.二十几岁
2.你学什么专业?
a.化学        b.物理        c.政治-y
3.你现在读几年级?
a.高一-y        b.高二        c.高三
……
////////////////////////////////////
现在想用个P文件从中逐个调出所有试题,但顺序要打乱,可能首先调出的是第2或第3或第10题,接着调出第4什么的,乱序调出全部试题。
答案abc的出现也是随机打乱顺序的。如第2题出来时可能变会为:
8.你学什么专业?
a.物理        b.政治        c.化学
当输入b(不用回车)后就自动加1分,输入a或c就不加分但出示正确答案,然后到下一题,刚做过的题目可以不清屏,让它依然留在屏上。
全部完成时显示得分。
自己试了很长一段时间了,没办法。
希望大家帮帮忙。
(当然,如果可以记录下做错的题目,并提供选择,是否想把做错的题目再做一次,那效果就更完美了)



为自己是中国人而倍感骄傲
2008-11-22 18:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zexuhu
初级用户

小兵


积分 66
发帖 30
注册 2008-1-13
来自 陕西
状态 离线
『第 2 楼』:  

%RANDOM% 返回 0 到 32767 之间的任意十进制数字。
比如说想生成0-100的随机数就是对101取余数就可以了
格式是:set num=%RANDOM%%%100



QQ:349791091
2008-11-22 18:30
查看资料  发送邮件  发短消息 网志  OICQ (349791091)  编辑帖子  回复  引用回复
zexuhu
初级用户

小兵


积分 66
发帖 30
注册 2008-1-13
来自 陕西
状态 离线
『第 3 楼』:  

if num==1 goto 第一题
if num==2 goto 第二题
if num==3 goto 第三题
..........



QQ:349791091
2008-11-22 18:33
查看资料  发送邮件  发短消息 网志  OICQ (349791091)  编辑帖子  回复  引用回复
pykacha
初级用户





积分 156
发帖 73
注册 2008-5-9
状态 离线
『第 4 楼』:  

这些俺都知道,但整体实现起来不容易,请高手帮忙



为自己是中国人而倍感骄傲
2008-11-22 19:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 5 楼』:  

试试这个如何?
@echo off&setlocal enabledelayedexpansion
set p=0&set #1=a&set #2=b&set #3=c
:lp
for /l %%i in (1 1 20) do set .!random!!random!!random!=%%i
   for /f "tokens=1,2 delims==" %%i in ('set .') do set s=%%j !s!&set %%i=
      for %%a in (%s%) do (
         for /f "usebackq tokens=1-6 delims=. " %%i in ("shiti.txt") do (
            if defined str (
               for %%h in (%%i%%j %%k%%l %%m%%n) do (
               set str1=%%h
            if /i "!str1:~-2!"=="-y" (set !str1:~,1!=!str1:~1,-2!&set !str1:~1,-2!=-y) else set !str1:~,1!=!str1:~1!
           )
        call :next
       )
    if "%%a"=="%%i" set str=%%j
))
     echo.&echo.你的得分 %p%
     pause&exit
:next
echo !str!
for %%i in (a b c) do set .!random!!random!!random!=%%i
  for /f "tokens=1,2 delims==" %%i in ('set .') do set var=%%j !var!&set %%i=
    for %%i in (%var%) do call:lp1 %%i
       set y=&set var=&set n=
:lp0
       set num=&echo.!var1!
       set/p num=输入序号(a b c):
       if "%num%"=="" goto lp0
       if defined !#%num%! (set !#%num%!=&set /a p+=1) else (
       echo 答案错误 是否重新做一次?
       set/p y=输入 y 重新做一次:
       if /i "!y!"=="y" echo !str!&goto lp0
      )
      set str=&set var1=
goto :eof
:lp1
   set/a n+=1
   set #!#%n%!=!%1!
   set var1=!var1! !#%n%!.!%1!
   goto :eof
[ Last edited by terse on 2008-11-24 at 17:51 ]



简单!简单!再简单!
2008-11-22 21:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 6 楼』:  


@echo Off & setlocal EnableDelayedExpansion
set /a Count=0, Score=0
For /l %%a in (1 1 3) do set "$!Random!!random!=%%a"
For /f "tokens=2 Delims==" %%a in ('set $') do Echo\& Call :Begin %%a
Echo\& Echo Score: %Score%, %Count% Questions.
Pause>nul & Exit /b

:Begin
Set/a n=0,m=0,y=0,Flag=0
For /F "Delims=" %%a in (shiti.txt) do (
       set/a n += 1, m=n%%2
       If !m! equ 1 (set "Ques=%%a" & set "Str=") Else (set /a c=0 & Call :Loop %%a)
)

For /F "tokens=1* delims==_" %%i in ('set _') do (
       set /a y +=1
       If !y! Equ %1 (
           Set "Question=%%i!" & Echo !Question:*.=!
           For %%d in (%%j) do (
                  set "element=%%d"
                  If /i "!Element:~-2!" equ "-Y" set "element=!element:~,-2!"
                  set /p=!element!        <nul
           )
           Echo\& set /p Answer=Input your answer:
           For %%d In (%%j) Do (set "Corr=%%d"
                  If /I "!Corr:~-2!" equ "-Y" (
                      set "Correct=%%d"
                      If /I "!Correct:~,1!" equ "!Answer!" (Set /a Count+=1, Score+=5, Flag=1 & Echo Correct...)
           ))
           If "!Flag!" equ "0" Echo !Correct:~,-2!
))

:Loop
For %%I In (%*) Do set "Correct=%%I" & set "#!Random!!Random!=%%I"

For /f "Tokens=1* Delims=#=" %%d In ('set #') do (set "var=%%e" & set "Str=!Str!!var:~2![这里是TAB键]" & set "#%%d=")
For /f "Tokens=1-3 Delims=[这里是TAB键]" %%a in ("!Str!") Do set "_!Ques!=a:%%a[这里是TAB键]b:%%b[这里是TAB键]c:%%c"
Exit /b
[ Last edited by pusofalse on 2008-11-22 at 23:02 ]



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-11-22 22:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pykacha
初级用户





积分 156
发帖 73
注册 2008-5-9
状态 离线
『第 7 楼』:  

谢谢terse与pusofalse的用心指导。
trese那个运行起来好像有些问题,pusofalse那个基本实现了功能,很简洁。
也谢谢其它人,谢谢slore。
虽然有点罗嗦,但我还是要说。谢谢了。



为自己是中国人而倍感骄傲
2008-11-24 17:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by pykacha at 2008-11-24 17:36:
谢谢terse与pusofalse的用心指导。
trese那个运行起来好像有些问题,pusofalse那个基本实现了功能,很简洁。
也谢谢其它人,谢谢slore。
虽然有点罗嗦,但我还是要说。谢谢了。

重新修改一下  错误有什么提示?
不过 不能输入字符后就跳过  还是要回车才到下一题



简单!简单!再简单!
2008-11-24 17:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: