2011-11-13 37 views
5

Tôi cố gắng để viết một chương trình đoán số như sau:Vòng cho đến khi một người dùng cụ đầu vào

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 

oracle()

Những gì tôi đang cố gắng để làm bây giờ là có được chuỗi này nếu/elif Các lệnh khác để lặp cho đến khi người dùng nhập 'Đúng', tức là khi số được chương trình tuyên bố bằng xấp xỉ với số người dùng, tuy nhiên nếu tôi không biết số người dùng, tôi không thể nghĩ cách tôi có thể thực hiện và báo cáo, và nỗ lực của tôi để sử dụng 'while' cũng không hoạt động.

Trả lời

10

Để thay thế cho phương pháp @ Mark Byers', bạn có thể sử dụng 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 tương tự như cập nhật của tôi. Tôi nghĩ việc sử dụng 'đầu vào' ở đây cũng sai. –

+0

@MarkByers: đã đổi thành 'raw_input'. Từ giao diện của các câu lệnh 'print', OP đang sử dụng Python 2. –

+0

Có thể một trong hai bạn cho tôi biết tại sao mã này chấm dứt sau khi nhập đúng hay sai? –

2

Mã của bạn sẽ không hoạt động vì bạn chưa gán bất kỳ thứ gì cho n trước khi bạn sử dụng lần đầu tiên. Hãy thử điều này:

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

Một cách tiếp cận dễ đọc hơn là để di chuyển các thử nghiệm cho đến sau này và sử dụng một 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... 

Cũng input bằng Python 2.x đọc một dòng đầu vào và sau đó đánh giá nó. Bạn muốn sử dụng raw_input.

Lưu ý: Trong Python 3.x, raw_input đã được đổi tên thành input và phương thức input cũ không còn tồn tại.

+0

+1, mặc dù nó sẽ là pythonic hơn để sử dụng 'None' để biểu thị 'không có giá trị'. –

+0

Có thể một trong hai bạn cho tôi biết tại sao mã này chấm dứt sau khi nhập đúng hay sai? –

Các vấn đề liên quan