2011-09-18 3 views
-4

나는 프로그램이 사용자 번호를 추측하는 파이썬 프로그램을 작성하려고합니다. 나는 멍청이처럼 느껴진다. 내가 붙잡고있는 부분은 수학이다. 나는 몇 시간 동안 그곳에서 일 해왔고, 다른 누군가는 신선한 관점을 가져올 수 있다고 생각한다. 쉽게 해결할 수 있습니다. 나는 사용자 구성 요소를 거의 완전히 제거 할 것이라고 생각했다. 여기에 지금까지의이 논리 부분에 갇히지 결국 단지 말을 계속 한 것입니다 그것 너무 낮거나 무한대, 너무 높은 :추측에 도움이 파이썬 내 번호 프로그램

MIN=0 
MAX=100 
firstguess = MAX - MIN 
firstguess = firstguess/2 

while 1==1: 
number = int(raw_input("Enter your number 0-100:")) 
print firstguess 
oldguess = firstguess 
if firstguess > number: 
    print "First guess is too high." 
    raw_input() 
    guess = int(25) 
    print guess 
    while guess != number: 
     if guess > number: 
      print "My guess was too high." 
      raw_input() 
      nextguess = oldguess - guess 
      nextguess = nextguess/2 
      nextguess = guess - nextguess 
      oldguess = guess 
      guess = nextguess 
     elif guess == number: 
      print "I win!" 
      exit 
     elif guess < number: 
      print "My guess was too low." 
      raw_input() 
      nextguess = oldguess - guess 
      nextguess = nextguess/2 
      nextguess = nextguess + guess 
      oldguess = guess 
      guess = nextguess 
elif firstguess == number: 
    print "I win!" 
elif firstguess < number: 
    print "My first guess was too low." 
    raw_input() 
    guess = 75 
    print guess 
    print guess 
    while guess != number: 
     if guess > number: 
      print "My guess was too high." 
      raw_input() 
      nextguess = oldguess - guess 
      nextguess = nextguess/2 
      nextguess = guess - nextguess 
      oldguess = guess 
      guess = nextguess 
     elif guess == number: 
      print "I win!" 
      exit 
     elif guess < number: 
      print "My guess was too low." 
      raw_input() 
      nextguess = oldguess - guess 
      nextguess = nextguess/2 
      nextguess = nextguess + guess 
      oldguess = guess 
      guess = nextguess 
+6

* 기침 * 숙제 * 기침 * –

+0

하지 대답하지만 : 소프트웨어 설계를하고 첫 번째 가장 중요한 원칙은, 패턴을 인식하는 것입니다. 코드에는 4 개의 매우 유사한 파트가 있으므로 코드를 다시 작성하여 유사한 파트를 하나의 함수로 추출해야합니다. 실제로, 성공적인 소프트웨어 개발은 ​​주로 패턴을 발견하고, 코드 또는 실제 세계에서 물건을 일반화하는 것에 관한 것입니다 ... – KarlP

+0

안녕 얘들 아, 실제로 숙제가 아니란 것을 알고 싶다. 학교는 프로그래밍을 제공하지 않는다. 그래서 나는 나 자신을 가르치고있다. –

답변

1

내가 당신의 숙제를 할 수도 있습니다,하지만 당신은 할 듯 문제에서 정직한 시도 :

bounds = [0, 100] 
minimum, maximum = bounds 

number = int(raw_input('Pick a number [{0}-{1}]: '.format(minimum, maximum))) 

while guess != number: 
    guess = int((maximum + minimum)/2) 
    raw_input('Guessing {0}'.format(guess)) 

    if guess > number: 
    maximum = guess 
    elif guess < number: 
    maximum = bounds[1] 
    minimum = guess 

print 'I win!' 

논리는 간단하다

  1. 는 추측을위한 하부 및 상부 경계를 선택합니다.
  2. 사용자가 number으로 저장된 번호를 선택하게하십시오.
  3. 추측치가 숫자와 같지 않은 동안 :
    1. 최소 범위와 최대 범위 사이의 중간 점을 선택하십시오.
    2. 추측치가 숫자보다 크면 그 숫자는 추측치보다 작아야하므로 최대 추측 경계를 현재 추측으로 설정합니다.
    3. 추측치가 숫자보다 작 으면 최대 값을 가능한 가장 큰 값으로, 최소값을 추측 값으로 설정합니다.
  4. 추측이 숫자가되면 루프가 끊어지고 우리가 이깁니다.
2

좋아요. 1) 파이썬을 모르며 2) 코드가 무엇인지 알지 못해서 알아낼 수 없습니다. 왜? 왜냐하면 당신이 그것을 지나치게 복잡하게 만들고 있다고 생각하기 때문입니다.

간단한 바이너리 검색으로 해결할 수 있다고 생각합니다. 의사 코드 :

low = 0      // lowest possible value of user's number 
high = 100      // highest possible value of user's number 

while low < high 
    guess = (low + high)/2 // guess the average of low and hight 
    if guess is too low  // if guess is too low 
     then low = guess + 1 // then the lowest possible value is guess + 1 
    if guess it too high  // if guess is too high 
     then hight = guess - 1 // then the highest possible value is guess - 1 
    if guess equals the value 
     we've found the answer 

at this point (low + high)/2 should be the answer 

알고리즘은 탐색 공간 및 사용자의 수인 측 검사 반쪽. 예는 사용자 번호가 31-10 범위에서 실행됩니다. L이 낮은 나타냅니다 H 높은 나타내고 G는 추측을 나타냅니다

L   G   H | guess is too high so we set high to guess-1 
0 1 2 3 4 5 6 7 8 9 10 | 
         | 
L G H    | guess is too low so we set low to guess+1 
0 1 2 3 4 5 6 7 8 9 10 | 
         | 
     L H    | guess is in the same position as low and is correct so 
0 1 2 3 4 5 6 7 8 9 10 | we've found the number