01/10/2018, 12:01
Nhờ giải thích đoạn Code về Class trong Python
Xin chào mọi người, e đang tìm hiểu về Class trong Python . Em có đoạn Code này mà đọc đi đọc lại vẫn không hiểu được.
Vì vậy em lên đây để nhờ mọi người giúp đỡ. Mọi người giải thích Code giúp e được không ạ
class py_solution:
def sub_sets(self, sset):
return self.subsetsRecur([], sorted(sset))
def subsetsRecur(self, current, sset):
if sset:
return self.subsetsRecur(current, sset[1:]) + self.subsetsRecur(current + [sset[0]], sset[1:])
return [current]
print(py_solution().sub_sets([4,5,6]))
Bài liên quan
Lấy giấy vẽ ra. Mình vẽ cho bạn một trường hợp là list truyền vào là
[1, 2]
Ôi nhìn rắc rối quá … Để em đọc nghiên cứu thêm có gì không hiểu e hỏi lại anh sau nhé.
Cám ơn anh nhiều nghen …^^
Bạn cứ nhớ mỗi lần
sset
là một cái rỗng thì nó sẽ trả về giá trị.Thêm một cái nữa. Những dấu + mà thấy cùng một cột(viết thẳng hàng) với nhau thì nó là một đấy.
Em chia nhỏ đoạn Code ra để phân tích.Anh cho e hỏi mấy chổ này với ạ:
- Hàm thứ nhất là:
Có phải nó sẽ trả về kq là :
( [] , [list ban đầu đã được sắp xếp từ nhỏ đến lớn] )
đúng không ạ ?Sang hàm thứ hai:
sset
ở đây có phải là list đã được sắp xếp ở trên không ạ và e không hiểu điều kiện kiểm traif sset:
ở đây là như thế nào ạ.Mong nhờ anh hỗ trợ thêm ạ !
Kiểm tra xem
sset
cólen() > 0
hay không.Thử trên IDLE:
Dạ.
if sset
về ý nghĩa của dòng Code thì e hiểu rồi( đương nhiên là để kiểm tra xem trongsset
có phần tử hay không - như anh đã ví dụ ở trên ) . Cái mà e không hiểu ở đây là về mặt Logic cơ, vì rõ ràng danh sách ta nhập vào ban đầu là chắc chắn có phần tử rồi, tại sao còn phải kiểm tra lại làm gì thế ạ.subsetsRecur
là hàm đệ quy mà. Bạn thử thêm vào dòngprint(sset)
vào ngay sau dòng def, bạn sẽ thấy có 1 lúc nào đó sset sẽ rỗng.Nói 1 cách cụ thể hơn, khi bạn gọi hàm
subsetsRecur
vớicurrent = 2, sset = [3]
thì khi trả về, hàm sẽ trả vềĐơn giản hơn, mỗi lần gọi lại
subsetsRecur
thì sset bị mất 1 phần tử đầu tiên. Dãy rỗng thì làm gì có phần tử đầu tiên?Do vậy luôn phải kiểm tra sset để tránh lỗi khi đệ quy (vì dãy rỗng không thể slicing được -> không thể gọi đệ quy).
Ngoài ra, Python cũng báo lỗi khi đệ quy quá sâu. Mình không biết là khi bỏ
if sset:
ra có bị đệ quy quá sâu không (vì không thể đệ quy tiếp, mà cũng không trả về kết quả gì cả).Anh có thể cho e hỏi thêm là
current
ở đoạn Code dùng để làm gì được không ạcurrent
giống như cái-gì-đó để kết quả cuối cùng.Bạn đọc lại pic của thanhtrung2314, và cũng xem lại mục đích của bạn là gì khi code đoạn code trên.
Mình có làm một video cho bạn đây.
Thật sự không biết nói gì hơn ngoài từ CÁM ƠN. Cám ơn anh ! Cám ơn anh rất nhiều nhiều ạ