这个标题是干啥的
那么,猜拳首先无非就是:赢了,输了,平局这三种情况。
如果用列表来表示玩家(左)胜利的三种情况,那就是
[石,剪]
[剪,布]
[布,石]
那么,我的思路就是,把玩家和电脑的出拳弄成这样子:
[玩家,电脑]
对,就是列表,然后跟上面三种情况做比对(==),用if语句分别写出玩家赢,平局的情况,剩下的就是玩家输的情况了。
if 玩家赢
elif 平局
else 玩家输
大概这样子。
然后只需要解决掉亿点小问题就完成啦
import random #为了让电脑随机出数而引用的东西
print('剪刀 = 1 | 石头 = 2 | 布 = 3') #声明一下哪个是哪个
x1 = ord(input('玩家出拳: ')) #ord是取ascii码。我知道肯定会有银想输字母
x2 = random.randint(1,3) #意思是让电脑在1,2,3里面随机出一个
print(f'玩家使用了:{x1-48}\n电脑使用了:{x2}')#本着公平公正公开的原则让大家都看到电脑到底出了啥
l1 = [49,3] #这三个list是玩家获胜的三种情况.
l2 = [51,2] #49,50,51即1,2,3的ascii码
l3 = [50,1] #也可以写成l3 = [ ord(2), 1]
l5 = [x1,x2] #卧槽为什么不是l4?
if 49 <= x1 <= 51 : #保证玩家输入的是123而不是什么奇怪的数值
if l5 == l1 or l5 == l2 or l5 == l3:#通过比较l5与l123是否相等来判断玩家是否获胜
print('玩家赢辽')
elif (x1-48) == x2: #平局是这样的
print('平局嗷')
else: #除了赢、平局,剩下的情况就是玩家输了
print('玩家苏辽')
else: #这就是玩家瞎输入的后果
print('你出你马呢')
大概说一下,
- 因为电脑使用的是随机数(int),所以玩家输入的也得是int
- ord取ascii码是为了避免玩家试图输入字母
- 因为取了ascii码所以后面统一把玩家的数据都按照ascii码来计算。
但是人类有种东西叫猫饼,所以
我就看啊,输出结果是这样的:
这不还得脑内转换一遍吗wdnmd
1,嗯。。。是剪刀哇。2,,,,嗷是石头。嗯,我赢了,是这样子。赢个几把
不行不行太费事了
所以我就想哇,能不能。。。让他输出的时候别输出123,输出博大精深的汉字呢?
欸,所以就有了下面的新版本:
桥豆麻袋
我写着新版本突然想到,能不能让文本慢点出来哇
一下蹦出来一堆字看着不爽
既然下面已经写好出来了玩家出了啥为什么上面还要傻逼兮兮的写一句玩家出拳
emmm所以就有了下面的船新版本:
桥豆麻袋!
我写着船新版本写着写着突然就想到这个猜拳他不是一般都是 、
抱歉。
以下是船新版本:
import random
import os
import time
def sl(): #这个函数意思是延时0.5秒。nice
time.sleep(0.5)
print('剪刀 = 1 | 石头 = 2 | 布 = 3')
sl()
x1 = ord(input('玩家出拳: '))
sl()
os.system('cls') #意思是清屏,上面import os调用的
sl()
x2 = random.randint(1,3)
l1 = [49,3]
l2 = [51,2]
l3 = [50,1]
ll = ['剪刀','石头','布'] #剪刀的下标是0,石头是1,布是2.我不粉lovelive的。真的
l5 = [x1,x2]
if 1 <= (x1-48) <= 3 : #保证玩家输入的是123而不是什么奇怪的数值
s1 = ll[x1-49] #需要保证x1-49得到的值必须是lovelive中元素的下标,否则会报错。
s2 = ll[x2-1] #比如电脑出2,是石头,要-1得到的才是lovelive中石头的下标
print(f'玩家使用了:{s1}') #把这句话挪下来是因为得先定义s1 s2之后才能调用
sl()
print(f'电脑使用了:{s2}')
sl()
if l5 == l1 or l5 == l2 or l5 == l3: #真的没有办法优化这个判断了吗
print('玩家赢辽')
elif (x1-48) == x2:
print('平局嗷dd')
else:
print('玩家苏辽')
else:
print('\n你出你马呢\n')
请注意代码的改变。即使是这样,如果出拳的时候输入两个字符时仍然会报错。
止まるんじゃねぇぞ
但是,
猜拳不得是三局两胜吗?ennnnnh?
だからね,
怎样把它改成三局两胜呢
那,我把之前的代码写成一个函数,比如说round_win()
然后。。。让它循环执行不就好了吗
那么,具体的说,三局两胜就是,玩家或者电脑谁先赢两局。
或者说,谁先拿到2分,游戏就结束。平局不计算分。100局平局也不算
假设玩家的得分是a,电脑是b,用max(a,b)得到最大值,判断是否为2
max(a,b) == 2
以此来决定是否结束游戏。
那么只需要对之前的船新版本做亿点改变即可。
jo等了!
最后的supermotherfuckinglatestversion:
很简洁是不是?
完整版如下:
import random
import os
import time
def sl():
time.sleep(0.5)
m1 = m2 = 0 #m1是玩家得分,m2是电脑得分
def rule(): #代码模块化
global x1,x2 #注意,需要定义全局变量了
print('剪刀 = 1 | 石头 = 2 | 布 = 3')
sl()
x1 = ord(input('玩家出拳: '))
sl()
os.system('cls')
sl()
x2 = random.randint(1,3)
def round1():
rule() #调用rule函数
global m1,m2 #在函数中定义m1,m2为全局变量。这样在函数中修改的值就可以被其他函数引用
l1 = [49,3]
l2 = [51,2]
l3 = [50,1]
ll = ['剪刀','石头','布']
l5 = [x1,x2]
if 0 < (x1-48) < 4 :
s1 = ll[x1-49]
s2 = ll[x2-1]
print(f'玩家使用了:{s1}')
sl()
print(f'电脑使用了:{s2}')
sl()
if l5 == l1 or l5 == l2 or l5 == l3:
print('玩家赢辽')
m1+=1
elif (x1-48) == x2:
print('平局嗷dd')
else:
print('玩家苏辽')
m2+=1
else:
print('\n你出你马呢\n')
sl()
print(f'玩家{m1}分')
sl()
print(f'电脑{m2}分')
sl()
def r3w2(): #三局两胜模块
n = 0 #赋初值
i=0 #计数器,计算回合数
while n != 2: #双方均未达到2分则继续游戏
i+=1
round1()
print(f'第{i}回合结束!\n\n ')
n = max(m1,m2) #更新分数
if m1 > m2: #比较总分,判断最终淫家
print('玩家获胜!')
else:
print('电脑获胜!')
r3w2()
最后的猫病:
- 输入为两个字符时(例如23或aa)会报错。
- 输入为空,即直接按回车会报错。
ahhhhh就这样吧
(懒)