Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
程序卡在反向python猜谜游戏上_Python - Fatal编程技术网

程序卡在反向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”等)