2015-12-07 13 views
5

Tôi gặp sự cố khi thoát khỏi vòng lặp trong khi sau. Đây là một chương trình đơn giản mà in hello nếu giá trị ngẫu nhiên lớn hơn 5. Chương trình chạy tốt một lần nhưng khi tôi cố gắng chạy nó một lần nữa nó đi vào một vòng lặp vô hạn.Làm cách nào để thoát khỏi vòng lặp trong khi này?

from random import * 

    seed() 
    a = randint(0,10) 
    b = randint(0,10) 
    c = randint(0,10) 
    count = 0 

    while True: 
     if a > 5 : 
      print ("aHello") 
      count = count + 1 
     else : 
      a = randint(0,10) 
     if b > 5 : 
      print ("bHello") 
      count = count + 1 
     else : 
      b = randint(0,10) 
     if c > 5 : 
      print ("cHello") 
      count = count + 1 
     else : 
      c = randint(0,10) 

     if count == 20 : 
      count = 0 
      break 

    count = 0 
+1

Mục tiêu của bạn có in chính xác 20 dòng Hello không? –

+1

logic của bạn là thiếu sót. xem xét một trạng thái mà - 'count = 18, a = 6, b = 7, c = 9' - đếm sẽ là 21, tiêu chí thoát duy nhất của bạn' count == 20' cho vòng lặp vô hạn của bạn sẽ không bao giờ được thỏa mãn. Bạn nên kiểm tra giá trị đếm sau mỗi lần tăng 'đếm' – OkezieE

+0

Có Tôi muốn in chính xác 20 dòng của Hello –

Trả lời

1

Mã sau có hữu ích không?

while True: 
    if a > 5 : 
     print ("aHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     a = randint(0,10) 
    if b > 5 : 
     print ("bHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     b = randint(0,10) 
    if c > 5 : 
     print ("cHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     c = randint(0,10) 

Bạn phải kiểm tra giá trị đếm sau khi tăng lên mỗi lần.

1

kể từ khi bạn tăng count 2 hoặc 3 lần trong một lần lặp, nó có thể bỏ qua quá khứ count == 20 séc của bạn

Dưới đây là một cách để có được chính xác 20 dòng.

from random import seed, randint 

seed() 
a = randint(0,10) 
b = randint(0,10) 
c = randint(0,10) 
count = iter(range(20)) 

while True: 
    try: 
     if a > 5: 
      next(count) 
      print ("aHello") 
     else: 
      a = randint(0,10) 
     if b > 5: 
      next(count) 
      print ("bHello") 
     else: 
      b = randint(0,10) 
     if c > 5: 
      next(count) 
      print ("cHello") 
     else: 
      c = randint(0,10) 
    except StopIteration: 
     break 

Lưu ý vẫn còn nhiều sự lặp lại trong mã này. Lưu trữ biến a, b, c của bạn trong một list thay vì các biến riêng biệt sẽ cho phép mã được đơn giản hóa hơn nữa

+0

Vậy làm cách nào để tránh điều này? –

+0

@AbhayCn, bạn có thể lặp lại séc mỗi địa điểm bạn tăng số –

8

Vòng lặp while của bạn có thể tăng biến đếm bằng 0, 1, 2 hoặc 3. Điều này có thể dẫn đến tính đi từ một giá trị dưới 20 đến một giá trị trên 20.

Ví dụ, nếu giá trị đếm là 18 và sau xảy ra:

a > 5, count += 1 
b > 5, count += 1 
c > 5, count += 1 

Sau các hoạt động này, giá trị đếm của sẽ là 18 + 3 = 21, đó không phải là 20. Vì vậy, giá trị điều kiện == 20 sẽ không bao giờ được đáp ứng.

Để khắc phục lỗi này, bạn có thể thay thế dòng

if count == 20 

với

if count >= 20 

hoặc chỉ cần thay đổi chương trình logic của bạn bên vòng lặp while.

+0

Nhưng nếu tôi muốn in chính xác dòng Xin chào 20 lần thì sao? –

1

Điều kiện "ngắt" có thể thất bại nếu hai hoặc nhiều giá trị của các biến a, bc lớn hơn 5. Trong trường hợp đó, số sẽ tăng lên nhiều lần và đếm sẽ kết thúc> 20 và vòng lặp không bao giờ có thể chấm dứt. Bạn nên thay đổi:

if count == 20 : 

để

if count >= 20: 
1

Vào cuối lặp, count có thể lớn hơn 20 do nhiều gia. Vì vậy, tôi sẽ cập nhật câu lệnh if cuối cùng thành:

if count >= 20: 

để cảm thấy an toàn.

1

Nếu mục tiêu của bạn là dừng đếm khi count>= 20, thì bạn nên sử dụng điều kiện đó cho vòng lặp while và bạn sẽ không cần phải bẻ khóa vì bạn chỉ dừng ở cuối vòng lặp.

mới khi tuyên bố sẽ trông như thế

while count < 20: 
    # increment count 

và sau đó bên ngoài vòng lặp trong khi bạn có thể thiết lập lại đếm đến 0 nếu bạn muốn sử dụng nó một lần nữa cho cái gì khác.

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