【shell综合使用2】猜拳游戏(石头,剪刀,布)附python对比

首先,对于猜拳的实现,可以用数组,数字来进行直接输入输出,但是要想产生字符串,还是要加一点难度的,本次项目表名,Python更具有一定的优势

首先看一下Python整体代码

一. Python代码

import random as r
f = ["布", "石头", "剪刀"]
while True:
    n = input("猜拳(石头,剪刀,布):")
    a = str(r.randint(0, 2))
    if n == "剪刀":
        n = '2'
    elif n == "石头":
        n = '1'
    elif n == "布":
        n = '0'
    else:
        print("输入有误!")
        exit()
    sys = eval(a)-eval(n)
    if a > n and sys == 1 or sys == -2:
        print(f'系统出了{f[int(a)]}')
        print("you win")
    elif n == a:
        print(f'系统出了{f[int(a)]}')
        print("none winner")
    else:
        print(f'系统出了{f[int(a)]}')
        print("you lose~!")

运行结果:

简单讲两句:

1.import 导入模块 as 后为取的别名,此处为r

2.然后定义序列,此处我用的字符串列表

3.然后利用input获取用户输入并复制给n

4.random模块中调用randint随机产生0到2之间的整数

5.判断输入,并传递参数

6.根据规律可以发现 将剪刀定义为2,石头定义为1,布定义为0中存在规律,在间隔值为1时谁大谁输,间隔为2时也会产生一次,对此进行判断并把结果以数组的形式传递出来,要注意数组里的下标要为int型,所以要进行强制转换,计算中运用了eval函数,可以简单理解为去引号

二.然后下面是shell的代码

1.stty erase ^H的作用是输入错误时可以back回退,因为正常情况下用back会产生一系列的^H

2.思路同Python,但格式要特别注意,多个空格少个空格可能运行不出来

3.利用echo $((RANDOM%3))来随机产生0 1 2的值 如果要产生1-100 为:

echo $((1+RANDOM%100))

4.设定数组定义 剪刀,石头,布

5. $a-$n|bc将两个变量的值递交给bc进行运算

6. if [ ]中的-gt为大于 -eq 等于 对此还有 -lt小于 -ne不等于 -ge 大于等于 le小于等于

7.&&和||为逻辑运算符懂得都懂


#!/bin/bash
stty erase ^H
while [ 1 ]
do
read -p "猜拳(1石头,2剪刀,0布):" n
a=`echo $((RANDOM%3))`
f[0]="布";f[1]="石头";f[2]="剪刀"
if [ $n == "剪刀" ];then
n=2
elif [ $n  == "石头" ];then
n=1
elif [ $n == "布" ];then
n=0
else echo"输入有误!"
fi
sys=`echo "$a-$n"|bc`
if [ $a -gt $n ] && [ $sys -eq 1 ] || [ $sys -eq -2 ];then
        echo -e "系统出了`echo ${f[$a]}`\n you win"
elif [ $n -eq $a ];then
        echo -e "系统出了`echo ${f[$a]}`\n none winner"
else
        echo -e "系统出了`echo ${f[$a]}`\n you lose~!"
fi
done

运行结果如下

 总结:以字符串输入并进行值传递时,要先转换为数值的形式进行传参,以便于运用到数组下标中,以数组的形式输出,否则就要多加判断

猜你喜欢

转载自blog.csdn.net/qq_53521409/article/details/126573822