中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 原创彩票选号器 上一主题 | 下一主题
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『楼 主』:  原创彩票选号器

  今天看到同事在为买彩票选号码,一时心血来潮写了这个P。由于本人不玩彩票,因此不熟悉其中的规则,肯定还有许多要改进的地方,就有劳有心人了。
(注:有个思路将以前的中奖号码全存进txt,在批处理中加入查找所选号码,如以前有的就重选一次)
    提示:17楼为更新后的不生成临时文件并加入次数限制和密码认证的完善版
@echo off&color 5f&mode con cols=50 lines=8
title 彩票号码选取器
:begin
if exist n.txt del n.txt
cd. >n.txt
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
set /a a=a+1
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
for /l %%i in (1,1,%b%) do call :select
cls
set /p namber=<n.txt
find "%namber%" a.txt >nul
if errorlevel 1 goto show
if errorlevel 0 goto begin
:show
echo.&echo.&echo. >n.txt
echo 选择出的号码为:%namber% >>n.txt
type n.txt
pause&del n.txt
cls
echo.&echo.&echo.
echo     选择完毕,请按任意键退出!
pause >nul&goto :eof
:select
set /p str=<n.txt
set /a n=%random%%%a
if %n% equ 0 goto select
find "%n%" n.txt >nul
if errorlevel 1 echo %str%%n% >n.txt&goto :eof
if errorlevel 0 goto select
[ Last edited by zw19750516 on 2008-3-29 at 04:45 AM ]



批处理之家新域名:www.bathome.net
2008-3-27 17:00
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  

怎么没有彩票爱好者来发表下意见吗,有了建议我好改进啊。



批处理之家新域名:www.bathome.net
2008-3-27 17:23
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
ansipeter
中级用户

替身



积分 269
发帖 130
注册 2007-3-23
状态 离线
『第 3 楼』:  

弱弱的问一句,能中奖吗?.......................



*讨厌的9527*  
2008-3-27 17:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by ansipeter at 2008-3-27 17:52:
弱弱的问一句,能中奖吗?.......................

我写这个P只是为了好玩为了提高,不是为了中奖,彩票这东东我不玩的,呵呵呵。。。。



批处理之家新域名:www.bathome.net
2008-3-27 18:23
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:  

使用set /a n=%random%%%a+1就可以得出1-35的数
修改一下不使用临时文件的脚本:

  Quote:
@echo off&color 5f&mode con cols=50 lines=8
title 彩票选号器
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
for %%i in ("%str%") do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop

cls
echo.&echo.&echo.
echo 选择出的号码为: %str%
pause>nul
cls
echo.&echo.&echo.
echo     选择完毕,请按任意键退出!
pause>nul





2008-3-27 22:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  谢谢指点,又学了一招!

但你好像忽视了数字为0的情况,应在:loop中加入对0的判断
:loop
set /a n=%random%%%a+1
if %n% equ 0 goto loop
for %%i in ("%str%") do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop



批处理之家新域名:www.bathome.net
2008-3-27 22:21
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 7 楼』:  

你没看仔细,这句决不会出现小于1的数
set /a n=%random%%%a+1

你原来的set /a n=%random%%%a却不能产生最大数(如输入的35)

[ Last edited by zh159 on 2008-3-27 at 10:37 PM ]



2008-3-27 22:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 8 楼』:  

啊,明白了,+1是对前面产生数的+1,再次受教!



批处理之家新域名:www.bathome.net
2008-3-27 22:40
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 9 楼』:  

晕,经测试发现这样会有重复的数出现,问题应该还是出在loop中



批处理之家新域名:www.bathome.net
2008-3-28 12:00
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 10 楼』:  

for %%i in ("%str%") do if "%n%" == "%%i" goto loop
问题出在这里,%str% 不应该加引号



致精致简!
2008-3-28 13:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 11 楼』:  多谢26933062,向你学习!

谢谢了,thank you very much,现修改如下:
@echo off&color 5f&mode con cols=50 lines=8
title 彩票选号器
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
for %%i in (%str%) do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop
cls
echo.&echo.&echo.
echo 选择出的号码为: %str%
pause>nul
cls
echo.&echo.&echo.
echo     选择完毕,请按任意键退出!
pause>nul




批处理之家新域名:www.bathome.net
2008-3-28 13:51
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
tvzml
初级用户





积分 157
发帖 67
注册 2007-5-13
状态 离线
『第 12 楼』:  

这东西好有趣,学习了。

2008-3-28 13:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 13 楼』:  加强版(加入了次数限制和认证密码):


@echo off&color 5f&mode con cols=50 lines=8
title 彩票号码选取器
if exist a.txt goto run
echo 0 >a.txt
:run
echo.&echo.&echo.
set /p password=请输入进入密码:
if "%password%"=="cn-dos.net" goto begin
set /p a=<a.txt
set /a a+=1
set /a b=5-a
echo %a% >a.txt
if %a% geq 5 goto wrong
cls
echo.&echo.&echo.
echo 由于没正确输入密码,你仅能使用5次,现在还剩%b%次
ping /n 3 127.1 >nul
:begin
if exist n.txt del n.txt
cd. >n.txt
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
for %%i in (%str%) do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop
cls
echo.&echo.&echo.
echo 选择出的号码为: %str%
pause
cls
echo.&echo.&echo.
echo     选择完毕,请按任意键退出!
pause >nul&goto :eof
:wrong
cls
echo.&echo.&echo.
echo 对不起,你无权再使用本软件!
ping /n 3 127.1 >nul
goto :eof
[ Last edited by zw19750516 on 2008-3-28 at 02:40 PM ]



批处理之家新域名:www.bathome.net
2008-3-28 14:35
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
terse
银牌会员





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



  Quote:
Originally posted by zw19750516 at 2008-3-28 14:35:
[code]@echo off&color 5f&mode con cols=50 lines=8
title 彩票号码选取器
if exist a.txt goto run
echo 0 >a.txt
:run
echo.&echo.&echo.
set /p password=请输入进入密 ...

实际上代码就是获得%n%个的不同随机数
代码里的对比判断有效率问题

不如这样处理:
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
if defined %n% goto loop
set str=%str% %n%
set %n%=A
set /a m+=1
if %m% lss %b% goto loop



简单!简单!再简单!
2008-3-28 20:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kaikai163
初级用户





积分 107
发帖 60
注册 2007-11-7
状态 离线
『第 15 楼』:  

不错,又学到东西了!

2008-3-28 20:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: