练习36--设计和调试
一 if语句的规则
1. 每一个“if 语句”必须包含一个 else。
2. 如果这个 else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在 else语句后面使用一个叫做 die 的函数,让它打印出错误信息并且死给你看,就像我们上节课做的那样,按照这个思路你可以找到很多错误。
3. “if 语句”的嵌套不要超过 2 层,最好尽量保持只有 1 层。
4. 把“if 语句”当做段落来对待,其中的每一个 if, elif, else 就跟段落中的句子一样。在每句前后留一个空行以作区分。
5. 你的布尔测试应该很简单,如果它们很复杂的话,你需要将它们的运算事先放到一个变量里,并且为变量取一个好名字。
二 循环的规则
1. 只有在循环永不停止时使用“while循环”,这意味着你可能永远都用不到。这条只有Python 中成立,其他的语言另当别论。
2. 其他类型的循环都使用“for循环”,尤其是在循环的对象数量固定或者有限的情况下。
三 调试建议
1. 不要使用调试器(“debugger”)。调试器所做的相当于对病人的全身扫描。你并不会得到某方面的有用信息,而且你会发现它输出的信息太多,而且大部分没有用,或者只会让你更加困惑。
2. 最好的调试程序的方法是用 print 在每个你想要检查的关键环节将关键变量打印出来,从而检查那里是否有错。
3. 让程序一部分一部分地运行起来。不要等一个很长的脚本写完后才去运行它。写一点,运行一点,再修改一点。
四 课后作业
写软件最好的方式是把它分解成很多小任务来完成:
1. 在一张纸或者索引卡片上,写上要完成这个软件你需要做的任务列表,这就是你的
待办事项。
2. 从任务列表上找到对你来说最容易的一个任务。
3. 在你的源文件上用注释的方式写下你要用代码实现它的思路指南。
4. 在你的注释下面写代码。
5. 写完就执行脚本看看你的写的代码能否正常运行。
6. 坚持这样的过程:写代码、运行测试、修改代码,知道它能正常运行。
7. 完成后给这项任务打勾,然后找下一个最容易的任务,重复上述步骤。
五 设计的程序
一个猜书名的程序,很鸡肋(就一些简单的输入输出和判断),以后慢慢加内容吧,文本下载地址:https://i.cnblogs.com/files
1 # -*- coding:utf-8 -*- 2 def MemoryOfScatteredStars(): 3 filename = open("散落星河的记忆.txt") 4 string = filename.read() 5 print(f"{string}\n") 6 filename.close() 7 8 def LoveYouLikeLovingLife(): 9 filename = open("爱你就像爱生命.txt") 10 string = filename.read() 11 print(f"{string}\n") 12 filename.close() 13 14 def BlowingAwayTheDustFromMyHeart(): 15 filename = open("轻轻吹去心上的灰尘.txt") 16 string = filename.read() 17 print(f"{string}\n") 18 filename.close() 19 20 def OneHundredYearsOfSolitude(): 21 filename = open("百年孤独.txt") 22 string = filename.read() 23 print(f"{string}\n") 24 filename.close() 25 26 def ADreamOfRedMansions(): 27 filename = open("红楼梦.txt") 28 string = filename.read() 29 print(f"{string}\n") 30 filename.close() 31 32 def TheGoldenAge(): 33 filename = open("黄金时代.txt") 34 string = filename.read() 35 print(f"{string}\n") 36 filename.close() 37 38 def DragonRaja(): 39 filename = open("龙族.txt") 40 string = filename.read() 41 print(f"{string}\n") 42 filename.close() 43 44 def NorwegianWood(): 45 filename = open("挪威的森林.txt") 46 string = filename.read() 47 print(f"{string}\n") 48 filename.close() 49 50 def TheThreeBodyProblem(): 51 filename = open("三体.txt") 52 string = filename.read() 53 print(f"{string}\n") 54 filename.close() 55 56 def typeFavourite(): 57 #while 1 : 58 print("|----小寻很开心您来到小寻的专属乐园----|") 59 print("|---小寻为您准备了三本小寻最喜欢的书---|\n") 60 print("如果想重新选择您熟悉的类别,您可以输入1、2、3以外的任意数字返回上一层") 61 num = int(input("请输入1、2、3选择阅读一本书的部分内容:")) 62 # print("如果不喜欢上述选择的话,您可以输入4来重新选择一本书") 63 64 if num == 1: 65 MemoryOfScatteredStars() 66 elif num == 2: 67 LoveYouLikeLovingLife() 68 elif num == 3: 69 BlowingAwayTheDustFromMyHeart() 70 # elif num ==4: 71 # exit() 72 else: 73 print("输入错误,请重新输入") 74 return # 怎么返回到这个函数本身? 75 76 print("现在来猜猜书名吧,你可以输入数字进行选择:") 77 print("|-----1:《散落星河的记忆》-----|") 78 print("|---2:《轻轻吹去心上的灰尘》---|") 79 print("|-----3:《爱你就像爱生命》-----|") 80 print("|---------4:《白夜行》---------|") 81 print("|-----5:《霍乱时期的爱情》-----|\n") 82 guess = int(input("请输入您的选择:")) 83 if num == 1 and guess == 1: 84 print("恭喜您猜对啦\n") 85 elif num == 2 and guess == 3: 86 print("恭喜您猜对啦\n") 87 elif num == 3 and guess == 2: 88 print("恭喜您猜对啦\n") 89 elif num == 1 and guess != 1: 90 print("猜错啦,正确答案是:《散落星河的记忆》\n") 91 elif num == 2 and guess != 3: 92 print("猜错啦,正确答案是:《爱你就像爱生命》\n") 93 elif num == 3 and guess != 2: 94 print("猜错啦,正确答案是:《轻轻吹去心上的灰尘》\n") 95 else: 96 exit(0) 97 98 def typeClassic(): 99 print("|-----------欢迎来到经典书籍大学堂-----------|") 100 print("|---小寻给您提供了三本经典书籍,希望您喜欢---|\n") 101 print("如果想重新选择您熟悉的类别,您可以输入1、2、3以外的任意数字返回上一层") 102 num = int(input("请输入1、2、3选择阅读一本书的部分内容:")) 103 104 if num == 1: 105 OneHundredYearsOfSolitude() 106 elif num == 2: 107 ADreamOfRedMansions() 108 elif num == 3: 109 TheGoldenAge() 110 else: 111 print("输入错误,请重新输入") 112 return 113 114 print("现在来猜猜书名吧,你可以输入数字进行选择:") 115 print("|-----1:《百年孤独》-----|") 116 print("|------2:《红楼梦》------|") 117 print("|-----3:《黄金时代》-----|") 118 print("|--------4:《飘》--------|") 119 print("|----5:《日瓦戈医生》----|\n") 120 guess = int(input("请输入您的选择:")) 121 if num == 1 and guess == 1: 122 print("恭喜您猜对啦\n") 123 elif num == 2 and guess == 2: 124 print("恭喜您猜对啦\n") 125 elif num == 3 and guess == 3: 126 print("恭喜您猜对啦\n") 127 elif num == 1 and guess != 1: 128 print("猜错啦,正确答案是:《百年孤独》\n") 129 elif num == 2 and guess != 2: 130 print("猜错啦,正确答案是:《红楼梦》\n") 131 elif num == 3 and guess != 3: 132 print("猜错啦,正确答案是:《黄金时代》\n") 133 else: 134 exit(0) 135 136 def typeNovel(): 137 print("|----------欢迎来到小说大杂烩的世界----------|") 138 print("|---小寻给您提供了三本流行小说,希望您喜欢---|\n") 139 print("如果想重新选择您熟悉的类别,您可以输入1、2、3以外的任意数字返回上一层") 140 num = int(input("请输入1、2、3选择阅读一本书的部分内容:")) 141 142 if num == 1: 143 DragonRaja() 144 elif num == 2: 145 NorwegianWood() 146 elif num == 3: 147 TheThreeBodyProblem() 148 else: 149 print("输入错误,请重新选择:") 150 return 151 152 print("现在来猜猜书名吧,你可以输入数字进行选择:") 153 print("|-------1:《龙族》-------|") 154 print("|----2:《挪威的森林》----|") 155 print("|-------3:《三体》-------|") 156 print("|-------4:《撒野》-------|") 157 print("|-----5:《斗破苍穹》-----|\n") 158 guess = int(input("请输入您的选择:")) 159 if num == 1 and guess == 1: 160 print("恭喜您猜对啦\n") 161 elif num == 2 and guess == 2: 162 print("恭喜您猜对啦\n") 163 elif num == 3 and guess == 3: 164 print("恭喜您猜对啦\n") 165 elif num == 1 and guess != 1: 166 print("猜错啦,正确答案是:《龙族》\n") 167 elif num == 2 and guess != 2: 168 print("猜错啦,正确答案是:《挪威的森林》\n") 169 elif num == 3 and guess != 3: 170 print("猜错啦,正确答案是:《三体》\n") 171 else: 172 exit(0) 173 174 def over(): 175 print("|--- 感谢使用猜书名程序 ---|\n") 176 exit() 177 178 def main(): 179 180 while 1: 181 print("|-----欢迎使用猜书名程序-----|") 182 print("|-----1.作者最喜欢的书籍-----|") 183 print("|----2.国内外经典名著一览----|") 184 print("|-------3.流行小说串烧-------|") 185 print("|----- 4.退出猜书名程序 -----|\n") 186 num = int(input("请选择您最熟悉的书籍类型:")) 187 188 if num == 1: 189 typeFavourite() 190 elif num ==2: 191 typeClassic() 192 elif num == 3: 193 typeNovel() 194 elif num == 4: 195 print("小寻会继续努力扩展游戏内容,感谢大家一直关注呀!") 196 over() 197 else: 198 print("您输入的选择不正确,请重新输入:") 199 200 main()