實用寶典|如何用Python實現人機猜拳小遊戲

2021-02-08 CDA數據分析師

首先,解釋一下人機猜拳,猜拳相信大家都了解,通俗講就是「石頭、剪刀、布」嘛!再簡單不過的一個小遊戲,而所謂人機猜拳其實就是猜拳的雙方中一方是人另一方是計算機。

問題一

人的問題好解決,計算機怎麼能隨機出拳呢?而且,計算機懂的什麼是石頭什麼是剪刀麼?答案當然是它不懂,計算機不止不懂,還不會出石頭剪刀這類東西,它只認得數字,那麼問題來了,怎樣才能讓它出拳,還要出石頭剪刀布呢?

計算機只有一根筋,但是人類有智慧啊,聰明的人們想了一個辦法:既然計算機只認識數字,那麼我們就用數字代替「石頭、剪刀、布」。ok,這個問題解決了。

問題二

怎樣讓計算機隨機出拳,而不是有規律的出拳?不知道大家有沒有聽說過python有一個專門產生隨機數的庫,叫做random,調用這個庫,python可以根據需求產生一些隨機來。細心的朋友們可能會留意到前邊的一句話中說到「根據需求產生一些隨機數」,什麼叫做根據需求,而且都根據需求產生了,那產生出來的數值還是隨機的麼?

先來段代碼感受下:

import random #導入random庫random.randint(1,10) #生成任意隨機整數,生成範圍在[1,10]之間

結果:8

random.random() #生成一個範圍在[0,1)之間的隨機數

結果:0.8231946484071119

random.randrange(1,10,2) #生成一個範圍從1到10的隨機數,而且步長是2,即生成的隨機數只能是奇數

結果:9

所謂生成符合要求的隨機數指的是什麼,通過代碼一看是不是就很直觀很容易理解了?

既然要指定數值代替「石頭、剪刀、布」,我們就用數字「1,2,3」來代替,所以用random.randint(1,3)就可以,相當於從「1,2,3」三個數字中隨機抽取一個出來。

問題三

出拳的問題解決了,最後一個問題,判斷大小!

正常情況下「1,2,3「之間是有大小關係的,但是」石頭、剪刀、布「之間是一個閉環的關係,即石頭贏過剪刀,剪刀贏過布,布贏過石頭!但是「1,2,3」之間顯然沒有這樣的關係,所以需要人為指定!

這個指定的過程就需要到控制流語句中的if判斷語句:這個語句特別的通俗易懂,if就是如果的意思,也就是如果符合了指定的條件,那麼就執行一個結果;如果不符合第一個條件,但是符合指定的第二個條件,那麼就返回另一個結果.理論上來說不管有多少個條件都可以一直寫下去,當然這只是理論上,一般我們只會設定有限的幾個條件,然後不符合上述所有條件的算作一種情況,返回一個結果。

來!還是通過代碼來理解下:

#判斷銷售業績x = 40 #已知銷售業績為40if x >=50: print("超額完成任務") #如果業績超過50,為超額完成任務elif x >=40: print("完成任務") #如果業績超過40,為完成任務else: print("未完成任務") #其他情況為未完成任務

結果:完成任務

溫馨提示:由於if判斷語句的執行順序從上往下執行,並且一旦有滿足條件的情況發生,後邊的條件判斷語句會被忽略。所以在寫if判斷語句時,注意語句的順序,條件苛刻的語句寫在最前邊,條件寬鬆的語句寫在後邊。

額外問題

其實解決掉前三個問題,一個簡單的人機猜拳就可以被寫出來了,但是會很簡陋,而且只能玩兒一次,不能連續玩兒,每次猜拳結束都要重新啟動遊戲才可以。為了提高遊戲體驗,我們進行一番設置,能夠實現連續遊戲,並且如果不想玩兒了也可以人為終止程序。

這就需要控制流語句中的for循環語句以及打斷循環的語句,用一個小一次性的展現一下for循環以及打斷循環所用到的代碼:

