1. 程式人生 > >編寫一個if/elif/else功能的遊戲

編寫一個if/elif/else功能的遊戲

相信大家已經寫出了if/elif/else功能的遊戲,詳細內容請看我之前的文章。

python基礎彙總(三):https://www.cnblogs.com/Masterpaopao/p/10035513.html

那麼我寫的是一個教育遊戲,是關於要不要讓你的孩子學程式設計的一個答題遊戲。

from sys import exit

def start():
print("歡迎來到《這就是教育》節目現場!")
print("大家好,我是主持人Master跑跑!")
print("那麼今天進入正題,我們來看看這一道題目:")
print('''
你的工作是一名程式設計師。
這一天,風和日麗。

當你下班的時候,看見自己的女兒對著自己的電腦發楞。
並眨著眼睛對你說:“爸爸,我想學程式設計!”
這個時候,你的反應會是如何?
A.好啊!於是你重新打起精神,開始在電腦旁教她“hello world”。
B.行啊!但你從心裡認為她只是說說而已,沒有放在心裡。
C.不行!你對自己的女兒說不想讓她入坑程式設計,容易掉髮傷身。
''')
select1=input('你的選擇是:')
if select1 == 'A' or select1=='a':
door_A()
elif select1 =='B' or select1=='b':

door_B()
elif select1 == 'C' or select1=='c':
door_C()
else:
dead("叫你不好好選擇,出局吧!\n")

def door_A():
while True:
print('''
女兒成功打印出'hello world'之後,興奮地雀躍……
許多年後……
你看著女兒的程式設計能力越來越強,卻有一個困擾在你的心頭。
為了學習程式設計的她,學習成績一直是班級的後遊,眼下高考即將來臨……

這時候你的選擇是?
A.讓她放棄正在做的事,嚴厲命令她專心備戰高考,上一個好的平臺。
B.你鼓勵她繼續完成程式設計專案,高考努點力上個本科。
''')
select2 = input('你的選擇是:')
if (select2 == 'A' or select2 == 'a'):
print('''
你的女兒不情願地停止了程式設計,開始備戰高考……
但每到夜深人靜的時候,還是忍不住偷偷地程式設計。
由於精力不足,最終你的女兒上了湖北工業大學,一所普通的雙非大學……
多年以後,你的女兒畢業了,成為了一名普通的程式設計師……
你兩眼汪汪,看著女兒出嫁……留下了老父親的淚水。
''')
success("你順利完成了本題!")

elif (select2 == 'B' or select2 == 'b'):
print('''
你的女兒受到了鼓舞,繼續了沒日沒夜的程式設計生活……
高考那一天終於來臨……
令你欣慰的是,女兒還算聰穎,成功考上了江漢大學……
這個時候,令你想不到的是你收到了來自華中科技大學計算機院的教授來信……
在信中,教授誇讚了你女兒的程式設計天賦,願意給一次自主招生的機會。
令你苦惱的是,給的這次自主招生機會和正規程式沒有什麼區別,你的女兒沒有資格……
這時候你要做出選擇:
A.狠下心花上萬元編造了你女兒的相關獲獎證書,又送了幾千元的菸酒送給了那位教授。
B.你的工資不夠高,思來索去,放棄了這次自主招生考試。
''')
select3 = input('你的選擇是:')
if (select3 == 'A' or select3 == 'a'):
print('''
你女兒終於順利地通過了自主招生考試資格檢查。
她坐在考場中,兩眼望著窗戶邊的你,露出了自信的眼神。
此時的你已經身份無文,但你的心裡充滿了驕傲……
最終,你的女兒在語數理三門考試中發揮平平,但在專業考試中,
你女兒的程式設計能力一鳴驚人,以39分鐘的成績完成了考試要求的專案。
震驚了在場所有的考生和考官……
許多年以後,你女兒從華中科技大學計算機院順利地畢業。
收到了來自各個頂尖行業的百萬offer……
''')
success("你找到了最完美的通關方式!")
elif (select3 == 'B' or select3 == 'b'):
print('''
你的女兒最終唸了江漢大學。
憑藉著你女兒的程式設計天賦,被江漢大學計算機院重視起來。
你的女兒在大學四年期間,就已經靠著程式設計能力賺了幾十萬元。
最終,你的女兒選擇了考研,想要更高的學歷……
三年之後,你的女兒從武漢理工大學研究生畢業。
收到了來自騰訊和阿里的五十萬年薪offer……
''')
success("你順利地通關了!")
else:
print("請你正確輸入,遵循遊戲規則。")
door_A()

