首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash - while loop -滚动2个骰子

bash - while loop -滚动2个骰子
EN

Stack Overflow用户
提问于 2015-11-04 09:38:17
回答 2查看 1.4K关注 0票数 1

我正在写一个bash脚本,掷2个骰子(有6个面)。当2个骰子打到双六时,我想让脚本停止(中断),并计算得到双六花了多少掷。

代码语言:javascript
运行
复制
#!/bin/bash
DOUBLESIX="6-6"

while (( 0 ==0 )) ; do
     dice=$RANDOM; ((dice = dice % 6 )); (( dice = dice +1 ))
     dice2=$RANDOM; ((dice2 = dice2 % 6 )); (( dice = dice + 1))

pair="$dice-dice$2"
echo $pair

if [[ "$pair" == "$DOUBLESIX" ]]; then
      break
fi

done

echo "It took $count rolls to get 6-6 "

这是我到目前为止所掌握的。问题是,我如何计算while循环运行了多少次并将其放入我的$count?

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2015-11-04 09:43:34

我不会对你的代码中的其他潜在问题发表太多评论,比如dice$2“变量”,或者你可以用稍微简单一点的((num = $RANDOM % 6 + 1))生成一个介于1和6之间的随机数-修复/改进这些问题的学习过程将使你成为一名更好的程序员。

但是,对于如何维护计数的具体问题,这是相对简单的。在循环开始之前,插入以下代码以将计数初始化为零:

代码语言:javascript
运行
复制
((count = 0))

然后,随着两个骰子的每一次掷出,使用以下方法来递增计数:

代码语言:javascript
运行
复制
((count = count + 1))

如何做到这一点的示例可以在下面看到。它是用来从一数到十的,但你应该明白这个意思:

代码语言:javascript
运行
复制
((count = 1))
while [[ ${count} -le 10 ]] ; do
    echo $count
    ((count = count + 1))
done

为了它的价值(如果这是一个课堂作业问题,不要使用它,你会认为教育工作者不会在网上搜索抄袭),下面是我如何实现这样一个野兽的方法:

代码语言:javascript
运行
复制
#!/bin/bash

DESIRED="6-6"
((count = 0))
dice="NOT ${DESIRED}"
while [[ "${dice}" != "${DESIRED}" ]] ; do
    ((count = count + 1))
    ((die1 = $RANDOM % 6 + 1))
    ((die2 = $RANDOM % 6 + 1))
    dice="${die1}-${die2}"
    echo ${dice}
done

echo "It took ${count} rolls to get ${DESIRED}"
票数 2
EN

Stack Overflow用户

发布于 2021-10-05 06:29:52

为此,我建议使用shuf

代码语言:javascript
运行
复制
#!/bin/bash
declare -i count=1
while [ "6 6" != "$(shuf --input-range='1-6' -r -n 2 | xargs)" ]; do
    (( ++count ))
done
echo "It took $count rolls to get double six."

为了生成1到6之间的两个随机数,我们使用

代码语言:javascript
运行
复制
    shuf --input-range='1-6' -r -n 2

shuf [OPTION]... [FILE]将输入行的随机排列写入标准输出。每个输出排列的可能性都是相等的。-i lo-hi--input-range=lo-hi的作用就像输入来自包含无符号十进制整数范围lo-hi的文件一样,每行一个。-r--repeat重复输出值,即选择替换。使用此选项,输出不是输入的排列;相反,从所有输入中随机选择每一条输出行。-n count--head-count=count在大多数count行输出(默认情况下,输出所有输入行)。如果没有给出--head-count,则无限期重复shuf。

键入man shuf或查看coreutils manual以了解更多详细信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33512276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档