为什么我的循环在第三个tim之后不起作用

2024-09-20 04:04:40 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码,电脑应该猜1到100之间的数字。计算机的猜测应该比上一次猜测减少或增加一半。第三次通过循环时,它只会更高,或者如果我在说LowerItBreaks之后使用higher。无论是哪种方式,它都将停止添加猜测,并将前一个猜测除以2,而不是将前一个猜测除以2添加到前一个猜测中。i、 e而不是50+(50/2)=75我的代码是50/2=25。因此,如果它在更高的位置突破是87,而不是加上之前猜测的一半,也就是6,它除以87除以2等于43。(我现在已经编辑了这个问题,除了需要帮助的地方之外,代码和所有东西都应该工作。(谢谢)

pcguess = 50
useranswer = 50
print("Wanna see a magic trick?")
print("Please think of a random number between 1 and 100.")
print("Now that you have written down your number")
print("I will guess it in ten guesses or less.")
a = print("My first guess is", pcguess)
tries = 0
while tries < 100000:
    newguess = pcguess//2
    b = input("Was that your number?")
    if b == "no":
        tries += 1
        c = input("Is your number higher or lower than my guess?")
        if c == "lower":
            print("Then my next guess is:")
            print(useranswer - newguess )
            useranswer = pcguess - newguess
            pcguess = newguess    
            tries += 1
        elif c == "higher":
            print("Then my next guess is:")
            print(useranswer + newguess)
            useranswer = pcguess + newguess
            pcguess = newguess
            tries += 1
    if b == "yes":
        print("I got it in", tries, "tries!")
        break

Tags: 代码numberyourifthatismyit
2条回答

您需要根据用户的“高”/“低”响应缩小可能的数字范围。因此,您应该将上下限存储为变量,并在得到响应时进行调整。像这样:

lower = 0
upper = 100

while lower < upper:
    guess = (lower+upper)//2
    print("My guess is ", guess)
    # Find out if the correct answer is higher or lower than this guess
    if the correct answer is higher:
       lower = guess + 1   # This gives a new lower bound
    if the correct answer is lower:
       upper = guess - 1   # This gives a new upper bound

我要在代码中更改的第一件事是增加tries变量。在当前while循环中,每次执行while循环时递增一次,然后在执行if语句之后再次递增。这意味着每次迭代,您的尝试次数都会增加2而不是1。那么为什么不在循环的开始处增加tries一次呢?你知道吗

第二,你的useranswer变量没有变成你所期望的那样的原因很简单,因为你更新它是错误的。例如

        if c == "lower":
        print("Then my next guess is:")
        print(useranswer - newguess )
        useranswer = pcguess - newguess  # WRONG
        pcguess = newguess 

因为您正在更新useranswer,所以它应该是useranswer = useranswer + newguess或更简洁的useranswer += newguess

对另一个if语句也这样做(如果您的猜测高于计算机的猜测)

第三。这更像是一个样式问题,但是你的while循环条件应该更准确(即,既然你告诉用户你将在10次或更少的尝试中猜出他们的数字,那么你的循环条件真的需要有tries < 100000?你知道吗

相关问题 更多 >