*簡單的用python實現和電腦玩猜拳
……只是娛樂一下,看看最少能用幾行代碼寫出來)
先上代碼,非常短
import random
def judgement(plat): # 判斷遊戲結果
if plat.count(plat[0]) > 1: # 平局
return 2
return plat.index(max(plat)) if sum(plat) in (1,3) else plat.index(min(plat))
def play():
base = ('剪刀','石頭','布')
print('輪到你出了!\n')
for i,n in enumerate(base): # 打印選項
print(f'[{i}] {n}')
player = int(input('輸入序號選擇:')) # 玩家出
computer = random.randint(0, 2) # 電腦出
print(f'\n- 你出了[{base[player]}]!\n- 電腦出了[{base[computer]}]!')
winner = judgement([player, computer])
print('\n本局是' + ('你贏了!','電腦贏了!','平局~')[winner]) # 結果
play() # 開始玩
玩起來是這樣的
輪到你出了!
[0] 剪刀
[1] 石頭
[2] 布
輸入序號選擇:1
- 你出了[剪刀]!
- 電腦出了[石頭]!
本局是電腦贏了~
閒得沒事幹,接下來寫點廢話
說一下思路:
- 玩家輸入數字0, 1, 2來代表是出剪刀、石頭還是布
- 電腦用python自帶的隨機庫來隨機出一個數字
函數judgement
用於判斷輸贏:
傳進來的參數是一個列表plat
:[玩家出的數字,電腦出的數字]
- 用
count
函數統計列表中是否有出現一樣的數字,如果有,那麼這局就是平局(比如剪刀對剪刀,石頭對石頭)。
如果無重複數字,程序接着運行。
- 經過上面的步驟,程序已經排除了平局的情況,所以可以用
sum
函數對列表plat
中的兩個數進行求和。
求和結果爲1
或3
時,玩家和電腦出的組合有兩種:
-
[0, 1], [1, 0]
或[1, 2], [2, 1]
-
也就是
剪刀[0]、石頭[1]
或石頭[1]、布[2]
的不同順序組合,兩種組合中都是數字大的贏。
所以接下來index
函數配合max
函數找到組合中最大的數字的下標,其對應的就是本場勝者的下標。
- 求和結果爲2時只有一種組合:
[0, 2], [2, 0]
也就是剪刀[0], 布[2]
的不同順序組合,這裏是數字小的勝。按照相同的方法找到數字最小者的下標返回即可。