用二分法编写猜数字游戏(含:猜电脑随机数,和用户自己想的数字)python

目录

#什么是二分法

#用二分法猜电脑随机数

#用二分法猜用户所想的数


1.什么是二分法?

对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。

二分法,顾名思义就是一分为二的方法。设[a,b]为R的闭区间,逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点.

二分法在计算机中的应用主要在算法上,用于数据的查找:

假设数据是按升序排列,对于给定值num,先取序列中间值n

若num=n,则查找成功

若num

若num>n,则取最大值到n的中间值和num进行比较

循环往复,知道num=n

2.用二分法猜电脑随机数

二分法我们已经有所了解,我们也知道,生成随机数的函数为random.randint(min,max),其中min和max分别是随机数的最大值和最小值。

定义相关变量,其中max,min为随机数取值范围,guess为猜测的数字,secret为随机数,time为猜测次数

import random
max = 10000*1000
min = 0
guess = int((max - min)/2) + min
secret = random.randint(min,max)
time = 0

进入循环由于存在secret等于区间中值的可能,因此要先给time+1,再分情况讨论。循环猜测直到猜对结束循环 

while 1 :
    time = time + 1
    if guess == secret :
        print("该随机数为{0},猜了{1}次".format(guess,time))
        break
    elif guess < secret :
        min= guess
        guess = int ((max - min) / 2) + min
    else :
        max = guess
        guess = int((max - min) / 2) + min
    
print("结束")

3.用二分法猜用户所想的数

这个程序的思路和上面的大致相同,只是多了让用户判断的环节

import sys
sys.path.append('D:\\study\\python\\floint')   #括号内容为文件的绝对路径
import floint
print("在心里想一个任意大小的整数")
min,max = eval(input("请输入数字的取值范围(由小到大,用逗号隔开):"))
guess = int((max - min) / 2) + min
time = 0
while 1 :
    time += 1
    print("你想的数字是{},对吗?".format(guess))
    heart = input("如果相同,请按‘=’\n如果大于你想的数,请按‘>’\n如果小于你想的数,请按‘<’\n")
    if heart == '=' :
        print("我只猜了{}次就猜到了,请夸奖我".format(time))
        break
    elif heart == '>' :
        max = guess
        guess = int((max - min) / 2) + min
    elif heart == '<' :
        min = guess
        guess = floint.floint_carry((max-min) / 2) +min
    else :
        print("滚犊子,你他娘的真是个人才,让你整'{}'了吗?".format(heart))
        time -= 1

由于我之前在测试程序的时候发现,如果猜的数字时最大值时,guess时永远猜不出来的,这是我们的算法有了漏洞,因为我们用的int()函数只取整数部分,因此我写了floint_carry()函数,作用是,当小数部分不为0时,就给整数部分+1。这样guess也可以取到最大值了。

这是floint_carry()函数部分

#小数取整进位
def floint_carry( x) :
    x = float ( x )
    y = int (x)
    if x - y == 0 :
        return y
    else :
        return (y + 1)

ok,这就是“用二分法编写猜数字游戏(含:猜电脑随机数,和用户自己想的数字)python”的全部内容啦,新手上路请多多指教,如果有不对的地方,还请大佬不吝赐教。

你可能感兴趣的:(python)