习题36:设计和调试
If语句的规则
- 每一个“if语句”必须包含一个else。
- 如果这个else永远都不应该被执行到,因为它本身没有任何意义,那你必须在else语句后面使用一个die的函数,让它打印出错误信息并且死给你看,这和上一节的习题类似,这样你可以找到很多的错误。
- “if语句”的嵌套不要超过2层,最好尽量保持只有1层。这意味着如果你在if里边又有了一个if,那你就需要把第二个if移到另一个函数里面。
- 将“if语句”当做段落来对待,其中的每一个if,elif,else组合就跟一个段落的句子组合一样。在这种组合的最前面和最后面留一个空行以作区分。
- 你的布尔测试应该很简单,如果它们很复杂的话,你需要将它们的运算事先放到一个变量里,并且为变量取一个好名字。
第一条,我很是怀疑,只有if难道不成吗?难道是作者在提示我们,if后面最好跟一个else,没有else意义不大,是这个含义吧
循环的规则
- 只有在循环永不停止时使用“while循环”,这意味着你可能永远都用不到。这条只有python中成立,其他的语言另当别论。
- 其他类型的循环都使用“for循环”,尤其是在循环的对象数量固定或者有限的情况下。
break——跳出循环,continue——该轮循环结束,继续下一轮循环
调试(debug)的小技巧
- 不要使用“debugger”。Debugger所作的相当于对病人的全身扫描。你并不会得到某方面的有用信息,而且你会发现它输出的信息态度,而且大部分没有用,或者只会让你更困惑。
- 最好的调试程序的方法是使用print在各个你想要检查的关键环节将关键变量打印出来,从而检查哪里是否有错。
- 让程序一部分一部分地运行起来。不要等一个很长的脚本写完后才去运行它。写一点,运行一点,再修改一点。
这几个总结还是不错,所以抄写了一遍。
这道题,作者的意思是写一个和上一道题目查不到的游戏,我把上道题的逻辑列举一遍,然后自己写一段逻辑出来,大家可以参考一下:
- 请选择左转还是右转
- 左转告诉用户,这间房间门前有只熊,请问用户选择对熊做什么?给熊蜂蜜,熊则抱着蜂蜜开心的走了,于是你有房间住了;对着熊吹口哨,则熊从门前走了,于是你可以开门进房间了,但熊还是在旁边,继续问用户选择对熊做什么,继续吹口哨这时候熊可不耐烦了,就向你扑过来了你挂了,选择开门就可以进入房间,进去后发现,这是一间堆满黄金的屋子,但这个时候熊还是在房间里呀请问你愿意花多少钱租这间房间?让用户输入金额,用户如果不是输入的数字,则提示用户输入有问题,如果输入小于50则输出你不贪婪,这些金子送你了;如果输入大于50,则这件房间不租了;
- 右转可不能了,这间屋子里有个恶魔,请问你是选择逃跑还是选择决斗,逃跑你完了,你跑不了死定了;决斗,才发现这只不过是一个幻想。
def goldRoom():
print("这是一间堆满黄金的屋子!")
while True:
amout = input("请输入您打算花费多少钱租下这间屋子:")
if amout.isdigit():
if int(amout) < 50:
dead("小伙子,你还不算贪婪,孺子可教,这间屋子租给你了。")
else:
dead("你如此贪婪,露宿街头算了。")
else:
print("问你出多少钱,你都不是输入的数字,重新输入!!!")
def bearRoom():
print("这房间门前有只熊......")
bearMoved = False
while True:
next = input("请告诉哥们你要对熊做什么(1、给蜂蜜,2、吹口哨,3、开门):")
if next == "1":
dead("熊得到蜂蜜之后很开心,于是你有房间住了,恭喜恭喜!")
elif next == "2" and not bearMoved:
print("熊走开了......")
bearMoved = True
elif next == "2" and bearMoved:
dead("熊扑向你了,你死定了......")
elif next == "3" and bearMoved:
goldRoom()
else:
print("你输入的啥呀,重新输入!")
def evilRoom():
print("神呐,这间房间可有间恶魔......")
while True:
next = input("请问你选择逃跑还是决斗呢?")
if next == "逃跑":
dead("遇间恶魔,你逃跑有个毛用,你死定了。")
elif next == "决斗":
dead("这才对嘛,恭喜通关!!!")
else:
print("你输入的啥呀,重新输入!")
def dead(why):
print(why, "over!!!")
exit(0)
def run():
print("来,咱玩个游戏吧!\n请问你选择左转还是右转:")
while True:
next = input("1为左转2为右转>>>")
if next == "1":
bearRoom()
elif next == "2":
evilRoom()
else:
print("你输入的啥呀,重新输入!")
run()
print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)