编写一个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("叫你不好好选择,出局吧! ")

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("叫你不好好选择,出局吧! ")
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‘:
正确!


那么以上就是我在编写这段游戏过程中所遇到的错误,希望大家也能积极地写出自己的错误,反思对于学习非常重要!
谢谢大家!
 
 
 

 



原文地址:https://www.cnblogs.com/Masterpaopao/p/10073895.html