#break 打斷整個循環x = [1,2,3,4] #新建一個列表for i in x: #讓臨時變量i挨個遍歷列表x中的元素 if i == 3: #如果i遍歷到元素3的時候打斷循環 break print(i) #列印臨時變量i

結果:

1

2

實際上打斷循環有兩種方式,上邊一種是徹底打斷循環(break),只要條件符合要求即打斷循環,後邊所有的循環也都不會被執行;還有一種方式是跳過循環(continue),跳過符合條件的那一次循環,後續的循環依然會被執行:

#continue 打斷本次循環x = [1,2,3,4]for i in x: if i == 3: continue print(i)

結果:

1

2

4

對比break和continue的結果,能夠明顯看出兩者的區別!

有了for循環和打斷循環的命令,我們就可以指定遊戲次數,以此來實現連續遊戲!

人機猜拳完整代碼

import randomgesture = ['石頭' , '剪刀', '布']wins = 0print("數字含義 : 1:石頭 ,2:剪刀 ,3:布 ,0:退出遊戲")for i in range(20): user = int(input("請出拳:")) if user ==0: print("退出遊戲") break if user in range(1,4): computer = int(random.randint(1,3)) print("computer出拳:",computer) print("玩家: {0} VS 計算機: {1}".format(gesture[user-1], gesture[computer-1])) if(user == computer): print("兩位心有靈犀,是平局哦") elif(user == 1 and computer == 2) or (user == 2 and computer == 3) or (user == 3 and computer == 1): print("玩家獲勝,電腦弱爆了!") wins = wins + 1 else: print("電腦獲勝,玩家表示不服,要決戰到天亮") else: print("您的出拳不符合規則,請重新出拳")print("兩位交戰 ", i,"次")print("玩家獲勝次數: ", wins,"次")print("玩家獲勝概率:",round(wins/i,2))

運行結果:

數字含義 : 1:石頭 ,2:剪刀 ,3:布 ,0:退出遊戲請出拳:1computer出拳: 2玩家: 石頭 VS 計算機: 剪刀玩家獲勝,電腦弱爆了!請出拳:2computer出拳: 3玩家: 剪刀 VS 計算機: 布玩家獲勝,電腦弱爆了!請出拳:3computer出拳: 1玩家: 布 VS 計算機: 石頭玩家獲勝,電腦弱爆了!請出拳:4您的出拳不符合規則,請重新出拳請出拳:2computer出拳: 2玩家: 剪刀 VS 計算機: 剪刀兩位心有靈犀,是平局哦請出拳:0退出遊戲兩位交戰 5 次玩家獲勝次數: 3 次玩家獲勝概率: 0.6

當然這一版也算不上多完美,有興趣的小可愛可以根據自己的想法繼續完善哦!

