Tôi có một vòng lặp muốn thực thi để cạn kiệt hoặc cho đến khi đạt đến một số giới hạn do người dùng chỉ định. Tôi đã có một cấu trúc trông xấu nhưng tôi dường như không thể tìm thấy một cách thanh lịch hơn để thể hiện nó; có ai không?một cách khác nữa để thể hiện vòng lặp bị ràng buộc có điều kiện?
def ello_bruce(limit=None):
for i in xrange(10**5):
if predicate(i):
if not limit is None:
limit -= 1
if limit <= 0:
break
def predicate(i):
# lengthy computation
return True
Làm tổ thánh! Có phải là một cách tốt hơn. Với mục đích của một ví dụ làm việc, xrange
được sử dụng trong đó tôi thường có một trình vòng lặp có độ dài hữu hạn nhưng không xác định (và vị ngữ đôi khi trả về Sai).
Bạn ít nhất có thể kiểm tra xem giới hạn có là Không trước vòng lặp và trả lại nếu có thay vì kiểm tra nó bất kỳ lúc nào vị từ đó là đúng. Điều đó không thực sự làm cho nó trở nên trầm trọng hơn, nhưng nó có thể tiết kiệm rất nhiều tính toán không cần thiết trong vòng lặp của bạn. –
Ông quên đặt hành động thực tế ở đây, nhưng tôi mong đợi giới hạn = Không có nghĩa là "không có giới hạn", không "không làm bất cứ điều gì". –
Lưu ý rằng việc dọn dẹp đơn giản nhất mà bạn có thể thực hiện ở đây là đảo ngược điều kiện: 'nếu không phải là biến vị ngữ (i): tiếp tục', tránh đặt toàn bộ phần còn lại của khối ở mức làm tổ phụ. Điều này áp dụng cho rất nhiều mã, vì vậy nó là một điều tốt để tìm hiểu nói chung. –