标题: 原创彩票选号器
[打印本页]
作者: bat-zw
时间: 2008-3-27 17:00
标题: 原创彩票选号器
今天看到同事在为买彩票选号码,一时心血来潮写了这个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 ]
作者: bat-zw
时间: 2008-3-27 17:23
怎么没有彩票爱好者来发表下意见吗,有了建议我好改进啊。
作者: ansipeter
时间: 2008-3-27 17:52
弱弱的问一句,能中奖吗?.......................
作者: bat-zw
时间: 2008-3-27 18:23
Quote: |
Originally posted by ansipeter at 2008-3-27 17:52:
弱弱的问一句,能中奖吗?....................... |
|
我写这个P只是为了好玩为了提高,不是为了中奖,彩票这东东我不玩的,呵呵呵。。。。
作者: zh159
时间: 2008-3-27 22:10
使用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 |
|
作者: bat-zw
时间: 2008-3-27 22:21
标题: 谢谢指点,又学了一招!
但你好像忽视了数字为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
作者: zh159
时间: 2008-3-27 22:36
你没看仔细,这句决不会出现小于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 ]
作者: bat-zw
时间: 2008-3-27 22:40
啊,明白了,+1是对前面产生数的+1,再次受教!
作者: bat-zw
时间: 2008-3-28 12:00
晕,经测试发现这样会有重复的数出现,问题应该还是出在loop中
作者: 26933062
时间: 2008-3-28 13:42
for %%i in ("%str%") do if "%n%" == "%%i" goto loop
问题出在这里,%str% 不应该加引号
作者: bat-zw
时间: 2008-3-28 13:51
标题: 多谢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
作者: tvzml
时间: 2008-3-28 13:52
这东西好有趣,学习了。
作者: bat-zw
时间: 2008-3-28 14:35
标题: 加强版(加入了次数限制和认证密码):
@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 ]
作者: terse
时间: 2008-3-28 20:08
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
作者: kaikai163
时间: 2008-3-28 20:23
不错,又学到东西了!
作者: 26933062
时间: 2008-3-28 22:36
@echo off&color 5f&mode con cols=50 lines=8
title 彩票选号器
if not "%~1"=="" goto loop
set /a a=35,b=7
setlocal EnableDelayedExpansion
set /p a=请输入在多少个数中选择(默认回车为35):
set /p b=请输入选择多少个数(默认回车为7):&cls
:loop
if not "%~1"=="" (
for /l %%a in (1 1 %a%) do call echo %%random%% %%a
goto :eof
) else (
for /f "tokens=2" %%i in ('"%~0" n^|sort /r') do (
set /a b-=1
if !b! geq 0 set str=!str! %%i
)
)
echo\&echo 选择出的号码为: %str%
echo\&echo 按任意键重选。。。
pause>nul
作者: bat-zw
时间: 2008-3-29 03:18
标题: 无任何临时文件的完善版(有次数限制和密码认证)
注:存为b.bat
@echo off&color 5f&mode con cols=50 lines=8
title 彩票号码选取器
echo.&echo.&echo.
set /p password=请输入进入密码:
if "%password%"=="cn-dos.net" goto begin
for /f "tokens=2" %%i in (b.bat) do (
set a=%%i
)
set /a a+=1
set /a b=5-a
if %a% geq 5 goto wrong
echo goto %a% ^>nul 2^>nul >>b.bat
cls
echo.&echo.&echo.
echo 由于没正确输入密码,你仅能使用5次,现在还剩%b%次
ping /n 3 127.1 >nul
:begin
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 0 >nul 2>nul&goto :eof
[
Last edited by zw19750516 on 2008-3-29 at 03:29 AM ]
作者: clian76
时间: 2008-4-29 14:23
LZ写的不错,就是没有设置循环,每次只能选一次,然后又要重新打开才行。我也写了一个排列5的彩票批处理。
http://www.cn-dos.net/forum/view ... =%E5%BD%A9%E7%A5%A8,