Tiểu luận môn Lập trình Python đề tài "Phân tích kết quả game Sudoku ứng dụng Framework Django"

Tiểu luận môn Lập trình Python đề tài "Phân tích kết quả game Sudoku ứng dụng Framework Django" của Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|37054152
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HCM
KHOA CÔNG NGHỆ THÔNG TIN
TÊN HỌC PHẦN: Lập trình Python
ĐỀ TÀI: PHÂN TÍCH KẾT QUẢ TỪ GAME
SUDOKU ỨNG DỤNG FRAMEWORK DJANGO
MỞ ĐẦU
Trong thời đại công nghiệp 4.0 ngày nay, việc sử dụng lập trình để phân tích dữ
liệu không chỉ là xu hướng mà còn là kỹ năng quan trọng đối với nhiều ngành nghề.
Trong quá trình học môn lập trình Python, chúng em thấy rõ về sức mạnh và linh hoạt
của ngôn ngữ này trong việc xử lý và phân tích dữ liệu. Điềuy đã khuyến khích
chúng em tìm kiếm cơ hội để áp dụng kiến thức đã học vào một đồ án thực tế.
Trong bối cảnh đó, lựa chọn của chúng em là tạo một đồ án sử dụng dữ liệu từ
trò chơi Sudoku và áp dụng framework Django để phân tích các thuộc tính có thể ảnh
hưởng đến kết quả của trò chơi. Sudoku không chỉ là một trò chơi giải đố logic phổ
biến mà còn cung cấp một lượng lớn dữ liệu về cách người chơi tiếp cận và giải quyết
vấn đề.
Bằng cách này, đồ án không chỉ là một cơ hội để áp dụng kiến thức lập trình
Python mà còn là một cơ hội để nghiên cứu sâu hơn về cách con người giải quyết vấn
đề và ra quyết định trong môi trường trò chơi. Chúng em hy vọng rằng thông qua việc
phân tích dữ liệu từ trò chơi Sudoku, đồ án sẽ giúp chúng em hiểu rõ hơn về quy trình
lOMoARcPSD|37054152
ra quyết định, cũng như cung cấp cái nhìn tổng quan về khả năng giải quyết vấn đề của
người chơi Sudoku.
Sau cùng nhóm em lựa chọn đề tài: “Phân tích kết quả từ game Sudoku ứng
dụng framework Django” để khám phá và phân tích dữ liệu trong trò chơi Sudoku
thông qua framework Django, để có cái nhìn chi tiết và độc đáo về cách mà lập trình
Python có thể được ứng dụng trong lĩnh vực giải đố logic và khoa học dữ liệu.
CHƯƠNG 1
CƠ SỞ LÝ THUYẾT CỦA ĐỀ TÀI
1.1. Các khái niệm cơ bản về lệnh của ngôn ngữ python
1.1.1. Các phép toán:
Phép toán là các hành động thực hiện trên dữ liệu. Python hỗ trợ phép toán cơ
bản như cộng, trừ, nhân, chia và các phép toán khác.
Minh họa:
lOMoARcPSD|37054152
1.1.2. Chuỗi
Trong lập trình, một chuỗi (string) là một dãy các ký tự, được đặt trong dấu
nháy đơn ('...') hoặc dấu nháy kép ("..."). Chuỗi là một kiểu dữ liệu cơ bản trong
Python và được sử dụng rộng rãi để lưu trữ và xử lý văn bản.
-Khai báo chuỗi: Chuỗi được khai báo bằng cách đặt các ký tự trong dấu nháy
đơn hoặc dấu nháy kép.
-Truy cập phần tử trong chuỗi: Các phần tử trong chuỗi có thể được truy cập
bằng chỉ số, bắt đầu từ 0.
-Cắt chuỗi (slicing): Cắt chuỗi là quá trình lấy một phần của chuỗi dựa trên một
phạm vi chỉ định.
-Độ dài của chuỗi: Độ dài của một chuỗi là số lượng ký tự trong chuỗi đó.
-Ghép chuỗi: Hai chuỗi có thể được ghép lại với nhau bằng toán tử "+".
-Thay thế phần của chuỗi: Phương thức replace() được sử dụng để thay thế một
phần của chuỗi bằng một giá trị khác.
lOMoARcPSD|37054152
-Tách chuỗi thành danh sách: Phương thức split() được sử dụng để tách chuỗi
thành một danh sách các phần tử dựa trên một ký tự phân tách.
-Định dạng chuỗi: Chuỗi có thể được định dạng bằng cách sử dụng các phương
thức như format() hoặc f-strings.
Minh họa:
1.1.3. Lệnh
Trong Python, lệnh là các câu lệnh hoặc đoạn mã được sử dụng để thực hiện các
hành động cụ thể.
-Lệnh gán (Assignment statement): Lệnh gán được sử dụng để gán giá trị cho
một biến.
-Lệnh điều kiện (Conditional statement): Lệnh điều kiện được sử dụng để thực
hiện các hành động khác nhau dựa trên một điều kiện.
-Lệnh lặp (Loop statement): Lệnh lặp được sử dụng để lặp lại một khối mã
nhiều lần.
-Lệnh lặp for: Lặp qua một tập hợp các phần tử.
-Lệnh lặp while: Lặp lại một khối mã cho đến khi một điều kiện không còn
đúng.
lOMoARcPSD|37054152
-Lệnh hàm (Function statement): Lệnh hàm được sử dụng để định nghĩa và tái
sử dụng một khối mã.
-Lệnh nhập và xuất (Input and Output statement): Lệnh nhập và xuất được sử
dụng để tương tác với người dùng hoặc đọc/ghi dữ liệu từ/đến các tệp tin.
-Lệnh import (Import statement): Lệnh import được sử dụng để nhập các
module hoặc thư viện bên ngoài để sử dụng các chức năng hoặc lớp đã được định
nghĩa sẵn.
Minh họa:
1.1.4. Function
Trong lập trình, hàm là một khối mã được đặt tên và có thể được gọi để thực hiện
một tác vụ cụ thể. Định nghĩa hàm giúp tái sử dụng mã và tạo ra các khối lệnh có
cấu trúc trong chương trình.
- Cú pháp định nghĩa hàm: Để định nghĩa một hàm, sử dụng từ khóa def,
sau đólà tên hàm và dấu ngoặc đơn chứa các tham số (nếu có). Sau đó, dòng tiếp theo
là khối mã trong thân hàm được thụt lề.
- Gọi hàm: Để gọi một hàm, chỉ cần sử dụng tên hàm và truyền các đối số
tương ứng (nếu có) vào trong dấu ngoặc đơn.
Minh họa:
lOMoARcPSD|37054152
1.1.5. List: Danh sách
Trong Python, danh sách là một kiểu dữ liệu dùng để lưu trữ và quản lý tập hợp
các phần tử. Danh sách là một cấu trúc dữ liệu có thể thay đổi (mutable) và cho phép
lưu trữ các phần tử có cùng hoặc khác kiểu dữ liệu. Để tạo một danh sách trong
Python, chúng ta sử dụng dấu ngoặc vuông và các phần tử của danh sách được phân
tách bằng dấu phẩy.
Minh họa:
1.1.6. Bộ dữ liệu: Tuple
Trong Python, tuple là một kiểu dữ liệu tương tự như danh sách (list), được sử
dụng để lưu trữ và quản lý một tập hợp các phần tử. Tuy nhiên, tuple là một cấu trúc
dữ liệu không thay đổi (immutable), có nghĩa là các phần tử của tuple không thể được
thay đổi sau khi nó được khởi tạo. Để tạo một tuple trong Python, chúng ta sử dụng
dấu ngoặc đơn và các phần tử của tuple được phân tách bằng dấu phẩy.
Minh họa:
lOMoARcPSD|37054152
1.1.7. Tập hợp: Set
Trong Python, set (tập hợp) là một kiểu dữ liệu được sử dụng để lưu trữ một tập
hợp các phần tử duy nhất và không có thứ tự. Set trong Python được triển khai dựa
trên cấu trúc dữ liệu tập hợp trong toán học. Để tạo một set trong Python, chúng ta sử
dụng dấu ngoặc nhọn {} hoặc hàm set().
Minh họa:
lOMoARcPSD|37054152
1.1.8. Từ điển: Dictionary
Trong Python, dictionary (từ điển) là một kiểu dữ liệu được sử dụng để lưu trữ các cặp
key-value (khóa-giá trị) không có thứ tự. Dictionary trong Python được triển khai dựa
trên cấu trúc dữ liệu bảng băm (hash table). Để tạo một dictionary trong Python, chúng
ta sử dụng dấu ngoặc nhọn {} hoặc hàm dict() và cung cấp các cặp key-value trong
dấu ngoặc đơn hoặc dấu ngoặc nhọn.
Minh họa:
1.1.9. Module
Trong Python, module một tập hợp các định nghĩa (hàm, lớp, biến) câu
lệnh được viết trong một file có phần mở rộng .py. Module cho phép bạn tổ chức, tái
sử dụng phân chia nguồn trong c phần khác nhau của một chương trình
Python.
Minh họa:
lOMoARcPSD|37054152
1.1.10. Package
Package trong Python là một thư mục chứa một hoặc nhiều modules hay các
package khác nhau, nó được tạo ra nhằm mục đích phân bố các modules có cùng chức
năng hay một cái gì đó, để dễ quản lý source code. Để tạo ra một package trong python
thì mọi người chỉ cần tạo ra một thư mục, với tên thư mục chính là tên của package và
trong thư mục này nhất định phải có một file có tên __init__.py. File __init__.pyy
nó giống như các constructor, và nó sẽ được gọi ra đầu tiên khi chúng ta import
package đó.
Minh họa:
1.1.11. Lớp
Trong Python, lớp (class) là một cấu trúc dữ liệu trong hướng đối tượng
(Object-Oriented Programming - OOP) cho phép bạn định nghĩa các đối tượng mới
với thuộc tính (attributes) và phương thức (methods) riêng. Lớp là một bản thiết kế
(template) cho các đối tượng, và từ lớp, bạn có thể tạo ra nhiều đối tượng (instances)
khác nhau.
Minh họa:
1.1.12. Xử lý ngoại lệ
Xử lý ngoại lệ (exception handling) là một kỹ thuật trong lập trình cho phép bạn
ứng phó với các tình huống bất thường (ngoại lệ) xảy ra trong quá trình thực thi
chương trình. Khi một ngoại lệ xảy ra, nó sẽ "ném" (throw) một đối tượng ngoại lệ và
lOMoARcPSD|37054152
dừng thực thi bình thường của chương trình. Bằng cách sử dụng xử lý ngoại lệ, bạn có
thể kiểm soát và xử lý các ngoại lệ này một cách cụ thể.
Trong Python, xử lý ngoại lệ được thực hiện bằng cách sử dụng các khối
tryexcept.
Minh họa:
1.2. Các thư viện cơ bản dùng trong python
1.2.1. Pandas
Pandas là một thư viện phổ biến trong ngôn ngữ lập trình Python được sử dụng
rộng rãi trong phân tích dữ liệu và xử lý dữ liệu có cấu trúc. Nó cung cấp các cấu trúc
dữ liệu linh hoạt như DataFrame và Series, cho phép bạn thực hiện nhiều thao tác
mạnh mẽ trên dữ liệu. Một số khái niệm và tính năng quan trọng của Pandas:
DataFrame, Series, đọc và ghi dữ liệu, xử lý dữ liệu, truy vấn và lọc dữ liệu, áp dụng
phép biến đổi và tính toán, trực quan hóa dữ liệu.
Minh họa:
1.2.2. NumPy
NumPy (Numerical Python) là một thư viện quan trọng trong ngôn ngữ lập trình
Python được sử dụng rộng rãi trong tính toán số học và xử lý dữ liệu khoa học. Nó
cung cấp các cấu trúc dữ liệu và công cụ để làm việc với mảng đa chiều và thực hiện
các phép toán số học trên chúng. Một số khái niệm và tính năng quan trọng của
lOMoARcPSD|37054152
NumPy: ndarray, Vectorization, Broadcasting, Hàm Universal (ufunc), đọc và ghi dữ
liệu, trực quan hóa dữ liệu.
Minh họa:
1.2.3. Matplotlib
Matplotlib là một thư viện trực quan hóa dữ liệu phổ biến trong ngôn ngữ lập
trình Python. Nó cung cấp các công cụ mạnh mẽ để tạo ra các biểu đồ, sơ đồ và hình
ảnh để trực quan hóa dữ liệu một cách dễ dàng và linh hoạt. Một số khái niệm và tính
năng quan trọng của Matplotlib:
-Figure và Axes: Figure là một khung chứa tất cả các thành phần của một biểu
đồ hoặc hình ảnh. Trong một Figure, bạn có thể chứa nhiều Axes (khu vực trục) - nơi
thực sự vẽ các đồ thị và sơ đồ. Axes cung cấp các phương thức để tạo các loại biểu đồ
khác nhau và tùy chỉnh các thành phần của chúng.
Minh họa:
lOMoARcPSD|37054152
1.2.4. Random
Thư viện random trong Python cung cấp các chức năng để sinh số ngẫu nhiên
và thực hiện các thao tác ngẫu nhiên khác. Nó giúp tạo ra ngẫu nhiên số nguyên, số
thực, chuỗi, và lựa chọn ngẫu nhiên từ danh sách.
Minh họa:
1.2. Các khái niệm cơ bản về framework Django
CHƯƠNG 2
ỨNG DỤNG DJANGO TẠO TRÒ CHƠI SUDOKU ĐƠN GIẢN
1. Giới thiệu sơ lược về logic trò chơi Sudoku
Trò chơi xuất phát từ hai chế độ lựa chọn, bảng 4x4 hoặc bảng 9x9, ở mỗi chế
độ sẽ có các điểm khác và giống nhau như sau
lOMoARcPSD|37054152
*Giống nhau:
- Độ khó khi chơi: dễ( easy) khó( hard) trung bình( medium)
- Nút bắt đầu( start game), nút làm mới( new game), nút trợ giúp( with help),
- Cách chơi là làm sao điền vào số thích hợp ở ô trống phù hợp với luật chơi
Sudoku
*Khác nhau:
- Với bảng 4x4, thời gian chơi giới hạn là 2 phút
- Với bảng 9x9, thời gian chơi giới hạn là 7 phút
2. Sơ đồ tổng quát của trò chơi Sudoku
Giải thích sơ đồ: Trò chơi được phát triển hoàn toàn trên Django framework
được liên kết với cơ sở dữ liệu.
3. Lập trình và chi tiết các tập tin
3.1. Giao diện( view)
Trang login:
DJANGO
lOMoARcPSD|37054152
Trang 4x4:
Trang 9x9:
lOMoARcPSD|37054152
3.2. Mã xử lý( controller)
- urls.py( toàn đồ án)
from django.contrib import admin from django.urls
import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('home/', include('home.urls')) ]
- urls.py( một ứng dụng( app) )
from django.urls import path from . import
views urlpatterns = [
path('', views.index2),
path('4x4', views.index),
path('9x9', views.index1),
path('save_info_first', views.save_info_first, name='save_info_first'),
path('save_player', views.save_player, name='save_player'), path('send_data_to_script',
views.send_data_to_script, name='send_data_to_script'), ]
lOMoARcPSD|37054152
- views.py
from django.shortcuts import render from django.http
import HttpResponse from django.http import
JsonResponse
from django.views.decorators.csrf import csrf_exempt from .models import
gameplayer_info from django.core.cache import cache import datetime
import json
# Create your views here. def
index(request):
return render(request, 'index2.html') def index1(request):
return render(request, 'index.html') def index2(request):
return render(request, 'login.html')
@csrf_exempt def
save_info_first(request):
if request.method == 'POST':
try:
# Parse JSON data from the request
infoFirst = json.loads(request.body)
cache.set('info_script', infoFirst)
return JsonResponse({'status': 'success'})
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)})
return JsonResponse({'status': 'error', 'message': 'Invalid request method'})
@csrf_exempt def
save_player(request):
if request.method == 'POST':
try:
# Parse JSON data from the request
player_data = json.loads(request.body)
# L<y d liu t cache sA dng tên khóa 'my_custom_key_for_script1'
infoFirst = cache.get('info_script', {}) # Save player data to the
database
combined_data = {**infoFirst,**player_data} print(combined_data)
player = gameplayer_info(**combined_data)
player.save()
return JsonResponse({'status': 'success'})
lOMoARcPSD|37054152
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)})
return JsonResponse({'status': 'error', 'message': 'Invalid request method'})
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt from django.core.cache
import cache
@csrf_exempt def
send_data_to_script(request): try:
# L<y d liu t cache
data_name = cache.get('info_script', {})
data_to_send = data_name.get('name','')
print(data_to_send)
# GAi d liu dửới dng JSON trong HTTP response return
JsonResponse({'status': 'success', 'value': data_to_send})
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)})
- models.py
from django.db import models # Create
your models here.
class gameplayer_info(models.Model): age =
models.IntegerField()
bdate = models.DateField()
gmail = models.TextField()
level = models.TextField()
name = models.TextField() sex =
models.TextField()
time_now = models.IntegerField()
time_play = models.IntegerField()
Đó là các tệp mã được viết bằng python của đồ án, ngoài ra còn các mã viết bằng
HTML, CSS, JAVASCRIPT, dùng để tạo giao diện và hoạt động của trò chơi. Toàn bộ
mã em xin được để ở link github phía dưới.
3.3. Mã nguồn của đồ án
- Link github:
lOMoARcPSD|37054152
CHƯƠNG 3 SỬ DỤNG PYTHON PHÂN TÍCH TẬP DỮ LIỆU THU ĐƯỢC TỪ
TRÒ CHƠI SUDOKU
2.1. Mục đích phân tích
Với mục đích ban đầu, sử dụng python để phân tích các yếu tố có thể ảnh
hưởng đến kết quả chơi và hoàn thành trò chơi Sudoku mà chủ yếu tập trung vào vấn
đề: “Trạng thái tinh thần tốt nhất của người chơi”. Và chúng em đã lựa chọn các thuộc
tính có thể ảnh hưởng đến kết quả chơi ở chế độ 9x9, mục đích chủ yếu chỉ là đưa ra
các đánh giá tương đối về các sự ảnh hưởng đó.
2.2. Tập dữ liệu
Tệp dữ liệu được ghi ở phia trên.
Các trường dữ liệu và giải thích:
- name( tên người chơi): tên được lấy từ đăng nhập
- age( tuổi người chơi): tuổi được lấy từ đăng nhập
- bdate( ngày sinh): ngày sinh được lấy từ đăng nhập
- sex( giới tính): giới tính được lấy từ đăng nhập
- level( độ khó): gồm: easy – hard medium
- play_time( thời gian chơi): dao động từ 0 đến 7 phút, nếu 0 phút thì
chứng tỏ người chơi chưa hoàn thành
- completed (hoàn thành hay không): nếu ở thuộc tính ‘play_time’
giá trị là 0 thì completed mang giá trị là 0, ngược lại là 1
-time_now( thời gian hiện tại): thời gian hiện tại của người chơi, chỉ sử dụng
giờ
2.3. Mô tả phân tích
Để có một góc nhìn tổng quan và tường minh, nhóm em chia phân tích này này
thành hai phần:
- Theo từng độ khó: nghĩa là ở mỗi độ khó sẽ có những phân tích chỉ
mang tính đặc trưng ở mỗi độ khó, không ảnh hưởng đến độ khó khác, các phân tịch ở
phần này gồm có:
+
- Toàn bộ tập dữ liệu, chứa toàn bộ các độ khó: nghĩa là phân tích toàn bộ
dữ liệu, các phân tích ở phần này gồm có:
+
lOMoARcPSD|37054152
2.4. Chi tiết phân tích và nhận xét
Các phân tích sẽ được thực hiện lần lượt theo thứ tự từ rộng đến thu hẹp vào
trọng tâm việc: “Trạng thái tinh thần tốt nhất”.
2.4.1. Theo từng độ k
*Easy *Hard *Medium
2.4.2. Toàn bộ độ khó
2.5. Tổng kết các phân tích
lOMoARcPSD|37054152
KẾT LUẬN
Học môn học lập trình Python đã mang lại cho chúng em một trải nghiệm đầy
thú vị và kiến thức sâu sắc về ngôn ngữ lập trình này. Không chỉ giúp chúng em làm
quen với cú pháp và cấu trúc của Python, mà còn mở rộng tầm nhìn về những ứng
dụng to lớn của ngôn ngữ này trong lĩnh vực trí tuệ nhân tạo (AI) và phân tích dữ liệu.
Python, với cộng đồng lớn và hỗ trợ đa dạng, đã cho phép chúng em nhận thức
sâu sắc về sức mạnh của nó trong lĩnh vực trí tuệ nhân tạo. Việc học về thư viện như
TensorFlow và PyTorch đã mở ra cánh cửa cho việc hiểu và triển khai các mô hình
máy học và deep learning. Chúng em đã có cơ hội xây dựng và huấn luyện các mô
hình để giải quyết các vấn đề thực tế, từ nhận diện hình ảnh đến dự đoán chuỗi thời
gian.
Trong lĩnh vực phân tích dữ liệu, Python và các thư viện như Pandas, NumPy
và Matplotlib đã là công cụ quan trọng giúp chúng em xử lý và hiểu sâu dữ liệu.
Chúng em đã áp dụng kiến thức này để phân tích tập dữ liệu từ trò chơi Sudoku và rút
ra những thông tin quan trọng về cách mọi người chơi và giải quyết các câu đố. Các
biểu đồ và đồ thị mà Python cung cấp đã làm cho quá trình này trở nên sinh động và dễ
hiểu hơn.
Môn học lập trình Python không chỉ giúp chúng em có kiến thức vững về một
ngôn ngữ lập trình mới mà còn mang lại những k năng thực hành quan trọng. Khả
năng áp dụng lập trình Python vào giải quyết các bài toán thực tế trong cuộc sống hàng
ngày đã nâng cao khả năng giải quyết vấn đề và tư duy logic của chúng em. Chúng em
tin rằng sự hiểu biết về Python sẽ tiếp tục hỗ trợ tôi trong nhiều lĩnh vực khác nhau, từ
công việc đến học tập và thậm chí là sự sáng tạo trong cuộc sống.
| 1/20

