首先,对于猜拳的实现,可以用数组,数字来进行直接输入输出,但是要想产生字符串,还是要加一点难度的,本次项目表名,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
运行结果如下
总结:以字符串输入并进行值传递时,要先转换为数值的形式进行传参,以便于运用到数组下标中,以数组的形式输出,否则就要多加判断