Python 循环出现故障时(仅处理每隔一个输入)

Python 循环出现故障时(仅处理每隔一个输入),python,while-loop,Python,While Loop,这是一个猜谜游戏程序,用户想到一个数字,程序就会试图猜出来。它不响应每个输入,而是忽略其他输入。对不起,如果我的代码太多 #Instructions for user def instructions(): print("Please think of a number between 1 and 1000, inclusive.") input("Press enter when ready to continue.") print(""" Enter -1 if yo

这是一个猜谜游戏程序,用户想到一个数字,程序就会试图猜出来。它不响应每个输入,而是忽略其他输入。对不起,如果我的代码太多

#Instructions for user
def instructions():
    print("Please think of a number between 1 and 1000, inclusive.")
    input("Press enter when ready to continue.")
    print("""
Enter -1 if your number is smaller than my guess
       1 if your number is bigger than my guess
       0 if I guess your number
""")
    print()

# Prompts user to continue
def prompter():
    input("Press enter when ready to continue.")
    print()

# Guesses number
def guesser(upper, lower):
    import math

    guessVal = math.ceil((upper + lower - 1)/2)
    feedback = input("Is your number " + str(guessVal) + "? ")
    return [feedback, guessVal]

# Evaluates data and gives appropriate response
def processData(feedback, tries, upper, lower, guessVal):
    if feedback == "1":
        lower = guessVal + 1
    elif feedback == "-1":
        upper = guessVal - 1
    elif feedback == "0":
        print("I guessed your number in " + str(tries) + " tries!")
        tryAgainOp()
    else:
        print("That's not what I asked for!")
        tries -= 1
        guesser(upper, lower)
    return [lower, upper]

# Bound checker
def boundChecker(upper, lower):
    if upper > 1000:
        errorBound = "yes"
    elif lower < 1:
        errorBound = "yes"
    else:
        errorBound = "no"
    return errorBound

# Trick-me checker
def trickChecker(upper, lower):
    if upper < lower:
        errorTrick = "yes"
    else:
        errorTrick = "no"
    return errorTrick

# Are you trying to trick me?
def trickingMe():
    print("Are you trying to trick me? Try again!")

# Out of bounds
def invalidBounds():
    print("Out of bounds! Try again!")

# Try again option
def tryAgainOp():
    opAns = input("Try again? Enter \"no\" to exit and anything else to continue.")
    return opAns

# Display an exit message
def exitMessage():
    print("Thank you for using this program! Have a nice day.")

# Sets up part of main module
def partialMain(tries, upper, lower):
    while tries <= 15:
        feedbackGuessVal = guesser(upper, lower)
        feedback = feedbackGuessVal[0]
        guessVal = feedbackGuessVal[1]
        bounds = processData(feedback, tries, upper, lower, guessVal)
        lower = bounds[0]
        upper = bounds[1]
        errorBound = boundChecker(upper, lower)
        errorTrick = trickChecker(upper, lower)

        if errorBound == "yes":
            return
        elif errorTrick == "yes":
            return

        tries += 1

    return [errorBound, errorTrick, tries]

# Main module
def main():
    # Initializes constants
    upper = int(1000)
    lower = int(1)
    tries = int(0)
    errorBound = ""
    errorTrick = ""
    opAns = ""

    instructions()
    prompter()

    while opAns.lower() != "no":
        boundTrickTries = partialMain(tries, upper, lower)
        errorBound = boundTrickTries[0]
        errorTrick = boundTrickTries[1]
        tries = int(boundTrickTries[2])
        print()
        if errorBound == "yes":
            invalidBounds()
            errorBound = ""
        if errorTrick == "yes":
            trickingMe()
            errorTrick = ""
        if tries > 15:
            print("Too many tries! Try again!")
            tries = 0

    opAns = tryAgainOp()

    exitMessage()
    prompter()

main()
#用户使用说明
def指令():
打印(“请考虑1到1000之间的数字,包括在内。”)
输入(“准备好继续时按enter键”)
打印(“”)
如果您的数字小于我的猜测,请输入-1
1如果你的数字比我猜的大
如果我猜到你的号码的话
""")
打印()
#提示用户继续
def提示器():
输入(“准备好继续时按enter键”)
打印()
#猜数字
def猜测器(上部、下部):
输入数学
猜测值=math.ceil((上+下-1)/2)
反馈=输入(“是你的号码”+str(猜测值)+“?”)
返回[反馈,猜测]
#评估数据并给出适当的响应
def processData(反馈、尝试、上限、下限、猜测值):
如果反馈==“1”:
下限=VAL+1
elif反馈==“-1”:
上限=VAL-1
elif反馈==“0”:
打印(“我在“+str(尝试)+”尝试中猜到了你的号码!”)
tryAgainOp()
其他:
打印(“这不是我要的!”
尝试-=1
猜测器(上、下)
返回[下,上]
#绑定检查器
def边界检查器(上部、下部):
如果上限>1000:
errorBound=“是”
elif下限<1:
errorBound=“是”
其他:
errorBound=“否”
返回错误界
#欺骗我
def trickChecker(上部、下部):
如果上部<下部:
errorTrick=“是”
其他:
errorTrick=“否”
返回错误技巧
#你想骗我吗?
def trickingMe():
打印(“你想骗我吗?再试一次!”)
#出界
def invalidBounds():
打印(“超出范围!重试!”)
#重试选项
def tryAgainOp():
opAns=input(“重试?输入\“否”退出,输入其他任何内容继续。”)
返回opAns
#显示退出消息
def exitMessage():
打印(“感谢您使用此程序!祝您度过愉快的一天。”)
#设置主模块的一部分
def partialMain(尝试、上、下):
15岁时:
打印(“尝试次数太多!重试!”)
尝试=0
opAns=tryAgainOp()
exitMessage()
提词器()
main()

主功能中的
循环时,
opAns
变量在
内部不会更改。因此,如果条件是
True
,它将永远是
True
。我猜您需要将
opAns=tryAgainOp()
移动到循环中。我建议您将代码转储到循环中,但这样做的代码太多了,因此,您需要将其缩减到a以获得帮助。
opAns
变量在
中没有更改,而
函数中的
循环中的
变量没有更改。因此,如果条件是
True
,它将永远是
True
。我猜您需要将
opAns=tryAgainOp()
移动到循环中。我建议您将代码转储到循环中,但这对您来说太多了,因此,您需要将其缩减到a才能在此处获得帮助。