• 编写一个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‘:
    正确!


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

     



  • 相关阅读:
    在dotnet下用c#编写下载器(转载)
    hdu 1176
    hdu 1231(最大连续子序列)
    hdu 2571
    hdu 1087(最大递增子序列)
    hdu 1506(dp)
    hdu 1069
    hdu 2084(数塔经典dp)
    hdu 2602(01背包)
    hdu 1505
  • 原文地址:https://www.cnblogs.com/Masterpaopao/p/10073895.html
Copyright © 2020-2023  润新知