Vì vậy, tôi xanh như cỏ và lập trình học tập từ How to think like a computer scientist: Learn python 3. Tôi có thể trả lời câu hỏi (xem bên dưới) nhưng sợ tôi đang bỏ lỡ bài học.Viết chức năng tổng quát cho cả hai chuỗi và danh sách trong python
Viết một hàm (gọi tắt là insert_at_end) sẽ vượt qua (trả lại táo bạo đưa ra hai luận điểm trước đó) cho cả ba:
test(insert_at_end(5, [1, 3, 4, 6]), **[1, 3, 4, 6, 5]**)
test(insert_at_end('x', 'abc'), **'abcx'**)
test(insert_at_end(5, (1, 3, 4, 6)), **(1, 3, 4, 6, 5)**)
Cuốn sách cung cấp cho gợi ý này: "Những bài tập minh họa độc đáo mà trừu tượng chuỗi nói chung, (vì cắt, lập chỉ mục và ghép nối rất chung chung), do đó, có thể viết các hàm chung hoạt động trên tất cả các loại trình tự. ".
Phiên bản này không có các giải pháp trên mạng (mà tôi có thể tìm thấy) nhưng trong tôi tìm thấy câu trả lời của một ai đó đến một phiên bản trước của văn bản (ví python 2.7) và họ đã làm điều đó theo cách này:
def encapsulate(val, seq):
if type(seq) == type(""):
return str(val)
if type(seq) == type([]):
return [val]
return (val,)
def insert_at_end(val, seq):
return seq + encapsulate(val, seq)
Điều này dường như giải quyết được câu hỏi bằng cách phân biệt giữa các danh sách và chuỗi ... đi ngược lại gợi ý. Vì vậy, làm thế nào về nó Có cách nào để trả lời câu hỏi (và khoảng 10 cái tương tự hơn) mà không phân biệt? tức là không sử dụng "type()"
Tôi không nghĩ rằng bạn sẽ tìm hiểu bất cứ điều gì hữu ích từ việc cố gắng giải quyết vấn đề này. –