Nhờ mọi người giúp đỡ phép toán trong hàm zip python

Dạo này em ôn thi cuối kì nên hơi nên em phải làm khá nhiều bài tập về python. 1 bài toán em gặp như sau:
Cho dãy S=[0.1,0.2,0.1,0.5,1,1.3,0.3], hãy tính T = sigma(n ->k=0) * (Sk/(k^2 + 1)) với sk là phần tử thứ k trong dãy S. Thực ra vế đầu ghi bằng kí hiệu sigma, nhưng em copy không ra được nên viết vậy cho mn có thể hiểu ạ.
Em viết được như sau:

tong = 0
S = [0.1,0.2,0.1,0.5,1,1.3,0.3]
result = zip(S)
tong = sum(S)
T = tong*

Đến phần T em không biết phải miêu tả theo code như thế nào ạ, mọi người giải thích hộ em được không ạ. Em xin cảm ơn

Mình viết ntn :smiley: do mũi tên mà chỉ có kí tự ASCII thì trông xấu.

sigma(k=0..n-1)(S[k]/(k^2+1))

Cái này là dùng enumerate hay đại loại vậy :smiley:

2 Likes

Vâng, cảm ơn ạ, em sẽ nghiên cứu tiếp

sigma(k=a..b-1)(f(k))

Sẽ tương đương với

sum(f(k) for k in range(a, b))

(Dùng xrange nếu là python2)

Như vầy thì cứ apply vào công thức này thôi, không cần zip hay enumerate đâu:

sigma(k=0..n-1)(S[k]/(k^2+1))
4 Likes

mình đã xem lại nhưng vẫn chưa hiểu bạn dùng range theo cách nào, mình nghĩ nên gán số thứ tự(kiểu 1,2,3) vào các phần từ ở S rồi khi dùng range thì a, b ta nhập có thể coi là số thứ tự đại diện cho từng phần tử của S, khi tính trong vòng lặp thì kết quả ra giá trị của từng phần tử luôn. Hay mình đã hiểu sai chỗ nào chăng. Bạn giải thích giúp mình với

Phân tích sum(f(k) for k in range(a, b)) ra thì ta sẽ có:

  • range(a, b) trả về a, a+1, a+2, ..., b-1
  • for k in range(a, b) thì k sẽ nhận lần lượt các giá trị a, a+1, a+2, ..., b-1
  • f(k) for k in range(a, b) thì sẽ tính giá trị biểu thức f(k) với k nhận lần lượt các giá trị a, a+1, a+2, ..., b-1
  • Cuối cùng là dùng sum tính tổng các giá trị f(k) tính được

So sánh

sigma(k=a..b-1)(f(k))

với

sigma(k=0..n-1)(S[k]/(k^2+1))

thì:

  • a=0
  • b=n
  • f(k)=S[k]/(k^2+1)

Chỉ là substitution vào thôi đó

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?