相關焦點

  • 如何在Python中實現交互兩個數
    如何在Python中實現交互兩個數【原理】生活中我們要交互兩個杯中的水,小朋友們都知道我們需要再拿一個空杯子來倒換水,今天我們來探索一下python中如何實現交互兩個數【編程】首先我們需要輸入兩個數x=int(input("x="))
  • 用Python 實現手機自動答題,這下百萬答題遊戲誰也玩不過我!
    但是有時候就會想,能不能實現手機自動答題呢,畢竟網絡上是充斥著很多問題的答案,自己手動搜題速度顯然來不及。答案是當然可以,今天我們就來用手機連接電腦,讓電腦自動搜索答案,省時省力省心。基於一些基礎認識,下面我們先來思考下,實現這一項目的整體思路:做這一項目首先會存在以下疑問:1、 我們要讓手機連接電腦,但是怎麼讓電腦自動控制手機呢2、 手機上是顯示文字的,但是怎麼讓電腦看懂你手機上的文字呢3、 電腦知道了問題後如何藉助網絡搜答案呢?
  • 用Python 實現手機自動答題,這下百萬答題遊戲誰也玩不過我
    但是有時候就會想,能不能實現手機自動答題呢,畢竟網絡上是充斥著很多問題的答案,自己手動搜題速度顯然來不及。答案是當然可以,今天我們就來用手機連接電腦,讓電腦自動搜索答案,省時省力省心。3、 電腦知道了問題後如何藉助網絡搜答案呢?
  • 《Python程式設計師面試算法寶典》PDF超清版開源了文末附下載方式
    全面介紹Python程式設計師面試筆試技巧和方法,教你如何以「不變應萬變」。√ 兩萬多行代碼,100多個知識點,全面覆蓋Python程式設計師各類面試題型。√ 15年開發經驗、實戰技巧總結,站在「巨人」的肩膀上,讓學習走捷徑。
  • 人生苦短,我用Python,那麼問題來了,普通人要學python嗎?
    話說在金融和IT行當混跡了多年,python一直是被我隨手拿來當個小工具用用,有時候偷懶用python弄個excel自動化整理工具,有時候拿來上各種網站爬蟲搜集點信息,有時候也會拿來寫點量化小工具。那麼到底什麼是python?
  • 如何用python在工作中「偷懶」?
    (升職加薪了別忘了回來發紅包哦~)那麼如何將這些統統實現呢?我將這些分為以下幾類,大家可以自行評估,各取所需:系統錄入自動化由於你經常需要不斷的將一些信息錄入系統,每一次錄入的過程中你可能需要不斷的點擊一些按鈕,面對這種情況,完全可以寫一個自動腳本,每次代替你來執行這些點擊的行為。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    3遊戲循環和鍵盤事件 4精靈和精靈組 5框架搭建 6背景圖像 7敵人飛機 8英雄飛機 9發射子彈以及碰撞檢測 4部分視頻課程 1網絡編程 2多任務 3web伺服器v3.1 4python高級語法v3.1 5mysql資料庫
  • Python入門小迷宮,走完這個迷宮,就能掌握python編程基礎
    其實,這是一個用python做的迷宮小遊戲,非常簡單,但對於python初學者來說,還是有一定的挑戰性,但TONOW有源碼和教程,只要跟著python迷宮小遊戲的教程和相應的源碼,不僅很容易就能自己開發出這個遊戲,還能在這個過程中,掌握python編程的基礎哦!
  • 投石科技超人氣創意新潮的小裝置花式營銷吸粉
    投石科技超人氣創意新潮的小裝置:口罩印表機、機械臂機械手、微笑吐券機、耳機心聲牆、腦電波控制裝置花式營銷吸粉。一、口罩印表機現階段,口罩成了出門活動的必需品,都養成了戴口罩出門的習慣。二、機械臂互動裝置隨著服務機器人的快速發展,人的手臂與機械臂之間的互動問題變得越來越重要,人機雙臂運動規劃成為實現人機共存的重要一步。投石科技機械臂互動裝置智能控制,手勢捕捉,精準抓取低延時。通過體感識別實現機械臂與人動作同步,讓人在做出抓取動作同時,機械臂完成物體抓取,使人們擁有隔空取物的超能力。
  • Python學習步驟
    了解Python基礎的方方面面, 可以作為Python學習者的「寶典」。同時,穿插了幾個大型實戰項目:1. 坦克大戰遊戲。採用遊戲開發的方式,寓教於樂,快樂中掌握Python基礎。2. 手寫算法和數據結構。
  • 媒體解析20萬元猜拳策略研究重要意義:是博弈論的一項人性研究
    紐約時報曾做了一個小猜拳機器人跟你玩日本東京大學奧石川實驗室研製的一款智慧機器人,它是一隻機械手,能夠與人類玩「石頭剪刀布」遊戲,並且實現全勝戰績。它用高速攝像頭,在1毫秒時間內分析人手形狀,判斷即將做出是何種手勢,然後用機械手做出應對,反應時間只要百萬分之一秒。這個機器人百戰百勝,人類跟它對戰沒有贏得可能性,實際上它是一個後出手的作弊者。日本人研究猜拳的熱情不難理解。名為「jenken」的石頭剪刀布遊戲,實際上是他們的國民娛樂。日本的電視綜藝節目上,明星們精神飽滿,煞有介事地猜拳,比拼勝負。
  • 如何自學成 Python 大神?這裡有些建議
    之所以學習 Python,是因為我想要使用一種可讀性更高並且能夠快速實現原型開發的程式語言(最直接的反映就是程式語言的「print」語句)。 第一階段學習從一開始,我自己非常喜歡用 Python 編寫代碼,因為 Python 語法不僅直接、直觀,而且具有高度的一致性。
  • 如何在 i5 上實現 20 倍的 Python 運行速度?
    安裝: % bash Anaconda2-4.3.0-Linux-x86_64.sh安裝英特爾加速器,作為一個單獨的、可開啟關閉的「環境」:% conda config --add channels intel % conda create --name intelpy intelpython2_full python=2運行示例程序,看到在我的 openSUSE
  • 「吃雞」如何用面相辨別是否是人機?大神拿出一張圖,說出了答案
    上一期小編給大家揭秘了特種做戰模式中被暗改的兩處建築物,一個就是機場的高架另一個則是核電站的大煙囪,而修改之後的外觀都恰巧跟端遊絕地求生建築物的樣子幾乎一模一樣,因此我們猜想或許是和平精英已經開始向端遊方向優化了,具體以後發展的話就只能期待一下啦!那今天小編就繼續給大家分享關於和平精英的的趣事吧!今日主題:如何用面相辨別是否是人機?大神拿出一張圖,說出了答案!
  • 如何在Core i5 上實現 20 倍的 Python 運行速度?
    這在 Windows, Linux 或 OS X 都能實現。英特爾並沒有把 openSUSE 加入經他們測試過的 Linux 配置列表中(SUSE Enterprise 在表中),但我在運行中並沒有遇到任何問題。
  • python條件判斷語句
    python輸入語句 大家已經練習完了輸出之後呢,我們來繼續看一下輸入語句的用法 input 如果我們再加一些條件 如果是大於等於90並且小於等於100,為A級;如果是大於等於80並且小於90,等級為B 我們不用elif,我們先用if
  • 用Python實現職工信息管理系統
    想要實現一個職工管理系統首先我們看一下想要實現什麼功能最基礎的增刪改查肯定要實現的然後增加一下數據顯示、數據排序、數據統計功能下面直接上代碼1.增加職工數據```python# 接收用戶收入id = input('請輸入職工號')name = input('請輸入姓名')sex = input('請輸入性別')age = input('請輸入年齡')education = input('請輸入學歷')address = input
  • Blender遊戲引擎的 Python 腳本
    您將學習如何在 Blender 中使用 Python 腳本用腳本調整車輛移動,加速,停車。請記住,汽車只是用作使用 Python 的示例。本教程將教您 Blender 遊戲引擎的 Python 腳本基礎知識,包括通過腳本訪問和更改邏輯信息。即使您對 Python 有所了解,本教程也很容易理解。
  • 用Python實現簡易超市售貨系統
    今天來實現一個簡單的超市售貨系統數據存儲形式為json的數據首先是讀取數據,這裡用到的Python的json庫,用於處理json類型的數據```pythondef load(): # 數據讀取j = open('goods.txt', 'r', encoding='utf-8')# 逐行讀取文件中的數據
  • Python開發者必知的 11 個 Python GUI 庫,你用過幾個?
    Python開發者必知的 11 個 Python GUI 庫,你用過幾個? 當你使用python編寫應用程式時,你就一定要使用GUI。Python GUI的選擇有很多。目前來說,Python GUI程序庫有30多個跨平臺框架。現在就列出其我認為最好的11個.