猜字谜游戏bug修复
还记得我们在python的while循环的那一节当中开发了一个简单的猜字游戏实例吗?在示例解析当中,我们提到了游戏代码中有一个bug,不知道大家尝试修复了没有,现在鄙人就将修复完的代码发布到这里:
import random
md = random.randint(0,100)
start = 0
end = 100
inp = int(input('从%s到%s猜一个数字:' %(start, end)))
while start > inp or end < inp:
inp = int(input('请重新输入从%s到%s猜一个数字:' %(start, end)))
while start <= inp <= end:
if inp < md:
start = inp
inp = int(input('从%s到%s猜一个数字:' %(start,end)))
while start > inp or end < inp:
inp = int(input('请重新输入从%s到%s猜一个数字:' %(start, end)))
elif inp > md:
end = inp
inp = int(input('从%s到%s猜一个数字:' %(start,end)))
while start > inp or end < inp:
inp = int(input('请重新输入从%s到%s猜一个数字:' %(start, end)))
else:
print('恭喜你中奖了')
break
————————————————————————————————————
从0到100猜一个数字:-1
请重新输入从0到100猜一个数字:101
请重新输入从0到100猜一个数字:5
从5到100猜一个数字:3
请重新输入从5到100猜一个数字:2
请重新输入从5到100猜一个数字:101
请重新输入从5到100猜一个数字:6
从6到100猜一个数字:66
从6到66猜一个数字:55
从6到55猜一个数字:66
请重新输入从6到55猜一个数字:5
请重新输入从6到55猜一个数字:35
从6到35猜一个数字:30
从6到30猜一个数字:20
从20到30猜一个数字:25
从25到30猜一个数字:26
从26到30猜一个数字:27
从27到30猜一个数字:28
恭喜你中奖了
示例解析
上面代码修复的bug是,当我们输入的值超过[start, end]这个区间的时候,程序就会终止,修改之后就不会了。现在,我们要将这个游戏进行封装成一个函数,好可以重复使用。
游戏实例的函数封装
我们将猜字游戏封装成一个没有返回值的函数,没有返回值的函数的调用方法如下:
def guessNum(x, y):
import random
md = random.randint(x,y)
start = x
end = y
inp = int(input('从%s到%s猜一个数字:' %(start, end)))
while start > inp or end < inp:
inp = int(input('请重新输入从%s到%s猜一个数字:' %(start, end)))
while start <= inp <= end:
if inp < md:
start = inp
inp = int(input('从%s到%s猜一个数字:' %(start,end)))
while start > inp or end < inp:
inp = int(input('请重新输入从%s到%s猜一个数字:' %(start, end)))
elif inp > md:
end = inp
inp = int(input('从%s到%s猜一个数字:' %(start,end)))
while start > inp or end < inp:
inp = int(input('请重新输入从%s到%s猜一个数字:' %(start, end)))
else:
print('恭喜你中奖了')
break
guessNum(0,100) #调用函数,因为没有返回值,所以不必用一个变量来存储;
——————————————————————————————————————————
从0到100猜一个数字:-1
请重新输入从0到100猜一个数字:66
从0到66猜一个数字:30
从30到66猜一个数字:50
从50到66猜一个数字:90
请重新输入从50到66猜一个数字:55
从55到66猜一个数字:60
从55到60猜一个数字:56
恭喜你中奖了
如果我们像继续玩这个猜字游戏,可以直接调用guessNum(x,y)并传入参数,比如0,1000。如上面的游戏输出,由此可见python函数重复使用和高效使用的价值。
原文:python函数基础,游戏实例的函数封装
免责声明:内容仅供参考,不保证正确性。