实例解析--猜数字游戏
编写一个“猜数字游戏”的程序,在1~1000之间随机产生一个数,然后请用户循环猜这个数字,对于每个答案只回答“猜大了”或“猜小了”,直到猜对为止。输出用户的猜测次数。
使用Python语言的随机标准库random。
import random
target=random.randint(1,1000)
实例1:
import random
target=random.randint(1,1000)
count=0
while True:
guess=eval(input('请输入一个猜测的整数(1至1000):'))
count=count+1
if guess>target:
print('猜大了')
elif guess<target:
print('猜小了')
else:
print('猜对了')
break
print("此轮的猜测次数是:",count)
请输入一个猜测的整数(1至1000):12
猜小了
请输入一个猜测的整数(1至1000):500
猜小了
请输入一个猜测的整数(1至1000):750
猜小了
请输入一个猜测的整数(1至1000):800
猜小了
请输入一个猜测的整数(1至1000):900
猜小了
请输入一个猜测的整数(1至1000):950
猜大了
请输入一个猜测的整数(1至1000):925
猜大了
请输入一个猜测的整数(1至1000):912
猜大了
请输入一个猜测的整数(1至1000):906
猜大了
请输入一个猜测的整数(1至1000):903
猜对了
此轮的猜测次数是: 10
由于使用了eval(input())方式获得用户输入,如果用户输入非数字产生运行错误,程序将会退出。为了增强程序的稳定性,实例2中增加了异常处理机制。
提示:eval(input())
使用input()获得用户输入是一定不会出现异常的,因为任何输入都会被当作字符串;但eval(input())则可能在输入不是数字时产生异常而导致程序退出,因此需要异常判断。
实例2:
import random
target=random.randint(1,1000)
count=0
while True:
try:
guess=eval(input('请输入一个猜测的整数(1至1000):'))
except:
print('输入有误,请重试,不计入猜测次数')
continue
count=count+1
if guess>target:
print('猜大了')
elif guess<target:
print('猜小了')
else:
print('猜对了')
break
print("此轮的猜测次数是:",count)
请输入一个猜测的整数(1至1000):500
猜大了
请输入一个猜测的整数(1至1000):250
猜小了
请输入一个猜测的整数(1至1000):haha
输入有误,请重试,不计入猜测次数
请输入一个猜测的整数(1至1000):375
猜小了
请输入一个猜测的整数(1至1000):450
猜大了
请输入一个猜测的整数(1至1000):400
猜小了
请输入一个猜测的整数(1至1000):425
猜大了
请输入一个猜测的整数(1至1000):412
猜小了
请输入一个猜测的整数(1至1000):418
猜小了
请输入一个猜测的整数(1至1000):421
猜小了
请输入一个猜测的整数(1至1000):423
猜对了
此轮的猜测次数是: 10
二分法查找:每次都猜(最大值+最小值)/2那个值,根据反馈的大小情况继续查找,直到找到结果。初次为1~N的整数范围,采用二分法查找至少需要次即可找到结果。