猜数字游戏

回复 收藏
本帖最后由 YCC 于 2014-12-19 21:40 编辑

昨天除了中午吃饭花了半个小时外,从昨天早上九点过4分到现在,我一直坐在现在这个位置上;辛苦的耕耘!
该是前天问过班花,我想到一道题,现在写出来;

在程序语言中,是很好写的一个小程序,现在要求用shell脚本完成;题目如下:

猜数字的小游戏;
运行程序后,提示用户输入一个0-9的数字,如果是非数字,那么就提示用户输入数字;如果用户猜中,提示用户猜对了;如果用户没有猜中,那么就提示用户重新输入一个数字;如果,用户连续五次都没有猜中,则提示用户,24小时后再来玩这个游戏;

这道题可以分为很多小题;虽然我自己想出的这道题,但我自己现在还没有想到答案!


现在我已经躺在椅子上了;欢迎给我小伙伴们解答;




2014-12-19 00:38 举报
已邀请:
0

qq20847697

赞同来自:

!!!!!!!!!!!
0

hangtiangazi

赞同来自:

  1. #!/bin/bash
  2. m=$[$RANDOM/900]
  3. cnt=5
  4. while [ cnt -le 5 ];do
  5.         read -p "please input your guess number(0-9):" n
  6.         m=`echo $n |sed 's/[0-9]//g'
  7.         if [ ! -z  $m ];then
  8.                 echo "your input is not number,please input number!" n
  9.                 cnt=$[$cnt-1]
  10.         else
  11.                 if [ $n - eq $m ];then
  12.                         echo "you guess right!"
  13.                         break;
  14.                 fi
  15.         fi
  16. done
  17. if [ $cnt -eq 0 ] ;then
  18.                         echo "please play games 5 hours later!"
  19. fi


0

小耗耗

赞同来自:

  1 #!/bin/bash
  2
  3 num=$[$RANDOM%10]
  4 chance_num=5
  5
  6 while [ $chance_num -ge 1 ]; do
  7     read -p "input a number: " n
  8     match=$[$num-$n]
  9     if [ $match -eq 0 ]; then
10         echo "your number is right!"
11     else
12         chance_num=$[$chance_num-1]
13         echo "the number is wrong, you have $chance_num chances."
14     fi
15 done
16
17 if [ $chance_num -eq 0 ]; then
18         echo " wait for 24 hours to play this game."
19 fi
~                       
0

aqi

赞同来自:

本帖最后由 aqi 于 2015-6-29 23:23 编辑
  1. #!/bin/bash

  2. times=1
  3. Random=$[$RANDOM%10]

  4. function Get()
  5. {
  6.         case $1 in
  7.         1)
  8.                 read -p "Please input a number(0~9): " guess
  9.                 ;;
  10.         2)
  11.                 read -p "Input error , please input a number(0~9): " guess
  12.                 ;;
  13.         esac
  14.         filter=`echo -n $guess | sed 's/[0-9]//g'`
  15. }

  16. Get 1

  17. while :
  18. do
  19.         if [ -z $guess ] || [ ! -z $filter ] ;then
  20.                 Get 2
  21.         elif [ 0$guess -eq 0$Random ];then
  22.                 echo "Right !"
  23.                 break
  24.         elif [ $times -ge 5 ];then
  25.                 echo "Guess wrong !"
  26.                 echo "Please play this game after 24 hours later !"
  27.                 break
  28.         else
  29.                 echo "Guess wrong !"
  30.                 times=$[$times+1]
  31.                 Get 1
  32.         fi
  33. done

0

九月微寒

赞同来自:


  1. #!/bin/bash
  2. # liusheng @20150629
  3. num1=$(($RANDOM%10));
  4. for ((i=1;i<=5;i++))
  5. do
  6.     read -p "猜数字,共五次机会,这是第 $i 次机会。请输入0-9的数字 ? " num
  7.     n=`echo $num |sed 's/[0-9]//g'`
  8.     if [ -z $n ];then
  9.         [ "$num" == "$num1" ] && echo "你猜对了!" && exit
  10.     else
  11.         echo "你输入的是数字么?" && let i=$i-1 && continue
  12.     fi
  13. done
  14. echo "24小时后来吧!"


0

21emerald

赞同来自:


请教下,你第16行echo 加选项 -n ,和第25行两个变量前都加个0,都有什么作用?
0

aqi

赞同来自:

21emerald 发表于 2015-7-13 20:15
请教下,你第16行echo 加选项 -n ,和第25行两个变量前都加个0,都有什么作用?

16行 -n 去掉换行  貌似在这里没什么用
25行前加 0 防止因空值比较而出现报错  因为前一个 if 已经解决了空值问题 所以在这里并没有什么作用 只是个人习惯
0

Linuxpp

赞同来自:

look
0

wangdi244

赞同来自:

python版本
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. import random
  4. import sys
  5. import tab   #命令补全模块

  6. count = 0
  7. while True:
  8.     try:
  9.         input_num = raw_input('请输入一个数字:')
  10.     except KeyboardInterrupt:
  11.         sys.exit('\n')
  12.     if not input_num.isdigit():
  13.         print '请您输入一个数字(0-9)'
  14.         continue
  15.     else:
  16.         if int(input_num) == random.randint(0,10):
  17.             print '您猜对了'
  18.         else:
  19.             print '您猜错了,请重新输入一个数字'
  20.             count = count + 1
  21.             if count == 5:
  22.                 print '24小时后再来玩这个游戏'
  23.                 sys.exit('\n')
0

蔡炳森

赞同来自:

#!/bin/bash
#It's written by caibingsen
#Date:2016-03-15
## 功能:猜 0-9 范围内的数字
## 要求:1、每次自动生成一个数字
##       2、猜错五次自动退出
##       3、猜对自动退出
##       4、输入非数字不报错
##       5、脚本要实现一天只能运行一次
#判断是否有执行过该脚本,有执行过就要判断执行的时间,没有执行过直接进入到for语句
if [ -a /tmp/time.txt ];then
   olddate=`date +%s`
   newdate=`cat /tmp/time.txt`
   newolddate=$[$olddate-$newdate]
   if [ $newolddate -ge 0 ];then
     echo 1 > /tmp/count.sh
   else
   echo "请在一天后再玩"
   exit
   fi
fi
for i in {1..5}
do
#随机数0-9
random_number=$[RANDOM%10]
echo $random_number
read -p "请输入一个0-9的数字:" number
#判断输入的值是否为数字,纯数字时number1为空
number1=`echo $number |sed 's/[0-9]//g'`
if [ -z $number1 ];then
if [ $random_number -eq $number ];then
   echo "你输入的值正确"
   date -d'+1 min' +%s > /tmp/time.txt
   exit
fi
fi
   date -d'+1 min' +%s > /tmp/time.txt
0

chiang1213

赞同来自:

#!/bin/bash
i=1
while :
do
read -p "请输入一个0到9的数字:" num1
if [[ ${num1} =~ ^[0-9]?$ ]]
then
echo "输入正确"
exit 0
elif [[ ${num1} =~ ^[0-9][0-9]+$ ]]
then
echo "输入错误,请重新输入一个数字"
let i++
else
echo "请输入一个数字"
let i++
fi
if [ $i -eq 6 ]
then
echo "连续五次没有输入正确,请24小时后再来玩这个游戏"
exit 0
fi
done
0

13663010754

赞同来自:

  1. #! /bin/bash
  2. a=$(($RANDOM%10))
  3. for ((i=1;i<6;i++))
  4. do
  5. read -p "请输入0-9,共5次机会,这是第$i次:" b
  6. m=`echo $b|sed 's/[0-9]//g'`
  7. if [ -z $m ]
  8. then
  9.         [ $a -eq $b ] && echo "你猜对了!"&&break
  10.         [ $a -ne $b ]&& echo "你猜错了!!!"
  11.                 [ $i -eq 5  ] &&echo "24小时后再来玩这个游戏"&&break

  12. else
  13.         echo "你输入的不是数字!!!!"
  14.         let i=i-1;
  15. fi
  16. done
0

出VU时代

赞同来自:

#!/bin/bash
##猜数字游戏
num=$[ RANDOM%100 ]
for i in `seq 1 6`
do
read -p "有个随机数[0-99],你猜:"  guss
if [ -z $guss ];then
        echo "你没有输入,请输入数字!"
        exit
fi
expr $guss "+" 1 &>/dev/null
if [ $? -ne 0 ] ;then
      echo "你输入的不是数字!"
      exit
fi
if [ $guss -eq  $num  ];then
        echo " 恭喜,你猜对了,你猜了$i次"
        exit
elif [ $guss -gt  $num ] ;then
        echo "你猜大了,你猜了$i次"
else
        echo "你猜小了,你猜了$i次"
fi
done
0

kw是id

赞同来自:

#!/bin/bash
c=0
read -p "please input a number between 0 to 9: " n
if [ $n -lt 0 -o $n -gt 10 ]
then
   echo "please input a number between 0 to 9"
   exit
fi
a=`echo "$n" |sed 's/[0-9]//'`
if [ -z "$a" ]
then
   echo "the number you input is correct"
else
   while :
   do
      read -p "please input a number between 0 to 9: " b
      a=`echo "$b" |sed 's/[0-9]//'`
      if [ -n "$a" ]
      then
          echo "please input a number between 0 to 9"
          let c=c+1
      else
          echo "the number you input is correct"
          exit
      fi
      if [ $c -eq 4 ]
      then
          echo "please retry after 24 hours"
          exit
      fi
   done
fi

0

dongdongchen

赞同来自:

#!/bin/bash

#增加判断24小时后才能再玩一次

keylog=/tmp/keylog.txt

[ -e $keylog ]||touch $keylog

oldday=`cat $keylog`

newday=`date +%s`


if [ -z $oldday ];then

    echo "The first to play this game."

elif [ $newday -lt $oldday ];then

    echo "Please play this game one more time over 24 hours"

    exit

fi

oldday=`date -d "+1day" +%s`

echo $oldday > $keylog

b_num=$[ $RANDOM % 10 ]

for i in `seq 0 4`;do

    read -p "please input a num(0-9): " num

    n=`echo $num |sed -r 's/[0-9]//g'`

    if [ ! -z $n ];then

        echo "your input is not a num."

    elif [ "$num" == "$b_num" ];then

        echo "you are right."

        exit

    fi

done

echo "the right num is $b_num"


回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: