Trong chương trình này, chúng tôi yêu cầu người dùng chọn một thao tác. Tùy chọn 1, 2, 3 và 4 hợp lệ. Nếu bất kỳ đầu vào nào khác được cung cấp, Đầu vào không hợp lệ sẽ được hiển thị và vòng lặp tiếp tục cho đến khi một tùy chọn hợp lệ được chọn
Hai số được lấy và phân nhánh
left = '1'
operator = '+'
right = '2*3'
2 được sử dụng để thực hiện một phần cụ thể. Các chức năng do người dùng định nghĩa left = '1'
operator = '+'
right = '2*3'
3, left = '1'
operator = '+'
right = '2*3'
4, left = '1'
operator = '+'
right = '2*3'
5 và left = '1'
operator = '+'
right = '2*3'
6 đánh giá các hoạt động tương ứng và hiển thị đầu ra Tuy nhiên, trong trường hợp viết một chương trình tính toán đơn giản, có nhiều cách khác nhau để thực hiện. Cái nào là tốt nhất, phụ thuộc rất nhiều vào ngữ cảnh
Trong bài viết này, tôi sẽ thảo luận về ba cách tiếp cận phổ biến, bao gồm điểm mạnh và điểm yếu của từng cách tiếp cận.
Giải pháp 1. Phân nhánh có điều kiện
Tôi đoán nếu có một cách "rõ ràng" duy nhất để xây dựng một máy tính trong Python, thì đó sẽ là sử dụng phân nhánh có điều kiện
Các bước cơ bản là
- Yêu cầu người dùng nhập dữ liệu
- Chọn một thao tác có điều kiện dựa trên toán tử đã chọn
- Thực hiện phép tính bằng toán tử đã chọn
- In kết quả
Mã sẽ trông giống như thế này
Không có gì sai với cách tiếp cận này và trên thực tế, hầu hết các hướng dẫn đều chọn một số biến thể của cách này. Nhưng nhược điểm bao gồm
- Chỉ hỗ trợ hoạt động nhị phân
- Khá nhiều mã cho một nhiệm vụ đơn giản
Có thể có các giải pháp tốt hơn tùy thuộc vào những gì bạn đang cố gắng đạt được
Đây là một liên kết đến mã làm việc
Giải pháp 2. đánh giá[]
Một cách tiếp cận khác là sử dụng hàm
left = '1'
operator = '+'
right = '2*3'
7 tích hợp sẵn của Python. left = '1'
operator = '+'
right = '2*3'
8 cho phép bất kỳ chuỗi nào được đánh giá dưới dạng biểu thức Python. Điều này cực kỳ mạnh mẽ vì nó cho phép mã được tạo và thực thi động khi chạySử dụng điều này, đoạn mã trên có thể được giảm xuống
calc = input["Type calculation:\n"]
print["Answer: " + str[eval[calc]]]
left = '1'
operator = '+'
right = '2*3'
7 có một số ưu điểm so với giải pháp 1- Nó có thể chấp nhận các biểu thức tùy ý [e. g.
left = '1'
0] không chỉ hoạt động nhị phân
operator = '+'
right = '2*3' - Đó là mã ít hơn đáng kể
Đây là một liên kết đến mã làm việc
left = '1'
operator = '+'
right = '2*3'
8 có thể là “một cách rõ ràng” nếu bạn chỉ sử dụng nó cục bộ trên máy tính của mình, vì nó rất tiện lợi và mạnh mẽ. Tuy nhiên, nó nên được sử dụng hết sức cẩn thận trong môi trường sản xuất. Lý do là vì left = '1'
operator = '+'
right = '2*3'
8 có thể thực thi các biểu thức python tùy ý, vì vậy có thể được sử dụng cho mục đích xấuBạn có thể tìm thấy một bài viết hay về các rủi ro bảo mật của
left = '1'
operator = '+'
right = '2*3'
8 tại đâyGiải pháp 3. Tra cứu từ điển và đệ quy
Trong phiên bản máy tính Python này, chúng tôi sẽ thực hiện các cải tiến sau so với giải pháp 1
- Tra cứu từ điển được sử dụng để xác định nhánh có điều kiện. Điều này làm cho mã sạch hơn, dễ đọc hơn và có thể mở rộng hơn
- Mô-đun
left = '1'
3 của Python được sử dụng thay vì xác định các hàm toán học của riêng chúng ta
operator = '+'
right = '2*3' - Đệ quy được sử dụng để cho phép hỗ trợ các biểu thức toán học phức tạp [không chỉ các phép toán nhị phân]
Mã kết quả như sau
Cách tiếp cận này mạnh hơn giải pháp 1 và an toàn hơn giải pháp 2
Cách nó hoạt động là khi người dùng chuyển vào một chuỗi [e. g. 1+2*3], hàm
left = '1'
operator = '+'
right = '2*3'
4 của chúng ta sẽ lặp qua từng toán tử mà chúng ta đã định nghĩa trong từ điển left = '1'
operator = '+'
right = '2*3'
5 và gọi phương thức phân vùng chuỗi trong lần xuất hiện đầu tiên của toán tử đó. Trong trường hợp của left = '1'
operator = '+'
right = '2*3'
6, điều này sẽ cho chúng taleft = '1'
operator = '+'
right = '2*3'
Sau đó,
left = '1'
operator = '+'
right = '2*3'
4 được gọi đệ quy trên các biểu thức con cho đến khi nó left = '1'
operator = '+'
right = '2*3'
8 trả về giá trị true. Vì vậy, trong ví dụ trên, lệnh gọi đệ quy của chúng ta sẽ như thế này________số 8Mà giải quyết để
return add[1, 6]
Nếu tôi đang viết một máy tính “thế giới thực” bằng Python, tôi có thể lấy thứ gì đó như thế này làm điểm xuất phát của mình
Đây là một liên kết đến mã làm việc
giải pháp tiền thưởng. mô-đun điện tử
Cách tiếp cận “phần thưởng” cuối cùng và có thể là cách tiếp cận yêu thích của tôi là sử dụng mô-đun e tuyệt vời. Với điều này, chúng ta có thể đánh giá các biểu thức Python “trực tiếp” từ dòng lệnh mà không cần mở trình thông dịch Python
Để cài đặt
left = '1'
operator = '+'
right = '2*3'
0Sau đó, để sử dụng, chúng ta chỉ cần viết
left = '1'
operator = '+'
right = '2*3'
1Rất tiện dụng
Tôi hy vọng bạn thấy bài viết này hữu ích. Nếu bạn có bất kỳ ý tưởng nào khác để triển khai máy tính Pythonic, tôi rất muốn nghe về ý tưởng đó trong các nhận xét bên dưới
Tăng cấp mã hóa
Cảm ơn vì đã là một phần của cộng đồng của chúng tôi. Đăng ký kênh YouTube của chúng tôi hoặc tham gia Skilled. khóa học phỏng vấn lập trình dev