程序卡在反向python猜谜游戏上
我的程序被卡住了,它告诉你在选定的数字范围内想一个数字,我不知道如何解决这个问题 我甚至不完全确定我在做什么,但程序的开始工作正常程序卡在反向python猜谜游戏上,python,Python,我的程序被卡住了,它告诉你在选定的数字范围内想一个数字,我不知道如何解决这个问题 我甚至不完全确定我在做什么,但程序的开始工作正常 from random import randrange import time def guessNumber(min_no, max_no): try: return randrange(min_no, max_no) except ValueError: return min_no left = 0 rig
from random import randrange
import time
def guessNumber(min_no, max_no):
try:
return randrange(min_no, max_no)
except ValueError:
return min_no
left = 0
right = len(L)-1
while left<=right:
m = (left+right)//2
if x == L[m]:
return m
elif x < L[m]:
right = m-1
else: # L[m] < x
left = m+1
def userNoInput(msg):
while 1:
try:
return int(input(msg))
except:
print("Numbers Only !")
sys.exit(0)
print("Enter two numbers, low then high.")
min_no = userNoInput("low = ")
max_no = userNoInput("high = ")
print ("Think of a number in the range %d and %d."%(min_no, max_no))
max_no += 1
while True:
guess = guessNumber(min_no, max_no)
count = 0
L = []
for i in range(low, high+1):
L.append(i)
while True:
print("Is your number Less than, Greater than, or Equal to %d ?") % (L[(int(len(L)/2))])
guess = guessNumber(low, high)
guess = input("Type 'L', 'G' or 'E': ")
guess = guess.upper()
if guess == 'E':
break
elif guess == 'L': guess < number
elif guess == 'G': guess > number
else:
print (guess)
print ("Your number is" + guess + "." + "I Found it in" + number + "guesses.")
是的,第一次猜测中的无限循环导致程序挂起。 应该只有一个事件循环,如下所示:
from random import randrange
import time
def guess_number(min_no, max_no):
return randrange(min_no, max_no)
def user_num_input(msg):
try:
return int(raw_input(msg))
except ValueError:
print('Numbers Only!')
sys.exit(1)
def get_hint(current_guess):
return raw_input('Is your number Less than, Greater than, or Equal to %d? (L, G, E): ' % current_guess)
print('Enter two numbers, low then high.')
min_no = user_num_input('low = ')
max_no = user_num_input('high = ')
assert max_no >= min_no
print ('Think of a number in the range %d and %d.' % (min_no, max_no))
iteration = 1
while True:
guess = guess_number(min_no, max_no)
hint = get_hint(guess)
while hint not in ['E', 'L', 'G']:
print('You gave unknown answer. Please retry.')
hint = get_hint(guess)
if hint == 'E':
break
elif hint == 'L':
max_no = guess
elif hint == 'G':
min_no = guess
else:
raise ValueError('Unreachable!')
iteration += 1
print ('Your number is %d. I found it in %d guesses.' % (guess, iteration))
是的,第一次猜测中的无限循环导致程序挂起。 应该只有一个事件循环,如下所示:
from random import randrange
import time
def guess_number(min_no, max_no):
return randrange(min_no, max_no)
def user_num_input(msg):
try:
return int(raw_input(msg))
except ValueError:
print('Numbers Only!')
sys.exit(1)
def get_hint(current_guess):
return raw_input('Is your number Less than, Greater than, or Equal to %d? (L, G, E): ' % current_guess)
print('Enter two numbers, low then high.')
min_no = user_num_input('low = ')
max_no = user_num_input('high = ')
assert max_no >= min_no
print ('Think of a number in the range %d and %d.' % (min_no, max_no))
iteration = 1
while True:
guess = guess_number(min_no, max_no)
hint = get_hint(guess)
while hint not in ['E', 'L', 'G']:
print('You gave unknown answer. Please retry.')
hint = get_hint(guess)
if hint == 'E':
break
elif hint == 'L':
max_no = guess
elif hint == 'G':
min_no = guess
else:
raise ValueError('Unreachable!')
iteration += 1
print ('Your number is %d. I found it in %d guesses.' % (guess, iteration))
此代码将为您完成此操作。你的代码中有很多错误:- 1.)无限While循环(为真时: 猜数=猜数(最小值、最大值) 2.)此问题不需要列表/数组 3.)虽然正确: guess=guessNumber(最小值、最大值),此函数错误。由于返回的是值,因此它不会超过except语句 4.)不需要def userNoInput(msg):函数,总之没有问题 5.)最后一行(打印语句也错误) 希望这对你有帮助 附言:-只是一个建议,每当你遇到无限循环或类似的问题时,你应该首先在循环中打印语句,看看问题在哪里
from random import randrange
import time
def guessNumber(min_no, max_no):
left = min_no
right = max_no
if left == right:
return left
m = (left+right)/2
return m
def userNoInput(msg):
while 1:
try:
return int(input(msg))
except:
print("Numbers Only !")
sys.exit(0)
print("Enter two numbers, low then high.")
min_no = userNoInput("low = ")
max_no = userNoInput("high = ")
# print min_no,max_no
print ("Think of a number in the range %d and %d."%(min_no, max_no))
max_no += 1
count = 0
while True:
count+=1
guess = guessNumber(min_no, max_no)
print("Is your number Less than, Greater than, or Equal to %d ?") %guess
temp = raw_input("Type 'L', 'G' or 'E': ")
temp = temp.upper()
if temp == 'E':
break
elif temp == 'L':
max_no = guess-1;
elif temp == 'G':
min_no = guess+1;
print "Your number is %r . I Found it in %r guesses." %(guess,count)
此代码将为您完成此操作。你的代码中有很多错误:- 1.)无限While循环(为真时: 猜数=猜数(最小值、最大值) 2.)此问题不需要列表/数组 3.)虽然正确: guess=guessNumber(最小值、最大值),此函数错误。由于返回的是值,因此它不会超过except语句 4.)不需要def userNoInput(msg):函数,总之没有问题 5.)最后一行(打印语句也错误) 希望这对你有帮助 附言:-只是一个建议,每当你遇到无限循环或类似的问题时,你应该首先在循环中打印语句,看看问题在哪里
from random import randrange
import time
def guessNumber(min_no, max_no):
left = min_no
right = max_no
if left == right:
return left
m = (left+right)/2
return m
def userNoInput(msg):
while 1:
try:
return int(input(msg))
except:
print("Numbers Only !")
sys.exit(0)
print("Enter two numbers, low then high.")
min_no = userNoInput("low = ")
max_no = userNoInput("high = ")
# print min_no,max_no
print ("Think of a number in the range %d and %d."%(min_no, max_no))
max_no += 1
count = 0
while True:
count+=1
guess = guessNumber(min_no, max_no)
print("Is your number Less than, Greater than, or Equal to %d ?") %guess
temp = raw_input("Type 'L', 'G' or 'E': ")
temp = temp.upper()
if temp == 'E':
break
elif temp == 'L':
max_no = guess-1;
elif temp == 'G':
min_no = guess+1;
print "Your number is %r . I Found it in %r guesses." %(guess,count)
您的
为True时:guess=guessNumber(最小值、最大值)
在任何情况下都不会中断。难怪这是一个无限循环为什么在guessNumber中的return语句后面有代码?而True是导致问题的原因我应该删除什么?将输入更改为小写/大写。然后使用适当的值(即“L”/“L”等)检查您的,而True:guess=guessNumber(最小值、最大值)
在任何情况下都不会中断。难怪这是一个无限循环为什么在guessNumber中的return语句后面有代码?而True是导致问题的原因我应该删除什么?将输入更改为小写/大写。然后使用适当的值进行检查(即“L”/“L”等)