從scratch到python——猜數(shù)游戲

`


之前講解了從scratch到python,基于python turtle庫的實現(xiàn)八秃,講解了用scratch和python turtle繪圖的實現(xiàn)昔驱,以及讓小貓動起來和當角色被單擊的例子舍悯。
本節(jié)課講繼續(xù)探索從scratch到python的道路睡雇,以猜數(shù)游戲為進行講解它抱。

概述

猜數(shù)游戲是一個很經(jīng)典的例子,要開發(fā)一個完整的猜數(shù)游戲祠墅,需要用到編程中的變量歌径、循環(huán)回铛、分支茵肃,獲取用戶輸入等基本知識,還要對邏輯運算有一定的了解捞附。
本文將會帶領(lǐng)大家實現(xiàn)這樣一個小游戲鸟召,游戲開始后药版,讓用戶猜數(shù)字喻犁,如果數(shù)字大于或者小于目標數(shù)字將會給出提示肢础,如果猜對了就讓用戶選擇是否繼續(xù)玩兒下去传轰,如果選擇繼續(xù)慨蛙,開始新一輪游戲;否則游戲結(jié)束跟匆;同時用戶每猜對一次得5分玛臂。

當然還可以更加復雜比如加入時間限制迹冤,因為復雜度高一些就不用了。

分解

其實各國在中小學引入編程教育橱鹏,更多的是讓孩子們從以計算機的方式來考慮問題蚀瘸,培養(yǎng)邏輯思維能力和編程思維,并非是要把所有人都培養(yǎng)成程序員苏章。
編程思維是一個非常重要的概念奏瞬,含義是將以大的問題分解問小的問題硼端,然后逐步解決每個小問題珍昨,最后解決整個問題镣典。
在谷歌教育的公開課中有關(guān)于編程思維的詳細論述,感興趣的老師可以去看一下澎剥,當然我自己也只是看了個開頭哑姚,畢竟推薦讀書的人有時候未必然是讀書的人嘛叙量,但是我知道這是個好東西夕晓。

那么我們就把這個任務分解為以下步驟:

  1. 用一個變量了保存用戶的積分
  2. 生成目標數(shù),在猜數(shù)游戲中目標應該是隨機的析既,同時保存在變量中
  3. 提示用戶猜測數(shù)字眼坏,獲取用戶輸入宰译,并保存在變量中
  4. 判斷用戶輸入沿侈,給出適當?shù)姆答?/li>
  5. 如果用戶猜對了缀拭,加5分填帽,詢問是否繼續(xù)
  6. 如果用戶選擇繼續(xù)篡腌,重復1-5步嘹悼;否則游戲結(jié)束

下面我們按照這個思路來實現(xiàn)這個程序

具體實現(xiàn)

積分變量

首先我們要新建一個變量绘迁,保存分數(shù)缀台,并且初始化為0分

新建score變量
講變量值設(shè)置為9

從現(xiàn)在開始我們就要感受到python的簡潔之美了膛腐,在scratch我們新建積分變量并設(shè)定為0哲身,需要好幾步操作勘天,而在python中只需要一句命令就好了

score = 0

這也是高級語言的特點,Python作為高級語言,代碼量可以說是Java的十分之一,c語言的百分之一;當然對于初學者來說還是是誠然比較容易理解

聲明積分變量之后,我們就要生成要猜測的目標數(shù)字了.

生成目標數(shù)字

目標數(shù)字是個隨機數(shù),是一定范圍之內(nèi)的隨機數(shù),所以我們先來看Scratch和Python都是怎么生成隨機數(shù)的

Scratch隨機數(shù)積木塊

這次Python就需要費點腦筋了,Python有許多別人寫好的完成特定功能的代碼,成為代碼庫,生成隨機數(shù)的代碼庫叫做random,換句話說我們要用生成隨機數(shù)的功能,就需要引入random庫,然后庫中有函數(shù),調(diào)用對應的函數(shù)就可以完成相應的功能

我們要用到的是randomint()函數(shù),比如生成1-10的隨機整數(shù)就是randomint(1, 10)

好,背景交代完畢,下面我們就上手來實現(xiàn)生成隨機數(shù)

target變量
然后把target的值設(shè)定為1到10之間的隨機數(shù)

接下來,我們看Python是如何實現(xiàn)的

import random

score = 0
target = random.randint(1, 10)
print(score, target)
Python的實現(xiàn)

現(xiàn)在,積分變量也有了,也生成要猜測的數(shù)字了,接下來就要提示用戶猜數(shù)字了,用戶不輸入數(shù)字也就沒得玩了,不過似乎可以寫一個猜數(shù)的機器人,用隨機數(shù)來猜測,這又是另外一個程序了

獲取用戶輸入

我們還是以Scratch為例進行講解,在Scratch獲取用戶輸入要用到偵測代碼分類中共的兩個代碼塊

得到用戶的輸入

獲取用戶輸入

當然我們需要新建一個變量,并把用戶的回到放到這個變量里

獲取用戶輸入

而Python中則要用到input()函數(shù),但是有一點要注意的是,input()函數(shù)讀入的數(shù)據(jù)的類型是字符串類型,需要轉(zhuǎn)換成整數(shù),而將字符串轉(zhuǎn)換為整數(shù)要用到int()函數(shù),當然一個嚴格程序這里還需要對輸入進行驗證的,這個等你熟悉了Python之后可以自行完成.

import random

score = 0
target = random.randint(1, 10)
print(score, target)

guess_number = int(input('請輸入你要猜的數(shù)字:'))

判斷用戶輸入對錯

在這里我們就要用到分支結(jié)構(gòu)了,所謂分支結(jié)構(gòu)簡單的來說就是滿足某個條件的時候做某個事情,比如你高考分數(shù)大于700,只要你運氣不是特別被,長得不是特別丑,也不作死基本就能去北大清華了;而如果天氣預報說明天下雨的話,十有八九你是會選擇帶傘出門的,畢竟有的人喜歡淋雨不是.

這里我們就要進行判斷,如果用戶輸入的大于目標數(shù),就提示大了,否則提示小了,這里要用到控制模塊中的分支模塊

分支模塊

同時還會用到數(shù)字和邏輯運算分類中的比大小

比大小

這里涉及了邏輯運算和分支結(jié)構(gòu)兩個知識點,大家還記得嗎?

猜數(shù)程序結(jié)構(gòu)

這樣,用戶第一次輸入的時候,會判斷用戶輸入的數(shù)也就是猜的數(shù)跟目標數(shù)字孰大孰小,如果大了就會提示'大了',如果相等就恭喜,如果小了,就提示'你猜的數(shù)太小了',問題是實際猜測中很難一次就猜中的,所以我們需要反復不停的猜測,如果猜錯了就要重新獲取用戶的輸入,一直到猜對

不停猜測知道猜對

不能往下講了,再往下就要用到循環(huán)了,循環(huán)猜測的過程,我們先不講,回過頭來講python如何實現(xiàn)這一步
首先Python的語法呢,比較有意思,沒有萬惡的大括號,但是有固定的縮寫,雖然tab黨和空格黨有一場世紀之戰(zhàn),但是作為空格的擁泵,大家跟我一樣用空格就好了.Python中if語句的格式是

if expr:
    pass
else:
    pass

注意到了嗎,expr和else后面的語句是有四個空格的,同時:冒號是必不可少的,expr代表的是邏輯表達式,關(guān)于邏輯表達式呢,隨便找一本關(guān)于編程的書都能夠講個五六七八頁,簡單的說就是大小相等的判斷,這里呢就是判斷我們猜的數(shù)和目標數(shù)的大小

import random

score = 0
target = random.randint(1, 10)
print(score, target)

guess_number = int(input('請輸入你要猜的數(shù)字:'))

if guess_number > target:
    print('too big')
elif guess_number = target:
    print('right')
else:
    print('too small')
guess_number = int(input('請輸入你要猜的數(shù)字:'))   
猜數(shù)字

細心的同學們可能注意到了,我用到的判斷和上面說的不一樣啊,雖然不一樣,也差不多啊,想想有什么不一樣,有什么一樣呢?寫了這么多怪累的,就不詳細說了.

這個時候已經(jīng)可以猜數(shù)了,但是只有一次機會,一次之后即便你讀取了用戶猜的數(shù)字,你也沒有反饋的機會了,這樣的游戲肯定是不完整的,雜么辦呢?

循環(huán)

日常生活中,我們會說把課文抄10遍,我們就知道需要重復執(zhí)行抄課文10次,那么在Scratch是有循環(huán)的結(jié)構(gòu)的

重復執(zhí)行

當然如果你想限制猜測的次數(shù)可以用這個,如果在規(guī)定的次數(shù)內(nèi)沒有猜到,就扣分,這也很可以,然而這里我想做的是讓用戶不停的猜測直到猜對為止.
比如隔壁村的王二狗跟俺們村的李翠花約定,在湖邊見面,不見不散,那么王二狗只能一個人孤零零的在湖邊等著,直到俺們村的李翠花到了湖邊,也就是說只有滿足了某個條件,才會執(zhí)行,在這里,就是重復執(zhí)行,直到猜對了,或者說在沒有猜對的情況下,會讓玩家一直猜猜猜.

重復執(zhí)行直到

好,接下來我們繼續(xù)完善我們的程序


看看上面的程序,我們做了改動,用戶第一次猜測之后,就會判斷guess_numbertarget是否相等,如果不相等,就會進入里面的判斷,判斷結(jié)束后引導用戶再猜,直到猜對為止.

改動之后的程序

我對程序做了一些修改,改動了哪里?為什么?這個程序是否可以繼續(xù)優(yōu)化呢?


這里是分割線,思考上述問題5分鐘.

然后我們來看Python要怎么做:
這里用到了while循環(huán),只要條件成立,就一直做

while expr:
    pass

下面是代碼

import random

score = 0
target = random.randint(1, 10)
print(score, target)

guess_number = int(input('請輸入你要猜的數(shù)字:'))

while guess_number != target:
    if guess_number > target:
        print('too big')
    elif guess_number == target:
        print('right')
    else:
        print('too small')

    guess_number = int(input('請輸入你要猜的數(shù)字:'))
print('恭喜你蒙對了')



程序運行結(jié)果

判斷用戶是否繼續(xù)玩

這里就要再次詢問用戶,到這里呢,其實基本的功能已經(jīng)完成了,后面完善成為完整的猜數(shù)游戲呢,還是要用到循環(huán),重復執(zhí)行某些步驟,然后就是給得分變量賦值,你能猜到怎么做嗎?
歡迎大家投稿,過幾天我公布答案.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市未舟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勇哗,老刑警劉巖寸齐,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渺鹦,死亡現(xiàn)場離奇詭異扰法,居然都是意外死亡,警方通過查閱死者的電腦和手機毅厚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門塞颁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吸耿,你說我怎么就攤上這事祠锣。” “怎么了咽安?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵伴网,是天一觀的道長妆棒。 經(jīng)常有香客問我澡腾,道長沸伏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任动分,我火速辦了婚禮毅糟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刺啦。我一直安慰自己留特,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布玛瘸。 她就那樣靜靜地躺著蜕青,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糊渊。 梳的紋絲不亂的頭發(fā)上右核,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音渺绒,去河邊找鬼贺喝。 笑死,一個胖子當著我的面吹牛宗兼,可吹牛的內(nèi)容都是我干的躏鱼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼殷绍,長吁一口氣:“原來是場噩夢啊……” “哼染苛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起主到,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤茶行,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后登钥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畔师,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年牧牢,在試婚紗的時候發(fā)現(xiàn)自己被綠了看锉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡塔鳍,死狀恐怖度陆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情献幔,我是刑警寧澤懂傀,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站蜡感,受9級特大地震影響蹬蚁,放射性物質(zhì)發(fā)生泄漏恃泪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一犀斋、第九天 我趴在偏房一處隱蔽的房頂上張望贝乎。 院中可真熱鬧,春花似錦叽粹、人聲如沸览效。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锤灿。三九已至,卻和暖如春辆脸,著一層夾襖步出監(jiān)牢的瞬間但校,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工啡氢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留状囱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓倘是,卻偏偏與公主長得像亭枷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子搀崭,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容