Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
猜测算法似乎不起作用,用Python猜测数字_Python_Algorithm - Fatal编程技术网

猜测算法似乎不起作用,用Python猜测数字

猜测算法似乎不起作用,用Python猜测数字,python,algorithm,Python,Algorithm,我正在努力使用一些简单的算法,让python尽可能少地猜测给定的数字。它似乎在运行,但速度非常慢。我做错了什么。我已经读过几个关于这个问题的话题,但找不到解决办法。我是一个初学者程序员,所以欢迎任何提示 min = 1 max = 50 number = int(input(("please choose a number between 1 and 50: "))) total = 0 guessed = 0 while guessed != 1: guess = int((mi

我正在努力使用一些简单的算法,让python尽可能少地猜测给定的数字。它似乎在运行,但速度非常慢。我做错了什么。我已经读过几个关于这个问题的话题,但找不到解决办法。我是一个初学者程序员,所以欢迎任何提示

min = 1
max = 50

number = int(input(("please choose a number between 1 and 50: ")))

total = 0
guessed = 0

while guessed != 1:
    guess = int((min+max)/2)
    total += 1 

    if guess == number:
        print("The number has been found in ",total," guesses!")
        guessed = 1
    elif guess > number:
        min = guess + 1
    elif guess < number:
        max = guess - 1
min=1
最大值=50
number=int(输入((“请选择一个介于1和50之间的数字:”))
总数=0
猜测=0
猜猜看!=1:
猜测=整数((最小+最大)/2)
总数+=1
如果guess==数字:
打印(“数字已在中找到”,总计,“猜测!”)
猜测=1
elif guess>数字:
最小值=猜测+1
elif guess<数字:
max=guess-1
谢谢


另外,我知道程序不会检查错误输入;)

你的逻辑是颠倒的。当您猜得太高时,您希望降低
max
,当您猜得太低时,您希望提高
min
。试试这个:

if guess == number:
    print("The number has been found in ",total," guesses!")
    guessed = 1
elif guess > number:
    max = guess - 1
elif guess < number:
    min = guess + 1
如果猜测==数字:
打印(“数字已在中找到”,总计,“猜测!”)
猜测=1
elif guess>数字:
max=guess-1
elif guess<数字:
最小值=猜测+1

除了逻辑向后,您不应该使用min和max作为变量名。它们是python函数。您还可以使用while True,并在猜测数字时立即中断

while True:
    guess = (mn + mx) // 2
    total += 1
    if guess == number:
        print("The number has been found in {} guesses!".format(total))
        break
    elif guess < number:
        mn = guess
    elif guess > number:
        mx = guess
为True时:
猜测=(mn+mx)//2
总数+=1
如果guess==数字:
打印(“已在{}猜测中找到该数字!”。格式(总计))
打破
elif guess<数字:
mn=猜测
elif guess>数字:
mx=猜测

您还将看到,如果不从“猜测”中加上或减去1,则可以在更少的步骤中找到数字。

建议:使用布尔值进行猜测?哦,天哪,这太糟糕了。>和<应该是相反的方向。很尴尬。可以关闭!是的,只要把逻辑转过来,否则你会永远猜到
50
或者其他什么。但是我有一个提示,关于您使用的
print(“该数字已在”,total,“guesses!”)中找到)
,可以这样写:
print(“该数字已在%s guesses!”%total中找到)
,这将为您提供更好的输出。如果要传递多个值,则语法为:
print(“在%s猜测中找到了数字%s!”%(猜测,总计))
Thnx,用于响应!很好appreciated@hexereisoftware-建议使用
.format(…)
方法可能比使用
%
运算符更好,
%
即将退出。好吧,它使用
而True:
break
构造,这可能比使用一个变量
猜测更明智,关于命名约定的注释也很明智。所以请不要投反对票:)很高兴您添加了
.format(total)
解决方案,更好的输出:)但我更喜欢
”“%(var)
语法:
print(“这个数字在%s猜测中找到了!”%total)
@hexerisoftware,我一直在python中使用str.format,只是比老式的printf功能更丰富,更不容易出现打字错误!诚然,我是一个老派的人,只使用printf样式进行简单或调试输出,因为它打字速度快,可读性好。对于文件中的输出,或者如果我需要对输出产生确切的影响,那么
.format()
版本中没有任何东西可以使用。请您解释一下上述代码如何帮助实现OP的
简单算法,该算法应使python尽可能少地猜测给定的数字,我认为在最坏的情况下,要猜出正确的数字需要B个数的时间。
from random import randint

print('choose a number in your brain and if guess is true enter y else any key choose time of guess: ')

print("define the range (A,B) :")
A = int(input("A: "))
B = int(input("B: "))
time = int(input("time:"))

while time != 0:
    ran = randint(A, B)
    inp = input(f"is this {ran} ?")
    time -= 1
    if inp == "y":
        print("bla bla bla python wins!")
        break
    print("NOPE!")
    if time == 0:
        print("computer game over!")
        break