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才能在此处获得帮助。