else:
print("請你遵循遊戲的規則,再給你一次機會!")
door_A()

def door_B():
pass

def door_C():
pass

def dead(why):
print('很遺憾!',why)
exit(0)

def success(why):
print('祝賀你!',why)
exit(0)

start()
print("感謝來到《這就是教育》的節目現場!")


很顯然,由於我的時間有限,我只能寫A門部分的程式碼,B門和C門我就忽略跳過了。
還是往常的慣例,我先放出完美的通關方式。(加粗的部分是輸入的資料)
輸出結果:

歡迎來到《這就是教育》節目現場!
大家好,我是主持人Master跑跑!
那麼今天進入正題,我們來看看這一道題目:

你的工作是一名程式設計師。
這一天,風和日麗。
當你下班的時候,看見自己的女兒對著自己的電腦發楞。
並眨著眼睛對你說:“爸爸,我想學程式設計!”
這個時候,你的反應會是如何?
A.好啊!於是你重新打起精神,開始在電腦旁教她“hello world”。
B.行啊!但你從心裡認為她只是說說而已,沒有放在心裡。
C.不行!你對自己的女兒說不想讓她入坑程式設計,容易掉髮傷身。

你的選擇是:a

女兒成功打印出'hello world'之後,興奮地雀躍……
許多年後……
你看著女兒的程式設計能力越來越強,卻有一個困擾在你的心頭。
為了學習程式設計的她,學習成績一直是班級的後遊,眼下高考即將來臨……
這時候你的選擇是?
A.讓她放棄正在做的事,嚴厲命令她專心備戰高考,上一個好的平臺。
B.你鼓勵她繼續完成程式設計專案,高考努點力上個本科。

你的選擇是:C                                      #第一次輸錯
請你遵循遊戲的規則,再給你一次機會!            

女兒成功打印出'hello world'之後,興奮地雀躍……
許多年後……
你看著女兒的程式設計能力越來越強,卻有一個困擾在你的心頭。
為了學習程式設計的她,學習成績一直是班級的後遊,眼下高考即將來臨……
這時候你的選擇是?
A.讓她放棄正在做的事,嚴厲命令她專心備戰高考,上一個好的平臺。
B.你鼓勵她繼續完成程式設計專案,高考努點力上個本科。

你的選擇是:B

你的女兒受到了鼓舞,繼續了沒日沒夜的程式設計生活……
高考那一天終於來臨……
令你欣慰的是,女兒還算聰穎,成功考上了江漢大學……
這個時候,令你想不到的是你收到了來自華中科技大學計算機院的教授來信……
在信中,教授誇讚了你女兒的程式設計天賦,願意給一次自主招生的機會。
令你苦惱的是,給的這次自主招生機會和正規程式沒有什麼區別,你的女兒沒有資格……
這時候你要做出選擇:
A.狠下心花上萬元編造了你女兒的相關獲獎證書,又送了幾千元的菸酒送給了那位教授。
B.你的工資不夠高,思來索去,放棄了這次自主招生考試。

你的選擇是:                      #第二次輸錯
請你正確輸入,遵循遊戲規則。

女兒成功打印出'hello world'之後,興奮地雀躍……
許多年後……
你看著女兒的程式設計能力越來越強,卻有一個困擾在你的心頭。
為了學習程式設計的她,學習成績一直是班級的後遊,眼下高考即將來臨……
這時候你的選擇是?
A.讓她放棄正在做的事,嚴厲命令她專心備戰高考,上一個好的平臺。
B.你鼓勵她繼續完成程式設計專案,高考努點力上個本科。

你的選擇是:b

你的女兒受到了鼓舞,繼續了沒日沒夜的程式設計生活……
高考那一天終於來臨……
令你欣慰的是,女兒還算聰穎,成功考上了江漢大學……
這個時候,令你想不到的是你收到了來自華中科技大學計算機院的教授來信……
在信中,教授誇讚了你女兒的程式設計天賦,願意給一次自主招生的機會。
令你苦惱的是,給的這次自主招生機會和正規程式沒有什麼區別,你的女兒沒有資格……
這時候你要做出選擇:
A.狠下心花上萬元編造了你女兒的相關獲獎證書,又送了幾千元的菸酒送給了那位教授。
B.你的工資不夠高,思來索去,放棄了這次自主招生考試。

