批处理文件 - 选择一张卡片

Posted

技术标签:

【中文标题】批处理文件 - 选择一张卡片【英文标题】:Batch file - Pick a card 【发布时间】:2013-10-04 08:39:06 【问题描述】:

我创建了一个批处理文件,它使用变量 %random% 选择随机扑克牌。批处理脚本不断循环,直到 %random% 介于 1 和 13 之间,然后再次为西装执行此操作。然后我将设置为数字的变量转换为文本,因此批处理文件会这样写:红桃四或黑桃王。唯一的问题是,它需要永远!如果你打开 CMD.exe 并输入

Echo %random%

并一直这样做,直到数字介于 1 和 4 之间,您将永远在那里。即使你把它放入一个批处理文件并使用循环,它仍然需要大约二十秒。有没有办法通过在随机数生成之前缩小搜索范围来缩短时间?我真的不确定。如果它有帮助,或者你不能理解我,这里是代码:

@echo off
:loop
cls
echo generating card...
set num=%random%
if /i %num% GTR 13 goto loop
if /i %num% LSS 1 goto loop
goto next
:next
set suit=%random%
if /i %suit% GTR 4 goto next
if /i %suit% LSS 1 goto next
goto next2
:next2
if %num%==11 set num=jack
if %num%==12 set num=queen
if %num%==13 set num=king
goto next3
:next3
if %suit%==1 set suiter=Hearts
if %suit%==2 set suiter=Diamonds
if %suit%==3 set suiter=Clubs
if %suit%==4 set suiter=Spades
goto ech
:ech
echo %num% of %suiter%
echo.
echo.
echo.
echo press any key to choose again
pause >nul
goto loop

【问题讨论】:

【参考方案1】:

您可以使用简单的余数运算完全消除搜索,从而将生成的随机数限制在 [1,13] 和 [1,4] 范围内。这也将大大简化代码。您可以使用可用于算术的“set /a”命令来实现这一点。 只需将您的脚本更改为:

@echo off
:loop
cls
echo generating card...
set /a num=%random% %% 13 + 1
set /a suit=%random% %% 4 + 1
if %num%==11 set num=jack
if %num%==12 set num=queen
if %num%==13 set num=king
if %suit%==1 set suiter=Hearts
if %suit%==2 set suiter=Diamonds
if %suit%==3 set suiter=Clubs
if %suit%==4 set suiter=Spades
goto ech
:ech
echo %num% of %suiter%
echo.
echo.
echo.
echo press any key to choose again
pause >nul
goto loop

祝你好运!

【讨论】:

嗯,这肯定比你的第一个答案更好。 谢谢!写完后不久,我意识到它实际上偏向于生成两位数(10、11、12),所以我寻找了一种更好的方法......【参考方案2】:

您可以在第一次尝试时使用一些数学运算来获得 1 到 13 之间的数字:

set /a num=13*%random%/32768+1 

1 和 4 也一样

set /a suit=4*%random%/32768+1

请参阅How to use random in BATCH script? - 与您的要求非常相似

【讨论】:

以上是关于批处理文件 - 选择一张卡片的主要内容,如果未能解决你的问题,请参考以下文章

在 Ionic 中处理卷轴

Reactjs:使用状态挂钩单击时如何选择一张或多张卡片?

Gym - 101190F Foreign Postcards (期望dp)

Mifare Classic一操作就显示。 错误: 这不是一张MIFARE CLASSIC卡片。

循环目录文件处理Excel相同表格,合并成一张长表

如何在 Flutter 中选择项目时更改卡片颜色?