2011-11-13 13 views
5

Próbuję napisać numer programu zgadywania, co następuje:Loop aż konkretnego użytkownika wejście

def oracle(): 
n = ' ' 
print 'Start number = 50' 
guess = 50 #Sets 50 as a starting number 
n = raw_input("\n\nTrue, False or Correct?: ") 
while True: 
    if n == 'True': 
     guess = guess + int(guess/5) 
     print 
     print 'What about',guess, '?' 
     break 
    elif n == 'False': 
     guess = guess - int(guess/5) 
     print 
     print 'What about',guess, '?' 
     break 
    elif n == 'Correct': 
     print 'Success!, your number is approximately equal to:', guess 

wyrocznię()

Próbuję teraz zrobić, to dostać tę sekwencję jeśli/Elif/else komendy do zapętlenia, aż użytkownik wprowadzi "Poprawnie", tj. gdy liczba określona przez program jest w przybliżeniu równa liczbie użytkowników, jednak jeśli nie znam numeru użytkownika, nie mogę pomyśleć, w jaki sposób mogę go wdrożyć, a jeśli oświadczenie i moje próby użycia "while" również nie działają.

Odpowiedz

10

Jako alternatywę dla podejścia @Mark Byers', można użyć while True:

guess = 50  # this should be outside the loop, I think 
while True: # infinite loop 
    n = raw_input("\n\nTrue, False or Correct?: ") 
    if n == "Correct": 
     break # stops the loop 
    elif n == "True": 
     # etc. 
+0

+1 podobny do mojej aktualizacji. Myślę, że użycie słowa "input" również jest błędne. –

+0

@MarkByers: zmieniono na 'raw_input'. Z wyglądu instrukcji 'print', OP używa Pythona 2. –

+0

Czy ktoś z was mógłby mi powiedzieć, dlaczego kod kończy się po wprowadzeniu True lub False? –

2

Twój kod nie będzie działał, ponieważ nie przypisałeś nic do n przed pierwszym użyciem. Spróbuj tego:

def oracle(): 
    n = None 
    while n != 'Correct': 
     # etc... 

Bardziej czytelny podejście jest przejście testu dopiero później i używać break:

def oracle(): 
    guess = 50 

    while True: 
     print 'Current number = {0}'.format(guess) 
     n = raw_input("lower, higher or stop?: ") 
     if n == 'stop': 
      break 
     # etc... 

także input w Pythonie 2.x odczytuje linię wejścia, a następnie ocenia to. Chcesz użyć raw_input.

Uwaga: W języku Python 3.x zmieniono nazwę na raw_input na input, a stara metoda input już nie istnieje.

+0

+1, choć byłoby bardziej pythonic użyć 'None' oznaczający "bez wartości". –

+0

Czy ktoś z was może mi powiedzieć, dlaczego kod kończy się po wprowadzeniu wartości Prawda czy Fałsz? –