你的選擇是:a

你女兒終於順利地通過了自主招生考試資格檢查。
她坐在考場中,兩眼望著窗戶邊的你,露出了自信的眼神。
此時的你已經身份無文,但你的心裡充滿了驕傲……
最終,你的女兒在語數理三門考試中發揮平平,但在專業考試中,
你女兒的程式設計能力一鳴驚人,以39分鐘的成績完成了考試要求的專案。
震驚了在場所有的考生和考官……
許多年以後,你女兒從華中科技大學計算機院順利地畢業。
收到了來自各個頂尖行業的百萬offer……

祝賀你! 你找到了最完美的通關方式!

 

雖然輸出的過程很長,但還是能發現我的程式碼的一些問題。

在輸出的過程中,我輸錯了兩次。

第一次輸錯的過程是在高考的選擇,我們可以看到,選擇又變回了高考前。

第二次輸錯顯然就是程式碼的問題,我們可以看到,自主招生的選擇輸錯之後,選擇卻回到了高考前。

說明程式碼還不夠好,需要得到優化。優化的結果應該是:

自主招生選擇錯了之後,應該重新回到自主選擇,而非高考前。

那麼,我的意思其實很明顯了已經,因為我那篇文章確實提到了這樣的功能。

我們來回顧一下那段程式碼是如何實現功能的:

這段程式碼的處理方式非常巧妙,設立了一個真假引數,然後把所有的設定並列起來,分別and不同的真假。

這樣的處理方式可以解決我所遇到的問題,不管哪個位置輸入錯了,都不用受到重新面臨幾次選擇的困擾。

所以,我將A門中的第一次B選擇後的程式碼進行了優化處理:

 

from sys import exit

def start():
print("歡迎來到《這就是教育》節目現場!")
print("大家好,我是主持人Master跑跑!")
print("那麼今天進入正題,我們來看看這一道題目:")
print('''
你的工作是一名程式設計師。
這一天,風和日麗。
當你下班的時候,看見自己的女兒對著自己的電腦發楞。
並眨著眼睛對你說:“爸爸,我想學程式設計!”
這個時候,你的反應會是如何?
A.好啊!於是你重新打起精神,開始在電腦旁教她“hello world”。
B.行啊!但你從心裡認為她只是說說而已,沒有放在心裡。
C.不行!你對自己的女兒說不想讓她入坑程式設計,容易掉髮傷身。
''')
select1=input('你的選擇是:')
if select1 == 'A' or select1=='a':
door_A()
elif select1 =='B' or select1=='b':
door_B()
elif select1 == 'C' or select1=='c':
door_C()
else:
dead("叫你不好好選擇,出局吧!\n")
def door_A():
    print('''
女兒成功打印出'hello world'之後,興奮地雀躍……
許多年後……
你看著女兒的程式設計能力越來越強,卻有一個困擾在你的心頭。
為了學習程式設計的她,學習成績一直是班級的後遊,眼下高考即將來臨……
這時候你的選擇是?
A.讓她放棄正在做的事,嚴厲命令她專心備戰高考,上一個好的平臺。
B.你鼓勵她繼續完成程式設計專案,高考努點力上個本科。
''')

