Tôi nghĩ những gì bạn đang tìm kiếm ở đây là một Sơ đồ trình tự . Điều này cho phép bạn hình dung thứ tự mà các mô-đun khác nhau gọi nhau thông qua việc sử dụng các mũi tên.
Xây dựng một là đơn giản:
- Vẽ lớp bắt đầu của bạn với một đường chấm bên dưới nó.
- Vẽ lớp / phương thức tiếp theo trong dấu vết cuộc gọi bằng một đường chấm bên dưới
- Kết nối các dòng với một mũi tên, định vị theo chiều dọc bên dưới mũi tên cuối cùng bạn đã vẽ
- Lặp lại các bước 2-3 cho tất cả các cuộc gọi trong dấu vết của bạn
Thí dụ
Giả sử chúng ta có mã sau đây, chúng tôi muốn tạo sơ đồ trình tự cho:
def long_division(quotient, divisor):
solution = ""
remainder = quotient
working = ""
while len(remainder) > 0:
working += remainder[0]
remainder = remainder[1:]
multiplier = find_largest_fit(working, divisor)
solution += multiplier
working = calculate_remainder(working, multiplier, divisor)
print solution
def calculate_remainder(working, multiplier, divisor):
cur_len = len(working)
int_rem = int(working) - (int(multiplier) * int (divisor))
return "%*d" % (cur_len, int_rem)
def find_largest_fit(quotient, divisor):
if int(divisor) == 0:
return "0"
i = 0
while i <= 10:
if (int(divisor) * i) > int(quotient):
return str(i - 1)
else:
i += 1
if __name__ == "__main__":
long_division("645", "5")
Điều đầu tiên chúng ta sẽ rút ra là điểm vào ( main
) kết nối với phương thức long_division
. Lưu ý rằng điều này tạo ra một hộp trong long_division, biểu thị phạm vi của cuộc gọi phương thức. Đối với ví dụ đơn giản này, hộp sẽ là toàn bộ chiều cao của sơ đồ trình tự của chúng tôi do thực tế đây là điều duy nhất chạy.
Bây giờ chúng tôi gọi find_largest_fit
để tìm bội số lớn nhất phù hợp với số làm việc của chúng tôi và trả lại cho chúng tôi. Chúng tôi vẽ một dòng từ long_division
đến find_largest_fit
với một hộp khác để biểu thị phạm vi cho lệnh gọi hàm. Lưu ý cách hộp kết thúc khi hệ số nhân được trả về; đây là kết thúc của phạm vi chức năng đó!
Lặp lại một vài lần cho một số lớn hơn và biểu đồ của bạn sẽ trông giống như thế này:
Ghi chú
Bạn có thể chọn xem bạn muốn gắn nhãn các cuộc gọi với tên biến được truyền hay giá trị của chúng nếu bạn chỉ muốn ghi lại một trường hợp cụ thể. Bạn cũng có thể hiển thị đệ quy với một hàm gọi chính nó.
Ngoài ra, bạn có thể hiển thị người dùng ở đây và nhắc họ và hiển thị đầu vào của họ vào hệ thống đủ dễ dàng. Đây là một hệ thống khá linh hoạt mà tôi nghĩ bạn sẽ thấy khá hữu ích!