msts 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- msts-1.0.0/CHANGELOG.md +40 -0
- msts-1.0.0/HUONG_DAN_PYPI.md +90 -0
- msts-1.0.0/LICENSE +21 -0
- msts-1.0.0/MANIFEST.in +6 -0
- msts-1.0.0/PKG-INFO +171 -0
- msts-1.0.0/README.md +145 -0
- msts-1.0.0/examples/demo_may_tinh.py +241 -0
- msts-1.0.0/examples/vi_du_su_dung.py +126 -0
- msts-1.0.0/pyproject.toml +45 -0
- msts-1.0.0/setup.cfg +4 -0
- msts-1.0.0/src/msts/__init__.py +77 -0
- msts-1.0.0/src/msts/__main__.py +46 -0
- msts-1.0.0/src/msts/_core.py +2534 -0
- msts-1.0.0/src/msts/gui.py +98 -0
- msts-1.0.0/src/msts.egg-info/PKG-INFO +171 -0
- msts-1.0.0/src/msts.egg-info/SOURCES.txt +20 -0
- msts-1.0.0/src/msts.egg-info/dependency_links.txt +1 -0
- msts-1.0.0/src/msts.egg-info/entry_points.txt +2 -0
- msts-1.0.0/src/msts.egg-info/requires.txt +3 -0
- msts-1.0.0/src/msts.egg-info/top_level.txt +1 -0
- msts-1.0.0/tests/test_gui.py +88 -0
- msts-1.0.0/tests/test_msts.py +284 -0
msts-1.0.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Lịch sử phiên bản
|
|
2
|
+
|
|
3
|
+
## 1.0.0 — 2026-11-12
|
|
4
|
+
|
|
5
|
+
Bản phát hành đầu tiên.
|
|
6
|
+
|
|
7
|
+
### Tính toán chính xác
|
|
8
|
+
|
|
9
|
+
- Số học bằng **phân số** chính xác tuyệt đối: `0.1 + 0.2` → `3/10` (không bao giờ có sai số số thực)
|
|
10
|
+
- **Căn thức** giữ dạng chính xác và tự rút gọn: `√8` → `2√2`, `//2 * //8` → `4`
|
|
11
|
+
- Tự **phân tích trong căn / lũy thừa phân số**: `8^(2/3)` → `4`, `2^0.5` → `√2`
|
|
12
|
+
- **π** (công thức Machin) và **e** (chuỗi hội tụ) tính bằng số nguyên lớn với độ chính xác tuỳ ý
|
|
13
|
+
- **Phân số thập phân** nhận diện số tuần hoàn: `1/3` → `0.(3)`, kiểu SGK: `0,(3)`
|
|
14
|
+
- Làm tròn nửa xa 0, làm tròn số thập phân lớn (`round(2.675, 2)` = `67/25`)
|
|
15
|
+
|
|
16
|
+
### Trình bày từng bước giải
|
|
17
|
+
|
|
18
|
+
- `steps()` xuất từng bước biến đổi như bài làm SGK, chọn mức `chi_tiet="short"` / `"full"`
|
|
19
|
+
- Song ngữ Việt / Anh: `ngon_ngu="vi"` / `"en"`
|
|
20
|
+
- Giải **phương trình bậc 1, bậc 2** (trình bày Δ, nghiệm kép, vô nghiệm, vô số nghiệm)
|
|
21
|
+
- Giải **bất phương trình** bậc 1, bậc 2 (tập nghiệm theo dấu Δ)
|
|
22
|
+
- So sánh hai vế (Đúng / Sai) và rút gọn biểu thức chứa ẩn
|
|
23
|
+
|
|
24
|
+
### Kí hiệu SGK
|
|
25
|
+
|
|
26
|
+
- `pretty()` / `xem_truc_tuyen()`: `2^10 + 8//3 + pi/2 <= 5` → `2¹⁰ + ∛8 + π/2 ≤ 5`
|
|
27
|
+
- Đọc được kí hiệu **Unicode khi nhập**: `√`, `∛`, `∜`, `π`, `≤`, `≥`, `×`, `÷`, `²`, `³`, `½`, `−`...
|
|
28
|
+
- `chuan_hoa()` xuất lại biểu thức ở dạng ASCII tường minh: `√16 + π` → `can(16, 2) + pi`
|
|
29
|
+
|
|
30
|
+
### Hàm bổ trợ
|
|
31
|
+
|
|
32
|
+
- Lượng giác `sin`, `cos`, `tan`, `cot`, `asin`, `acos`, `atan` — bảng giá trị chính xác, theo độ hoặc radian
|
|
33
|
+
- `ln`, `log`, `log2`, `log10`, `exp`, `sqrt`, `can(a[,b])`, `abs`, `floor`, `ceil`, `round`, `gcd`, `lcm`, `min`, `max`, `mod`, giai thừa `n!`, phần trăm `n%`
|
|
34
|
+
|
|
35
|
+
### GUI (tuỳ chọn — `pip install msts[gui]`)
|
|
36
|
+
|
|
37
|
+
- `msts.MathLabel` — nhãn hiển thị toán học, tự chọn font đẹp nhất trên máy
|
|
38
|
+
- `msts.StepsBox` — khung hiển thị các bước giải
|
|
39
|
+
- `msts.chon_font_toan`, `msts.gan_xem_truc_tiep` — tiện ích font và xem trước trực tiếp
|
|
40
|
+
- App demo máy tính hoàn chỉnh trong `examples/demo_may_tinh.py`
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Hướng dẫn phát hành (upload) msts lên PyPI
|
|
2
|
+
|
|
3
|
+
Sau khi làm theo các bước dưới đây, người dùng chỉ cần:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
pip install msts
|
|
7
|
+
python -c "import msts; print(msts.solve('x^2 - 5x + 6 = 0'))"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
> Tên `msts` trên PyPI **còn trống** lúc kiểm tra ngày 2026-11-12.
|
|
11
|
+
> PyPI cấp tên theo thứ tự ai đăng trước thì được — nên hoàn thiện và đăng sớm.
|
|
12
|
+
|
|
13
|
+
## 0. Chuẩn bị (chỉ làm một lần)
|
|
14
|
+
|
|
15
|
+
1. Đăng kí tài khoản tại <https://pypi.org/account/register/> và bật xác thực 2 bước.
|
|
16
|
+
2. Tạo API token tại <https://pypi.org/manage/account/token/> (scope: *Entire account*),
|
|
17
|
+
sao chép chuỗi token (dạng `pypi-...`).
|
|
18
|
+
3. **Sửa thông tin tác giả** trong `pyproject.toml` cho đúng bạn (bắt buộc trước khi đăng):
|
|
19
|
+
|
|
20
|
+
```toml
|
|
21
|
+
authors = [
|
|
22
|
+
{ name = "Tên của bạn", email = "ban@email.com" },
|
|
23
|
+
]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
(Có thể thêm mục `[project.urls]` với `Homepage` / `Repository` trỏ về repo GitHub/GitLab của bạn.)
|
|
27
|
+
|
|
28
|
+
## 1. Build gói
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
cd msts # thư mục chứa pyproject.toml
|
|
32
|
+
python -m pip install --upgrade build
|
|
33
|
+
python -m build
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Kết quả: `dist/msts-1.0.0.tar.gz` (sdist) và `dist/msts-1.0.0-py3-none-any.whl` (wheel).
|
|
37
|
+
|
|
38
|
+
## 2. Kiểm tra gói trước khi đăng
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
python -m pip install --upgrade twine
|
|
42
|
+
twine check dist/*
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Phải nhận được `PASSED` cho cả hai file. Nên tự thử nghiệm thêm:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
python -m venv /tmp/thu_nghiem
|
|
49
|
+
/tmp/thu_nghiem/bin/pip install dist/msts-1.0.0-py3-none-any.whl
|
|
50
|
+
/tmp/thu_nghiem/bin/python -m msts # demo console
|
|
51
|
+
/tmp/thu_nghiem/bin/python tests/test_msts.py # bộ test logic
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 3. Tập dượt trên TestPyPI (khuyến nghị lần đầu)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
twine upload --repository testpypi dist/*
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
(Tài khoản TestPyPI riêng tại <https://test.pypi.org/>; nếu dùng token thì tạo token trên TestPyPI.)
|
|
61
|
+
|
|
62
|
+
Kiểm tra trang dự án tại `https://test.pypi.org/project/msts/` rồi thử cài:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pip install --index-url https://test.pypi.org/simple/ msts
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 4. Đăng lên PyPI chính thức
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
twine upload dist/*
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
- Twine sẽ hỏi username: nhập `__token__`, password: dán chuỗi token `pypi-...`
|
|
75
|
+
(hoặc lưu sẵn trong file `~/.pypirc` để không phải gõ lại mỗi lần).
|
|
76
|
+
|
|
77
|
+
Sau khi đăng thành công, trang dự án nằm tại: `https://pypi.org/project/msts/`
|
|
78
|
+
|
|
79
|
+
## 5. Phát hành bản mới sau này
|
|
80
|
+
|
|
81
|
+
1. Tăng `version` trong `pyproject.toml` (ví dụ `1.0.1`, `1.1.0`...) — PyPI **không cho phép đè** lên version đã đăng.
|
|
82
|
+
2. Ghi bổ sung vào `CHANGELOG.md`.
|
|
83
|
+
3. Xoá thư mục `dist/` cũ, chạy lại `python -m build`, rồi `twine upload dist/*`.
|
|
84
|
+
|
|
85
|
+
## Ghi chú thêm
|
|
86
|
+
|
|
87
|
+
- **Phần lõi không có bất kì dependency nào** — chỉ cần Python chuẩn; người dùng cài
|
|
88
|
+
`pip install msts[gui]` nếu muốn dùng widget customtkinter.
|
|
89
|
+
- File `dist/` và `*.egg-info/` đã có trong `.gitignore` — đừng commit lên git.
|
|
90
|
+
- Nếu twine báo lỗi `File already exists` nghĩa là version đó đã đăng rồi — tăng version rồi build lại.
|
msts-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 msts contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
msts-1.0.0/MANIFEST.in
ADDED
msts-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: msts
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Máy Tính Toán Học Thông Minh — tính chính xác bằng phân số, trình bày từng bước giải, kí hiệu SGK (√, ∛, π, ≤), giải phương trình / bất đẳng thức, widget customtkinter
|
|
5
|
+
Author: VVT
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Keywords: math,calculator,exact-arithmetic,fraction,sqrt,radical,step-by-step,equation,inequality,quadratic,sgk,vietnam,education,textbook
|
|
8
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
9
|
+
Classifier: Intended Audience :: Education
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Education
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Provides-Extra: gui
|
|
24
|
+
Requires-Dist: customtkinter>=5.2; extra == "gui"
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
# msts — Máy Tính Toán Học Thông Minh
|
|
28
|
+
|
|
29
|
+
Thư viện Python **thuần chuẩn** (không cần cài thêm bất kì thư viện nào) dành cho bài tập toán kiểu sách giáo khoa Việt Nam:
|
|
30
|
+
|
|
31
|
+
- **Tính chính xác tuyệt đối** bằng phân số — không bao giờ gặp `0.1 + 0.2 = 0.30000000000000004`
|
|
32
|
+
- **Trình bày từng bước giải** như bài làm trên bảng, song ngữ Việt / Anh
|
|
33
|
+
- **Biến kí hiệu nhập sang dạng SGK**: `2^10` → `2¹⁰`, `8//3` → `∛8`, `pi/2` → `π/2`, `<=` → `≤`
|
|
34
|
+
- **Giải phương trình / bất phương trình** bậc 1, bậc 2 (có trình bày Δ, tập nghiệm...)
|
|
35
|
+
- Căn thức, π, e giữ **dạng chính xác** và tự rút gọn: `√8` → `2√2`, `1/(√2+1)` → `√2 − 1`
|
|
36
|
+
- Số thập phân vô tỉ tuần hoàn nhận diện được: `1/3` → `0.(3)` (kiểu SGK: `0,(3)`)
|
|
37
|
+
- Widget **customtkinter** để làm app máy tính thông minh (tuỳ chọn)
|
|
38
|
+
|
|
39
|
+
## Cài đặt
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install msts # phần lõi — chỉ cần Python chuẩn
|
|
43
|
+
pip install "msts[gui]" # kèm widget customtkinter cho phần GUI
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Yêu cầu Python 3.9 trở lên. Chạy thử nhanh sau khi cài: gõ lệnh `msts` (demo console).
|
|
47
|
+
|
|
48
|
+
## Bắt đầu nhanh
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
>>> import msts
|
|
52
|
+
|
|
53
|
+
>>> msts.solve("0.1 + 0.2").text # chính xác tuyệt đối, không sai số
|
|
54
|
+
'3/10'
|
|
55
|
+
>>> msts.solve("(1/2 + 1/3) : (1/6)").text
|
|
56
|
+
'5'
|
|
57
|
+
>>> msts.solve("//2 * //8").text # √2 · √8 = √16
|
|
58
|
+
'4'
|
|
59
|
+
>>> msts.solve("2pi + pi").text # π giữ dạng kí hiệu
|
|
60
|
+
'3π'
|
|
61
|
+
>>> msts.solve("1/3").thap_phan() # dạng thập phân (12 chữ số mặc định)
|
|
62
|
+
'0.333333333333…'
|
|
63
|
+
>>> msts.solve("2x + 3 = 7").text # phương trình bậc 1
|
|
64
|
+
'x = 2'
|
|
65
|
+
>>> msts.solve("x^2 - 5x + 6 = 0").text # phương trình bậc 2
|
|
66
|
+
'x = 2 hoặc x = 3'
|
|
67
|
+
>>> msts.solve("2x - 1 >= 3").text # bất phương trình
|
|
68
|
+
'x ≥ 2'
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Trình bày từng bước giải:
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
>>> print(msts.steps("2 + 3*(4-1)").text)
|
|
75
|
+
2 + 3·(4 − 1)
|
|
76
|
+
Bước 1: Tính hiệu: 4 − 1 = 3
|
|
77
|
+
= 2 + 3·3
|
|
78
|
+
Bước 2: Tính tích: 3 · 3 = 9
|
|
79
|
+
= 2 + 9
|
|
80
|
+
Bước 3: Tính tổng: 2 + 9 = 11
|
|
81
|
+
= 11
|
|
82
|
+
Vậy 2 + 3·(4 − 1) = 11
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Biến kí hiệu nhập sang dạng SGK:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
>>> msts.pretty("2^10 + 8//3 + pi/2 <= 5")
|
|
89
|
+
'2¹⁰ + ∛8 + π/2 ≤ 5'
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Xem thêm file `examples/vi_du_su_dung.py` trong kho mã nguồn để có ví dụ cho toàn bộ API.
|
|
93
|
+
|
|
94
|
+
## Bảng kí hiệu khi nhập
|
|
95
|
+
|
|
96
|
+
| Khi nhập | Nghĩa | Ví dụ |
|
|
97
|
+
| --- | --- | --- |
|
|
98
|
+
| `a//b` | căn bậc b của a | `8//3` = ∛8 = 2 |
|
|
99
|
+
| `//a` | căn bậc hai | `//16` = 4 |
|
|
100
|
+
| `a^b`, `a^b^c` | lũy thừa (kết hợp phải) | `2^3^2` = 512 |
|
|
101
|
+
| `pi`, `e` | số π, số e | `2pi + pi` = 3π |
|
|
102
|
+
| `(a/b)` | phân số | `(1/2) + (1/3)` = 5/6 |
|
|
103
|
+
| `/` hoặc `:` | chia | `5 : 2` = 5/2 |
|
|
104
|
+
| `<` `<=` `>` `>=` `!=` | so sánh | `2^3 >= 7` → Đúng |
|
|
105
|
+
| `=` | lập phương trình / BPT | `2x + 3 = 7` |
|
|
106
|
+
| `5!` | giai thừa | `5!` = 120 |
|
|
107
|
+
| `50%` | phần trăm | `50%` = 1/2 |
|
|
108
|
+
| `sin(30)`... | lượng giác (mặc định theo độ) | `sin(30)` = 1/2 |
|
|
109
|
+
| `ln`, `log`, `log2`, `log10`, `exp`, `sqrt`, `can(a[,b])`, `abs`, `floor`, `ceil`, `round`, `gcd`, `lcm`, `min`, `max`, `mod` | hàm bổ trợ | `log2(8)` = 3 |
|
|
110
|
+
|
|
111
|
+
Module cũng **đọc được** kí hiệu Unicode khi nhập: `√16`, `∛8`, `π`, `≤`, `×`, `÷`, `²`, `½`, `−5`...
|
|
112
|
+
|
|
113
|
+
## Cấu hình
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
msts.cau_hinh(kieu_sgk=True) # xuất số kiểu SGK: 0,5 và 0,(3)
|
|
117
|
+
msts.cau_hinh(so_chu_so=15) # số chữ số thập phân (mặc định 12)
|
|
118
|
+
msts.cau_hinh(don_vi="rad") # lượng giác theo radian
|
|
119
|
+
msts.cau_hinh(ngon_ngu="en") # chú thích bước giải tiếng Anh
|
|
120
|
+
msts.cau_hinh(chi_tiet="short") # rút gọn lời giải
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Làm app máy tính với customtkinter
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
import msts
|
|
127
|
+
import customtkinter as ctk
|
|
128
|
+
|
|
129
|
+
app = ctk.CTk()
|
|
130
|
+
|
|
131
|
+
nhan = msts.MathLabel(app, co_chu=26)
|
|
132
|
+
nhan.pack()
|
|
133
|
+
nhan.dat_toan("2^10 + 8//3") # hiển thị '2¹⁰ + ∛8'
|
|
134
|
+
|
|
135
|
+
khung = msts.StepsBox(app, co_chu=17)
|
|
136
|
+
khung.pack()
|
|
137
|
+
khung.hien(msts.steps("x^2 - 5x + 6 = 0")) # hiển thị từng bước giải
|
|
138
|
+
|
|
139
|
+
app.mainloop()
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Các widget có sẵn: `MathLabel`, `StepsBox`, `chon_font_toan`, `gan_xem_truc_tiep` (đổi kí hiệu sang dạng SGK ngay khi gõ). Xem app hoàn chỉnh trong `examples/demo_may_tinh.py`.
|
|
143
|
+
|
|
144
|
+
## English summary
|
|
145
|
+
|
|
146
|
+
`msts` (Máy Tính Toán Học Thông Minh — Smart Math Calculator) is a pure-standard-library Python package for school-style mathematics:
|
|
147
|
+
|
|
148
|
+
- **Exact arithmetic** with fractions — radicals, π and e stay exact (`0.1 + 0.2` → `3/10`, `√8` → `2√2`, `1/(√2+1)` → `√2 − 1`)
|
|
149
|
+
- **Step-by-step solutions** (bilingual Vietnamese / English) for expressions, linear and quadratic equations, and inequalities
|
|
150
|
+
- **Pretty-printing** input into textbook notation: `2^10 + 8//3 + pi/2 <= 5` → `2¹⁰ + ∛8 + π/2 ≤ 5`
|
|
151
|
+
- Extra math functions: trigonometry (degrees/radians), `ln`/`log`/`log2`/`log10`, `exp`, `sqrt`, `gcd`, `lcm`, factorial, percent...
|
|
152
|
+
- Optional **customtkinter** widgets (`MathLabel`, `StepsBox`) for building calculator apps
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
>>> import msts
|
|
156
|
+
>>> msts.solve("x^2 - 5x + 6 = 0").text
|
|
157
|
+
'x = 2 hoặc x = 3'
|
|
158
|
+
>>> msts.steps("2 + 3*(4-1)", ngon_ngu="en").danh_sach[0]
|
|
159
|
+
'Bước 1: Tính hiệu: 4 − 1 = 3'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Chạy test
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
python tests/test_msts.py # 191 test logic (không cần GUI)
|
|
166
|
+
xvfb-run -a python tests/test_gui.py # 17 smoke test GUI (cần customtkinter + Xvfb trên Linux)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Giấy phép
|
|
170
|
+
|
|
171
|
+
MIT — xem file [LICENSE](LICENSE).
|
msts-1.0.0/README.md
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# msts — Máy Tính Toán Học Thông Minh
|
|
2
|
+
|
|
3
|
+
Thư viện Python **thuần chuẩn** (không cần cài thêm bất kì thư viện nào) dành cho bài tập toán kiểu sách giáo khoa Việt Nam:
|
|
4
|
+
|
|
5
|
+
- **Tính chính xác tuyệt đối** bằng phân số — không bao giờ gặp `0.1 + 0.2 = 0.30000000000000004`
|
|
6
|
+
- **Trình bày từng bước giải** như bài làm trên bảng, song ngữ Việt / Anh
|
|
7
|
+
- **Biến kí hiệu nhập sang dạng SGK**: `2^10` → `2¹⁰`, `8//3` → `∛8`, `pi/2` → `π/2`, `<=` → `≤`
|
|
8
|
+
- **Giải phương trình / bất phương trình** bậc 1, bậc 2 (có trình bày Δ, tập nghiệm...)
|
|
9
|
+
- Căn thức, π, e giữ **dạng chính xác** và tự rút gọn: `√8` → `2√2`, `1/(√2+1)` → `√2 − 1`
|
|
10
|
+
- Số thập phân vô tỉ tuần hoàn nhận diện được: `1/3` → `0.(3)` (kiểu SGK: `0,(3)`)
|
|
11
|
+
- Widget **customtkinter** để làm app máy tính thông minh (tuỳ chọn)
|
|
12
|
+
|
|
13
|
+
## Cài đặt
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pip install msts # phần lõi — chỉ cần Python chuẩn
|
|
17
|
+
pip install "msts[gui]" # kèm widget customtkinter cho phần GUI
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Yêu cầu Python 3.9 trở lên. Chạy thử nhanh sau khi cài: gõ lệnh `msts` (demo console).
|
|
21
|
+
|
|
22
|
+
## Bắt đầu nhanh
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
>>> import msts
|
|
26
|
+
|
|
27
|
+
>>> msts.solve("0.1 + 0.2").text # chính xác tuyệt đối, không sai số
|
|
28
|
+
'3/10'
|
|
29
|
+
>>> msts.solve("(1/2 + 1/3) : (1/6)").text
|
|
30
|
+
'5'
|
|
31
|
+
>>> msts.solve("//2 * //8").text # √2 · √8 = √16
|
|
32
|
+
'4'
|
|
33
|
+
>>> msts.solve("2pi + pi").text # π giữ dạng kí hiệu
|
|
34
|
+
'3π'
|
|
35
|
+
>>> msts.solve("1/3").thap_phan() # dạng thập phân (12 chữ số mặc định)
|
|
36
|
+
'0.333333333333…'
|
|
37
|
+
>>> msts.solve("2x + 3 = 7").text # phương trình bậc 1
|
|
38
|
+
'x = 2'
|
|
39
|
+
>>> msts.solve("x^2 - 5x + 6 = 0").text # phương trình bậc 2
|
|
40
|
+
'x = 2 hoặc x = 3'
|
|
41
|
+
>>> msts.solve("2x - 1 >= 3").text # bất phương trình
|
|
42
|
+
'x ≥ 2'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Trình bày từng bước giải:
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
>>> print(msts.steps("2 + 3*(4-1)").text)
|
|
49
|
+
2 + 3·(4 − 1)
|
|
50
|
+
Bước 1: Tính hiệu: 4 − 1 = 3
|
|
51
|
+
= 2 + 3·3
|
|
52
|
+
Bước 2: Tính tích: 3 · 3 = 9
|
|
53
|
+
= 2 + 9
|
|
54
|
+
Bước 3: Tính tổng: 2 + 9 = 11
|
|
55
|
+
= 11
|
|
56
|
+
Vậy 2 + 3·(4 − 1) = 11
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Biến kí hiệu nhập sang dạng SGK:
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
>>> msts.pretty("2^10 + 8//3 + pi/2 <= 5")
|
|
63
|
+
'2¹⁰ + ∛8 + π/2 ≤ 5'
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Xem thêm file `examples/vi_du_su_dung.py` trong kho mã nguồn để có ví dụ cho toàn bộ API.
|
|
67
|
+
|
|
68
|
+
## Bảng kí hiệu khi nhập
|
|
69
|
+
|
|
70
|
+
| Khi nhập | Nghĩa | Ví dụ |
|
|
71
|
+
| --- | --- | --- |
|
|
72
|
+
| `a//b` | căn bậc b của a | `8//3` = ∛8 = 2 |
|
|
73
|
+
| `//a` | căn bậc hai | `//16` = 4 |
|
|
74
|
+
| `a^b`, `a^b^c` | lũy thừa (kết hợp phải) | `2^3^2` = 512 |
|
|
75
|
+
| `pi`, `e` | số π, số e | `2pi + pi` = 3π |
|
|
76
|
+
| `(a/b)` | phân số | `(1/2) + (1/3)` = 5/6 |
|
|
77
|
+
| `/` hoặc `:` | chia | `5 : 2` = 5/2 |
|
|
78
|
+
| `<` `<=` `>` `>=` `!=` | so sánh | `2^3 >= 7` → Đúng |
|
|
79
|
+
| `=` | lập phương trình / BPT | `2x + 3 = 7` |
|
|
80
|
+
| `5!` | giai thừa | `5!` = 120 |
|
|
81
|
+
| `50%` | phần trăm | `50%` = 1/2 |
|
|
82
|
+
| `sin(30)`... | lượng giác (mặc định theo độ) | `sin(30)` = 1/2 |
|
|
83
|
+
| `ln`, `log`, `log2`, `log10`, `exp`, `sqrt`, `can(a[,b])`, `abs`, `floor`, `ceil`, `round`, `gcd`, `lcm`, `min`, `max`, `mod` | hàm bổ trợ | `log2(8)` = 3 |
|
|
84
|
+
|
|
85
|
+
Module cũng **đọc được** kí hiệu Unicode khi nhập: `√16`, `∛8`, `π`, `≤`, `×`, `÷`, `²`, `½`, `−5`...
|
|
86
|
+
|
|
87
|
+
## Cấu hình
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
msts.cau_hinh(kieu_sgk=True) # xuất số kiểu SGK: 0,5 và 0,(3)
|
|
91
|
+
msts.cau_hinh(so_chu_so=15) # số chữ số thập phân (mặc định 12)
|
|
92
|
+
msts.cau_hinh(don_vi="rad") # lượng giác theo radian
|
|
93
|
+
msts.cau_hinh(ngon_ngu="en") # chú thích bước giải tiếng Anh
|
|
94
|
+
msts.cau_hinh(chi_tiet="short") # rút gọn lời giải
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Làm app máy tính với customtkinter
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
import msts
|
|
101
|
+
import customtkinter as ctk
|
|
102
|
+
|
|
103
|
+
app = ctk.CTk()
|
|
104
|
+
|
|
105
|
+
nhan = msts.MathLabel(app, co_chu=26)
|
|
106
|
+
nhan.pack()
|
|
107
|
+
nhan.dat_toan("2^10 + 8//3") # hiển thị '2¹⁰ + ∛8'
|
|
108
|
+
|
|
109
|
+
khung = msts.StepsBox(app, co_chu=17)
|
|
110
|
+
khung.pack()
|
|
111
|
+
khung.hien(msts.steps("x^2 - 5x + 6 = 0")) # hiển thị từng bước giải
|
|
112
|
+
|
|
113
|
+
app.mainloop()
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Các widget có sẵn: `MathLabel`, `StepsBox`, `chon_font_toan`, `gan_xem_truc_tiep` (đổi kí hiệu sang dạng SGK ngay khi gõ). Xem app hoàn chỉnh trong `examples/demo_may_tinh.py`.
|
|
117
|
+
|
|
118
|
+
## English summary
|
|
119
|
+
|
|
120
|
+
`msts` (Máy Tính Toán Học Thông Minh — Smart Math Calculator) is a pure-standard-library Python package for school-style mathematics:
|
|
121
|
+
|
|
122
|
+
- **Exact arithmetic** with fractions — radicals, π and e stay exact (`0.1 + 0.2` → `3/10`, `√8` → `2√2`, `1/(√2+1)` → `√2 − 1`)
|
|
123
|
+
- **Step-by-step solutions** (bilingual Vietnamese / English) for expressions, linear and quadratic equations, and inequalities
|
|
124
|
+
- **Pretty-printing** input into textbook notation: `2^10 + 8//3 + pi/2 <= 5` → `2¹⁰ + ∛8 + π/2 ≤ 5`
|
|
125
|
+
- Extra math functions: trigonometry (degrees/radians), `ln`/`log`/`log2`/`log10`, `exp`, `sqrt`, `gcd`, `lcm`, factorial, percent...
|
|
126
|
+
- Optional **customtkinter** widgets (`MathLabel`, `StepsBox`) for building calculator apps
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
>>> import msts
|
|
130
|
+
>>> msts.solve("x^2 - 5x + 6 = 0").text
|
|
131
|
+
'x = 2 hoặc x = 3'
|
|
132
|
+
>>> msts.steps("2 + 3*(4-1)", ngon_ngu="en").danh_sach[0]
|
|
133
|
+
'Bước 1: Tính hiệu: 4 − 1 = 3'
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Chạy test
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
python tests/test_msts.py # 191 test logic (không cần GUI)
|
|
140
|
+
xvfb-run -a python tests/test_gui.py # 17 smoke test GUI (cần customtkinter + Xvfb trên Linux)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Giấy phép
|
|
144
|
+
|
|
145
|
+
MIT — xem file [LICENSE](LICENSE).
|