thing = False
while True:
select2 = input('你的選擇是:')
if (select2=='A'or select2=='a') and not thing:
print('''
你的女兒不情願地停止了程式設計,開始備戰高考……
但每到夜深人靜的時候,還是忍不住偷偷地程式設計。
由於精力不足,最終你的女兒上了湖北工業大學,一所普通的雙非大學……
多年以後,你的女兒畢業了,成為了一名普通的程式設計師……
你兩眼汪汪,看著女兒出嫁……留下了老父親的淚水。
''')
success("你順利完成了本題!")
elif(select2 == 'B' or select2 == 'b')and not thing:
print('''
你的女兒受到了鼓舞,繼續了沒日沒夜的程式設計生活……
高考那一天終於來臨……
令你欣慰的是,女兒還算聰穎,成功考上了江漢大學……
這個時候,令你想不到的是你收到了來自華中科技大學計算機院的教授來信……
在信中,教授誇讚了你女兒的程式設計天賦,願意給一次自主招生的機會。
令你苦惱的是,給的這次自主招生機會和正規程式沒有什麼區別,你的女兒沒有資格……
這時候你要做出選擇:
A.狠下心花上萬元編造了你女兒的相關獲獎證書,又送了幾千元的菸酒送給了那位教授。
B.你的工資不夠高,思來索去,放棄了這次自主招生考試。
''')
thing =True
elif(select2=='A'or select2=='a')and thing:
print('''
你女兒終於順利地通過了自主招生考試資格檢查。
她坐在考場中,兩眼望著窗戶邊的你,露出了自信的眼神。
此時的你已經身份無文,但你的心裡充滿了驕傲……
最終,你的女兒在語數理三門考試中發揮平平,但在專業考試中,
你女兒的程式設計能力一鳴驚人,以39分鐘的成績完成了考試要求的專案。
震驚了在場所有的考生和考官……
許多年以後,你女兒從華中科技大學計算機院順利地畢業。
收到了來自各個頂尖行業的百萬offer……
''')
success("你找到了最完美的通關方式!")
elif(select2 == 'B' or select2 == 'b') and thing :
print('''
你的女兒最終唸了江漢大學。
憑藉著你女兒的程式設計天賦,被江漢大學計算機院重視起來。
你的女兒在大學四年期間,就已經靠著程式設計能力賺了幾十萬元。
最終,你的女兒選擇了考研,想要更高的學歷……
三年之後,你的女兒從武漢理工大學研究生畢業。
收到了來自騰訊和阿里的五十萬年薪offer……
''')
success("你順利地通關了!")
else:
print("請你遵循遊戲規則,輸入正確的選擇。")


def door_B():
pass

def door_C():
pass

def dead(why):
print('很遺憾!', why)
exit(0)

def success(why):
print('祝賀你!', why)
exit(0)

start()
print("感謝來到《這就是教育》的節目現場!")


從執行結果來看,這段程式碼已經優化成功了。
優化後的程式碼,在你每次輸錯選項的時候,都能保持在當前的選擇,繼續作答。
所以,一段if/elif/else的程式碼遊戲總算是編寫出來了。
但是,永遠都不要無視自己編碼中遇到的錯誤,錯誤也也會發光。

①對While True:定義不明確。
本來在程式碼中,thing=False是放在While True:下面的。
後來我發現,在選擇鼓勵她進行程式設計後怎麼也進行不到下一個選擇。
後來發現我每次迴圈的過程中thing的值都會變成False,不可能會改變成True的……
所以將thing=False移到while True:上面之後,解決了第一個BUG。

②分不清or 和and。
當時我的第三個elif是這樣編寫的:
elif(select2=='A'or select2=='a')or thing:
後來我無論輸錯了還是輸對了,列印的全都是第三個elif程式碼塊的結果。
當我發現我寫的是or而不是and的時候,我抽了自己一巴掌……
thing的值是True,無論你輸入什麼,elif判斷的肯定都是正確啊!
於是修正過來,解決了第二個BUG。
elif(select2=='A'or select2=='a')and thing:

③對布林演算法句子的正確填寫沒有b數。
當初我寫的是這樣的:
if select1==‘A’ or ‘a’:
然後在後面半個小時的時間裡,我的程式碼一直瘋狂報錯。
於是我就發現這個愚蠢的計算機是識別為:
if (select1==‘A’)or ‘A’:
遂修改成:
if select1==(‘A’ or ‘a'):
又他媽瘋狂報錯了,誤導我認為並不是這一句的問題。
於是我就浪費了十幾分鐘的美好光陰……
後來,我終於又改了一次:
if select1 ==’A‘ or select1 ==’a‘:
……
尼瑪!執行成功了!什麼垃圾python!
行吧,所以同學們啊,要記住我慘痛的教訓。
python布林演算法句子的正確寫法就是完整的這種寫法。
if select1==‘A’ or ‘a’:
if select1==(‘A’ or ‘a'):
錯誤!
if select1 ==’A‘ or select1 ==’a‘:
正確!


那麼以上就是我在編寫這段遊戲過程中所遇到的錯誤,希望大家也能積極地寫出自己的錯誤,反思對於學習非常重要!
謝謝大家!