为了账号安全,请及时绑定邮箱和手机立即绑定

Python 为什么我的代码会导致无限循环?

Python 为什么我的代码会导致无限循环?

阿晨1998 2022-10-05 18:31:22
所以,我正在学习 Python 3。我尝试编写一个脚本,让你猜一个从 1 到 20 的数字。现在我知道这不是最好的方法,但是当我运行代码时,它会进入无限环形。是什么原因造成的?我做错了什么?我的问题的目的是了解我的错误以及导致错误的过程。感谢你们。# Defining the function inside which the verification happensdef guesst(secretNumber, inputNumber):    numberOfGuesses = 0    if inputNumber >= 1 and inputNumber <= 20:        while inputNumber:            if inputNumber > secretNumber:                numberOfGuesses += 1                print('Your guess is too high.')            elif inputNumber < secretNumber:                numberOfGuesses += 1                print('Your guess is too low.')            elif inputNumber == secretNumber:                print('Your guess is correct, congratulations! You\'ve my number in ', numberOfGuesses, 'guesses.')                break    else:        print('Please enter a number between 1 and 20')# Defining the variables used by the functionsecretNumber = 11inputNumber = int(input('I\'m thinking of a number between 1 and 20, try to guess which one: '))# Calling in the functionguesst(secretNumber, inputNumber)# -------------------------------------------------------# I just changed my code to this and it worked, thank you!# -------------------------------------------------------def guesstt(secretNumber):    numberOfGuesses = 0    while secretNumber:        inputNumber = int(input('I\'m thinking of a number between 1 and 20, try to guess which one: '))        if inputNumber >= 1 and inputNumber <= 20:            if inputNumber > secretNumber:                numberOfGuesses += 1                print('Your guess is too high.')            elif inputNumber < secretNumber:                numberOfGuesses += 1                print('Your guess is too low.')            elif inputNumber == secretNumber:                print('Your guess is correct, congratulations! You\'ve my number in ', numberOfGuesses, 'guesses.')                break        else:            print('Please enter a number between 1 and 20')secretNumber = 11guesstt(secretNumber)
查看完整描述

4 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

阅读这两行:

    if inputNumber >= 1 and inputNumber <= 20:    
        while inputNumber:

循环体while不会改变inputNumber。如果它在 1..10 或 12..20 范围内,则您的循环等于while True:并且它将永远运行。您可能希望在if循环内部进行测试,并且您肯定希望在您返回评估循环条件时更改值,例如通过input设置新值。


查看完整回答
反对 回复 2022-10-05
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

secretNumber 不变?if在and中使用 numberOfGuesseselif



查看完整回答
反对 回复 2022-10-05
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

尝试这个


def guesst(secretNumber):


numberOfGuesses = 0


while True:

    inputNumber = int(input('I\'m thinking of a number between 1 and 20, try to guess which one: '))

    if inputNumber > secretNumber:

        numberOfGuesses += 1

        print('Your guess is too high.')

    elif inputNumber < secretNumber:

        numberOfGuesses += 1

        print('Your guess is too low.')

    elif inputNumber == secretNumber:

        print('Your guess is correct, congratulations! You\'ve my number in ', numberOfGuesses, 'guesses.')

        break

else:

    print('Please enter a number between 1 and 20')



# Defining the variables used by the function

snum = 11

guesst(snum)

当 while 循环重复时,您需要再次收集用户的输入,因此您的输入语句应该在 while 循环中,而不是在函数之外。


您的 if 语句也应该在 while 循环内。


查看完整回答
反对 回复 2022-10-05
?
守候你守候我

TA贡献1802条经验 获得超10个赞

变量 inputNumber 不会在 while 循环中更新。

尝试添加:

inputNumber = int(input("please try again"))

或者大意是允许用户在下一次迭代之前更新他们的猜测。


查看完整回答
反对 回复 2022-10-05
  • 4 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号