Preview text:

lOMoARcPSD| 37054152
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HCM
KHOA CÔNG NGHỆ THÔNG TIN
TÊN HỌC PHẦN: Lập trình Python
ĐỀ TÀI: PHÂN TÍCH KẾT QUẢ TỪ GAME
SUDOKU ỨNG DỤNG FRAMEWORK DJANGO MỞ ĐẦU
Trong thời đại công nghiệp 4.0 ngày nay, việc sử dụng lập trình để phân tích dữ
liệu không chỉ là xu hướng mà còn là kỹ năng quan trọng đối với nhiều ngành nghề.
Trong quá trình học môn lập trình Python, chúng em thấy rõ về sức mạnh và linh hoạt
của ngôn ngữ này trong việc xử lý và phân tích dữ liệu. Điều này đã khuyến khích
chúng em tìm kiếm cơ hội để áp dụng kiến thức đã học vào một đồ án thực tế.
Trong bối cảnh đó, lựa chọn của chúng em là tạo một đồ án sử dụng dữ liệu từ
trò chơi Sudoku và áp dụng framework Django để phân tích các thuộc tính có thể ảnh
hưởng đến kết quả của trò chơi. Sudoku không chỉ là một trò chơi giải đố logic phổ
biến mà còn cung cấp một lượng lớn dữ liệu về cách người chơi tiếp cận và giải quyết vấn đề.
Bằng cách này, đồ án không chỉ là một cơ hội để áp dụng kiến thức lập trình
Python mà còn là một cơ hội để nghiên cứu sâu hơn về cách con người giải quyết vấn
đề và ra quyết định trong môi trường trò chơi. Chúng em hy vọng rằng thông qua việc
phân tích dữ liệu từ trò chơi Sudoku, đồ án sẽ giúp chúng em hiểu rõ hơn về quy trình lOMoARcPSD| 37054152
ra quyết định, cũng như cung cấp cái nhìn tổng quan về khả năng giải quyết vấn đề của người chơi Sudoku.
Sau cùng nhóm em lựa chọn đề tài: “Phân tích kết quả từ game Sudoku ứng
dụng framework Django” để khám phá và phân tích dữ liệu trong trò chơi Sudoku
thông qua framework Django, để có cái nhìn chi tiết và độc đáo về cách mà lập trình
Python có thể được ứng dụng trong lĩnh vực giải đố logic và khoa học dữ liệu. CHƯƠNG 1
CƠ SỞ LÝ THUYẾT CỦA ĐỀ TÀI
1.1. Các khái niệm cơ bản về lệnh của ngôn ngữ python
1.1.1. Các phép toán:
Phép toán là các hành động thực hiện trên dữ liệu. Python hỗ trợ phép toán cơ
bản như cộng, trừ, nhân, chia và các phép toán khác. Minh họa: lOMoARcPSD| 37054152 1.1.2. Chuỗi
Trong lập trình, một chuỗi (string) là một dãy các ký tự, được đặt trong dấu
nháy đơn ('...') hoặc dấu nháy kép ("..."). Chuỗi là một kiểu dữ liệu cơ bản trong
Python và được sử dụng rộng rãi để lưu trữ và xử lý văn bản.
-Khai báo chuỗi: Chuỗi được khai báo bằng cách đặt các ký tự trong dấu nháy
đơn hoặc dấu nháy kép.
-Truy cập phần tử trong chuỗi: Các phần tử trong chuỗi có thể được truy cập
bằng chỉ số, bắt đầu từ 0.
-Cắt chuỗi (slicing): Cắt chuỗi là quá trình lấy một phần của chuỗi dựa trên một phạm vi chỉ định.
-Độ dài của chuỗi: Độ dài của một chuỗi là số lượng ký tự trong chuỗi đó.
-Ghép chuỗi: Hai chuỗi có thể được ghép lại với nhau bằng toán tử "+".
-Thay thế phần của chuỗi: Phương thức replace() được sử dụng để thay thế một
phần của chuỗi bằng một giá trị khác. lOMoARcPSD| 37054152
-Tách chuỗi thành danh sách: Phương thức split() được sử dụng để tách chuỗi
thành một danh sách các phần tử dựa trên một ký tự phân tách.
-Định dạng chuỗi: Chuỗi có thể được định dạng bằng cách sử dụng các phương
thức như format() hoặc f-strings. Minh họa: 1.1.3. Lệnh
Trong Python, lệnh là các câu lệnh hoặc đoạn mã được sử dụng để thực hiện các hành động cụ thể.
-Lệnh gán (Assignment statement): Lệnh gán được sử dụng để gán giá trị cho một biến.
-Lệnh điều kiện (Conditional statement): Lệnh điều kiện được sử dụng để thực
hiện các hành động khác nhau dựa trên một điều kiện.
-Lệnh lặp (Loop statement): Lệnh lặp được sử dụng để lặp lại một khối mã nhiều lần.
-Lệnh lặp for: Lặp qua một tập hợp các phần tử.
-Lệnh lặp while: Lặp lại một khối mã cho đến khi một điều kiện không còn đúng. lOMoARcPSD| 37054152
-Lệnh hàm (Function statement): Lệnh hàm được sử dụng để định nghĩa và tái sử dụng một khối mã.
-Lệnh nhập và xuất (Input and Output statement): Lệnh nhập và xuất được sử
dụng để tương tác với người dùng hoặc đọc/ghi dữ liệu từ/đến các tệp tin.
-Lệnh import (Import statement): Lệnh import được sử dụng để nhập các
module hoặc thư viện bên ngoài để sử dụng các chức năng hoặc lớp đã được định nghĩa sẵn. Minh họa: 1.1.4. Function
Trong lập trình, hàm là một khối mã được đặt tên và có thể được gọi để thực hiện
một tác vụ cụ thể. Định nghĩa hàm giúp tái sử dụng mã và tạo ra các khối lệnh có
cấu trúc trong chương trình.
-
Cú pháp định nghĩa hàm: Để định nghĩa một hàm, sử dụng từ khóa def,
sau đólà tên hàm và dấu ngoặc đơn chứa các tham số (nếu có). Sau đó, dòng tiếp theo
là khối mã trong thân hàm được thụt lề. -
Gọi hàm: Để gọi một hàm, chỉ cần sử dụng tên hàm và truyền các đối số
tương ứng (nếu có) vào trong dấu ngoặc đơn. Minh họa: lOMoARcPSD| 37054152
1.1.5. List: Danh sách
Trong Python, danh sách là một kiểu dữ liệu dùng để lưu trữ và quản lý tập hợp
các phần tử. Danh sách là một cấu trúc dữ liệu có thể thay đổi (mutable) và cho phép
lưu trữ các phần tử có cùng hoặc khác kiểu dữ liệu. Để tạo một danh sách trong
Python, chúng ta sử dụng dấu ngoặc vuông và các phần tử của danh sách được phân tách bằng dấu phẩy. Minh họa:
1.1.6. Bộ dữ liệu: Tuple
Trong Python, tuple là một kiểu dữ liệu tương tự như danh sách (list), được sử
dụng để lưu trữ và quản lý một tập hợp các phần tử. Tuy nhiên, tuple là một cấu trúc
dữ liệu không thay đổi (immutable), có nghĩa là các phần tử của tuple không thể được
thay đổi sau khi nó được khởi tạo. Để tạo một tuple trong Python, chúng ta sử dụng
dấu ngoặc đơn và các phần tử của tuple được phân tách bằng dấu phẩy. Minh họa: lOMoARcPSD| 37054152
1.1.7. Tập hợp: Set
Trong Python, set (tập hợp) là một kiểu dữ liệu được sử dụng để lưu trữ một tập
hợp các phần tử duy nhất và không có thứ tự. Set trong Python được triển khai dựa
trên cấu trúc dữ liệu tập hợp trong toán học. Để tạo một set trong Python, chúng ta sử
dụng dấu ngoặc nhọn {} hoặc hàm set(). Minh họa: lOMoARcPSD| 37054152
1.1.8. Từ điển: Dictionary
Trong Python, dictionary (từ điển) là một kiểu dữ liệu được sử dụng để lưu trữ các cặp
key-value (khóa-giá trị) không có thứ tự. Dictionary trong Python được triển khai dựa
trên cấu trúc dữ liệu bảng băm (hash table). Để tạo một dictionary trong Python, chúng
ta sử dụng dấu ngoặc nhọn {} hoặc hàm dict() và cung cấp các cặp key-value trong
dấu ngoặc đơn hoặc dấu ngoặc nhọn. Minh họa: 1.1.9. Module
Trong Python, module là một tập hợp các định nghĩa (hàm, lớp, biến) và câu
lệnh được viết trong một file có phần mở rộng .py. Module cho phép bạn tổ chức, tái
sử dụng và phân chia mã nguồn trong các phần khác nhau của một chương trình Python. Minh họa: lOMoARcPSD| 37054152 1.1.10. Package
Package trong Python là một thư mục chứa một hoặc nhiều modules hay các
package khác nhau, nó được tạo ra nhằm mục đích phân bố các modules có cùng chức
năng hay một cái gì đó, để dễ quản lý source code. Để tạo ra một package trong python
thì mọi người chỉ cần tạo ra một thư mục, với tên thư mục chính là tên của package và
trong thư mục này nhất định phải có một file có tên __init__.py. File __init__.py này
nó giống như các constructor, và nó sẽ được gọi ra đầu tiên khi chúng ta import package đó. Minh họa: 1.1.11. Lớp
Trong Python, lớp (class) là một cấu trúc dữ liệu trong hướng đối tượng
(Object-Oriented Programming - OOP) cho phép bạn định nghĩa các đối tượng mới
với thuộc tính (attributes) và phương thức (methods) riêng. Lớp là một bản thiết kế
(template) cho các đối tượng, và từ lớp, bạn có thể tạo ra nhiều đối tượng (instances) khác nhau. Minh họa:
1.1.12. Xử lý ngoại lệ
Xử lý ngoại lệ (exception handling) là một kỹ thuật trong lập trình cho phép bạn
ứng phó với các tình huống bất thường (ngoại lệ) xảy ra trong quá trình thực thi
chương trình. Khi một ngoại lệ xảy ra, nó sẽ "ném" (throw) một đối tượng ngoại lệ và lOMoARcPSD| 37054152
dừng thực thi bình thường của chương trình. Bằng cách sử dụng xử lý ngoại lệ, bạn có
thể kiểm soát và xử lý các ngoại lệ này một cách cụ thể.
Trong Python, xử lý ngoại lệ được thực hiện bằng cách sử dụng các khối tryexcept. Minh họa:
1.2. Các thư viện cơ bản dùng trong python 1.2.1. Pandas
Pandas là một thư viện phổ biến trong ngôn ngữ lập trình Python được sử dụng
rộng rãi trong phân tích dữ liệu và xử lý dữ liệu có cấu trúc. Nó cung cấp các cấu trúc
dữ liệu linh hoạt như DataFrame và Series, cho phép bạn thực hiện nhiều thao tác
mạnh mẽ trên dữ liệu. Một số khái niệm và tính năng quan trọng của Pandas:
DataFrame, Series, đọc và ghi dữ liệu, xử lý dữ liệu, truy vấn và lọc dữ liệu, áp dụng
phép biến đổi và tính toán, trực quan hóa dữ liệu. Minh họa: 1.2.2. NumPy
NumPy (Numerical Python) là một thư viện quan trọng trong ngôn ngữ lập trình
Python được sử dụng rộng rãi trong tính toán số học và xử lý dữ liệu khoa học. Nó
cung cấp các cấu trúc dữ liệu và công cụ để làm việc với mảng đa chiều và thực hiện
các phép toán số học trên chúng. Một số khái niệm và tính năng quan trọng của lOMoARcPSD| 37054152
NumPy: ndarray, Vectorization, Broadcasting, Hàm Universal (ufunc), đọc và ghi dữ
liệu, trực quan hóa dữ liệu. Minh họa: 1.2.3. Matplotlib
Matplotlib là một thư viện trực quan hóa dữ liệu phổ biến trong ngôn ngữ lập
trình Python. Nó cung cấp các công cụ mạnh mẽ để tạo ra các biểu đồ, sơ đồ và hình
ảnh để trực quan hóa dữ liệu một cách dễ dàng và linh hoạt. Một số khái niệm và tính
năng quan trọng của Matplotlib:
-Figure và Axes: Figure là một khung chứa tất cả các thành phần của một biểu
đồ hoặc hình ảnh. Trong một Figure, bạn có thể chứa nhiều Axes (khu vực trục) - nơi
thực sự vẽ các đồ thị và sơ đồ. Axes cung cấp các phương thức để tạo các loại biểu đồ
khác nhau và tùy chỉnh các thành phần của chúng. Minh họa: lOMoARcPSD| 37054152 1.2.4. Random
Thư viện random trong Python cung cấp các chức năng để sinh số ngẫu nhiên
và thực hiện các thao tác ngẫu nhiên khác. Nó giúp tạo ra ngẫu nhiên số nguyên, số
thực, chuỗi, và lựa chọn ngẫu nhiên từ danh sách. Minh họa:
1.2. Các khái niệm cơ bản về framework Django CHƯƠNG 2
ỨNG DỤNG DJANGO TẠO TRÒ CHƠI SUDOKU ĐƠN GIẢN
1. Giới thiệu sơ lược về logic trò chơi Sudoku
Trò chơi xuất phát từ hai chế độ lựa chọn, bảng 4x4 hoặc bảng 9x9, ở mỗi chế
độ sẽ có các điểm khác và giống nhau như sau lOMoARcPSD| 37054152 *Giống nhau:
- Độ khó khi chơi: dễ( easy) – khó( hard) – trung bình( medium)
- Nút bắt đầu( start game), nút làm mới( new game), nút trợ giúp( with help),
- Cách chơi là làm sao điền vào số thích hợp ở ô trống phù hợp với luật chơi Sudoku *Khác nhau:
- Với bảng 4x4, thời gian chơi giới hạn là 2 phút
- Với bảng 9x9, thời gian chơi giới hạn là 7 phút
2. Sơ đồ tổng quát của trò chơi Sudoku DJANGO
Giải thích sơ đồ: Trò chơi được phát triển hoàn toàn trên Django framework
được liên kết với cơ sở dữ liệu.
3. Lập trình và chi tiết các tập tin
3.1. Giao diện( view) Trang login: lOMoARcPSD| 37054152 Trang 4x4: Trang 9x9: lOMoARcPSD| 37054152
3.2. Mã xử lý( controller)
- urls.py( toàn đồ án)
from django.contrib import admin from django.urls import path, include urlpatterns = [
path('admin/', admin.site.urls),
path('home/', include('home.urls')) ]
- urls.py( một ứng dụng( app) )
from django.urls import path from . import views urlpatterns = [ path('', views.index2), path('4x4', views.index), path('9x9', views.index1),
path('save_info_first', views.save_info_first, name='save_info_first'),
path('save_player', views.save_player, name='save_player'), path('send_data_to_script',
views.send_data_to_script, name='send_data_to_script'), ] lOMoARcPSD| 37054152 - views.py
from django.shortcuts import render from django.http
import HttpResponse from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt from .models import
gameplayer_info from django.core.cache import cache import datetime import json # Create your views here. def index(request):
return render(request, 'index2.html') def index1(request):
return render(request, 'index.html') def index2(request):
return render(request, 'login.html') @csrf_exempt def
save_info_first(request):
if request.method == 'POST': try:
# Parse JSON data from the request
infoFirst = json.loads(request.body)
cache.set('info_script', infoFirst)
return JsonResponse({'status': 'success'}) except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)})
return JsonResponse({'status': 'error', 'message': 'Invalid request method'}) @csrf_exempt def save_player(request):
if request.method == 'POST': try:
# Parse JSON data from the request
player_data = json.loads(request.body)
# Lấ infoFirst = cache.get('info_script', {}) # Save player data to the database
combined_data = {**infoFirst,**player_data} print(combined_data)
player = gameplayer_info(**combined_data) player.save()
return JsonResponse({'status': 'success'}) lOMoARcPSD| 37054152 except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)})
return JsonResponse({'status': 'error', 'message': 'Invalid request method'})
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt from django.core.cache import cache @csrf_exempt def
send_data_to_script(request): try:
# Lấ data_name = cache.get('info_script', {})
data_to_send = data_name.get('name','') print(data_to_send)
# GửAi dữ liệu dửới dạng JSON trong HTTP response return
JsonResponse({'status': 'success', 'value': data_to_send}) except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)}) - models.py
from django.db import models # Create your models here.
class gameplayer_info(models.Model): age = models.IntegerField() bdate = models.DateField() gmail = models.TextField() level = models.TextField()
name = models.TextField() sex = models.TextField()
time_now = models.IntegerField()
time_play = models.IntegerField()
Đó là các tệp mã được viết bằng python của đồ án, ngoài ra còn các mã viết bằng
HTML, CSS, JAVASCRIPT, dùng để tạo giao diện và hoạt động của trò chơi. Toàn bộ
mã em xin được để ở link github phía dưới.
3.3. Mã nguồn của đồ án - Link github: lOMoARcPSD| 37054152
CHƯƠNG 3 SỬ DỤNG PYTHON PHÂN TÍCH TẬP DỮ LIỆU THU ĐƯỢC TỪ TRÒ CHƠI SUDOKU
2.1. Mục đích phân tích
Với mục đích ban đầu, sử dụng python để phân tích các yếu tố có thể ảnh
hưởng đến kết quả chơi và hoàn thành trò chơi Sudoku mà chủ yếu tập trung vào vấn
đề: “Trạng thái tinh thần tốt nhất của người chơi”. Và chúng em đã lựa chọn các thuộc
tính có thể ảnh hưởng đến kết quả chơi ở chế độ 9x9, mục đích chủ yếu chỉ là đưa ra
các đánh giá tương đối về các sự ảnh hưởng đó. 2.2. Tập dữ liệu
Tệp dữ liệu được ghi ở phia trên.
Các trường dữ liệu và giải thích:
- name( tên người chơi): tên được lấy từ đăng nhập -
age( tuổi người chơi): tuổi được lấy từ đăng nhập -
bdate( ngày sinh): ngày sinh được lấy từ đăng nhập -
sex( giới tính): giới tính được lấy từ đăng nhập -
level( độ khó): gồm: easy – hard – medium -
play_time( thời gian chơi): dao động từ 0 đến 7 phút, nếu 0 phút thì
chứng tỏ người chơi chưa hoàn thành -
completed (hoàn thành hay không): nếu ở thuộc tính ‘play_time’
giá trị là 0 thì completed mang giá trị là 0, ngược lại là 1
-time_now( thời gian hiện tại): thời gian hiện tại của người chơi, chỉ sử dụng giờ
2.3. Mô tả phân tích
Để có một góc nhìn tổng quan và tường minh, nhóm em chia phân tích này này thành hai phần: -
Theo từng độ khó: nghĩa là ở mỗi độ khó sẽ có những phân tích chỉ
mang tính đặc trưng ở mỗi độ khó, không ảnh hưởng đến độ khó khác, các phân tịch ở phần này gồm có: + -
Toàn bộ tập dữ liệu, chứa toàn bộ các độ khó: nghĩa là phân tích toàn bộ
dữ liệu, các phân tích ở phần này gồm có: + lOMoARcPSD| 37054152
2.4. Chi tiết phân tích và nhận xét
Các phân tích sẽ được thực hiện lần lượt theo thứ tự từ rộng đến thu hẹp vào
trọng tâm việc: “Trạng thái tinh thần tốt nhất”.
2.4.1. Theo từng độ khó *Easy *Hard *Medium
2.4.2. Toàn bộ độ khó
2.5. Tổng kết các phân tích lOMoARcPSD| 37054152 KẾT LUẬN
Học môn học lập trình Python đã mang lại cho chúng em một trải nghiệm đầy
thú vị và kiến thức sâu sắc về ngôn ngữ lập trình này. Không chỉ giúp chúng em làm
quen với cú pháp và cấu trúc của Python, mà còn mở rộng tầm nhìn về những ứng
dụng to lớn của ngôn ngữ này trong lĩnh vực trí tuệ nhân tạo (AI) và phân tích dữ liệu.
Python, với cộng đồng lớn và hỗ trợ đa dạng, đã cho phép chúng em nhận thức
sâu sắc về sức mạnh của nó trong lĩnh vực trí tuệ nhân tạo. Việc học về thư viện như
TensorFlow và PyTorch đã mở ra cánh cửa cho việc hiểu và triển khai các mô hình
máy học và deep learning. Chúng em đã có cơ hội xây dựng và huấn luyện các mô
hình để giải quyết các vấn đề thực tế, từ nhận diện hình ảnh đến dự đoán chuỗi thời gian.
Trong lĩnh vực phân tích dữ liệu, Python và các thư viện như Pandas, NumPy
và Matplotlib đã là công cụ quan trọng giúp chúng em xử lý và hiểu sâu dữ liệu.
Chúng em đã áp dụng kiến thức này để phân tích tập dữ liệu từ trò chơi Sudoku và rút
ra những thông tin quan trọng về cách mọi người chơi và giải quyết các câu đố. Các
biểu đồ và đồ thị mà Python cung cấp đã làm cho quá trình này trở nên sinh động và dễ hiểu hơn.
Môn học lập trình Python không chỉ giúp chúng em có kiến thức vững về một
ngôn ngữ lập trình mới mà còn mang lại những kỹ năng thực hành quan trọng. Khả
năng áp dụng lập trình Python vào giải quyết các bài toán thực tế trong cuộc sống hàng
ngày đã nâng cao khả năng giải quyết vấn đề và tư duy logic của chúng em. Chúng em
tin rằng sự hiểu biết về Python sẽ tiếp tục hỗ trợ tôi trong nhiều lĩnh vực khác nhau, từ
công việc đến học tập và thậm chí là sự sáng tạo trong cuộc sống.