python猜拳小遊戲,十多行代碼搞定,一個很短的寫法

*簡單的用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中的兩個數進行求和。

求和結果爲13時,玩家和電腦出的組合有兩種:

  • [0, 1], [1, 0][1, 2], [2, 1]

  • 也就是剪刀[0]、石頭[1]石頭[1]、布[2] 的不同順序組合,兩種組合中都是數字大的贏。

所以接下來index函數配合max函數找到組合中最大的數字的下標,其對應的就是本場勝者的下標。

  • 求和結果爲2時只有一種組合:
  • [0, 2], [2, 0]

也就是剪刀[0], 布[2] 的不同順序組合,這裏是數字小的勝。按照相同的方法找到數字最小者的下標返回即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章