Cách đặt lại bộ đếm trong vòng lặp python

Chọn một trang web để nhận nội dung đã dịch nếu có và xem các sự kiện và ưu đãi tại địa phương. Dựa trên vị trí của bạn, chúng tôi khuyên bạn nên chọn.

Bạn cũng có thể chọn một trang web từ danh sách sau

Làm thế nào để có được hiệu suất trang web tốt nhất

Chọn trang Trung Quốc [bằng tiếng Trung hoặc tiếng Anh] để có hiệu suất trang tốt nhất. Các trang web quốc gia khác của MathWorks không được tối ưu hóa cho các lượt truy cập từ vị trí của bạn

Vì vậy, tôi đang cố gắng tìm ra cách đặt lại bộ đếm. Tôi có một vòng lặp cho các khối chứa một vòng lặp cho các thử nghiệm. Để lặp qua các khối và thử nghiệm, tôi cố gắng sử dụng các biến đếm làm chỉ số, đặc biệt là đếm_blockloop và đếm_trialsequence trong inline_code

Vì vậy, khối hoạt động tốt, nhưng vòng lặp thử nghiệm của nó bị hỏng do bộ đếm không khởi động lại với mỗi khối và do đó, nó vượt quá số lượng phần tử trong từ điển mà từ đó các thử nghiệm được rút ra. tôi đã cố gắng tự làm. thí nghiệm. set['counter_trialsequence', 0] trong khối inline_code, nhưng điều đó không có tác dụng

Vì vậy, bất kỳ ý tưởng nào khác về cách khởi động lại bộ đếm từ bên trong khối inline_code?

Cảm ơn,

Ngớ ngẩn Napalm

Bình luận

  • sebastiaan

    đã chỉnh sửa 2. 01 giờ sáng

    Xin chào SillyNapalm,

    Các mục duy trì bộ đếm riêng của chúng, cần được đặt lại rõ ràng. Mặt khác, như bạn đã trải nghiệm, nó sẽ tiếp tục ghi đè biến đếm_[tên_mục]. Sau đây nên làm thủ thuật

    # Uncomment for 0.25 and earlier
    # exp = self.experiment
    exp.items['item_to_reset'].count = 0

    Chúc mừng bạn,
    Sebastiaan

  • Ngớ ngẩn Napalm

    đã chỉnh sửa 2. 01 giờ sáng

    Cảm ơn vi đa trả lơi. Tôi đã thử nó, nhưng nó trả về KeyError. Vậy làm cách nào để thêm nó vào từ điển?

    Tôi cũng sẽ biết ơn nếu bạn có thể chỉ cho tôi nơi tôi có thể tìm tài liệu về các phương pháp từ điển thử nghiệm vì tôi không thấy nó trên trang web chính

  • sebastiaan

    đã chỉnh sửa 2. 01 giờ sáng

    Cảm ơn vi đa trả lơi. Tôi đã thử nó, nhưng nó trả về KeyError. Vậy làm cách nào để thêm nó vào từ điển?

    Bạn đã sử dụng đúng tên mục?

    exp.items['trial_sequence'].count = 0
    Tôi cũng sẽ biết ơn nếu bạn có thể chỉ cho tôi nơi tôi có thể tìm tài liệu về các phương pháp từ điển thử nghiệm vì tôi không thấy nó trên trang web chính

    Thật không may, không có tài liệu hệ thống về điều này. Các chức năng khả dụng phụ thuộc vào mục và không thực sự dành cho người dùng truy cập. Tuy nhiên, đôi khi tôi vẫn truy cập chúng, như bây giờ, nhưng đó là một cách hack vì muốn có giải pháp tốt hơn

    Tuy nhiên, bạn có thể nhận được một danh sách các chức năng của các thuộc tính với một tập lệnh như thế này

    item = 'my_item_name'
    for i in dir[exp.items[item]]:
        print '%s [%s]' % [i, type[eval['exp.items[item].%s' % i]]]

    Chúc mừng

  • Ngớ ngẩn Napalm

    đã chỉnh sửa 2. 01 giờ sáng

    Vâng, tôi có tên chính xác. Và tôi đã thử một số kết hợp. Ngoài ra, không quan trọng tôi đặt nó ở đâu trong thử nghiệm, nó luôn trả về KeyError

    Bất kỳ ý tưởng?

  • sebastiaan

    đã chỉnh sửa 2. 01 giờ sáng

    Có thật không? . từ điển vật phẩm là nơi lưu trữ tất cả các vật phẩm. Bạn có chắc là bạn không vô tình sửa đổi exp. mặt hàng?

    for item in exp.items:
        print '%s [%s]' % [item, exp.items[item].__class__]

    Điều này sẽ cung cấp một cái gì đó giống như đầu ra sau, trong đó phần đầu tiên là tên mục [= khóa trong từ điển]

    inline_script [libopensesame.inline_script.inline_script]
    experiment [libopensesame.sequence.sequence]
    getting_started [notepad.notepad]
    welcome [libopensesame.sketchpad.sketchpad]

    Nếu nó thực sự không hoạt động, bạn có thể tải toàn bộ tập lệnh lên một cái gì đó trong pastebin hoặc dán nó vào đây, để tôi có thể xem qua

    Chúc mừng

  • Ngớ ngẩn Napalm

    đã chỉnh sửa 2. 01 giờ sáng

    Tôi hiểu rồi. Vấn đề là tôi đã sử dụng 'count_var_name' thay vì 'var_name' khi áp dụng phương thức đếm. Tôi cho rằng tôi đã dựa trên trình kiểm tra biến

    Dù sao, vấn đề đã được đóng lại

    Cảm ơn,

    Ngớ ngẩn Napalm

  • Jákup

    đã chỉnh sửa 2. 01 giờ sáng

    Bạn có thể tự đặt lại biến thử nghiệm 'đếm' không?

    Trân trọng,
    Jákup

  • vanderlinden

    đã chỉnh sửa 2. 01 giờ sáng

    Chào Jakup,

    Mục bạn muốn đếm là gì?

    Ví dụ: nếu bạn muốn đếm số lần dùng thử và đặt lại bộ đếm này ở đầu mỗi khối mới, tôi nghĩ mã mà Sebastiaan đã đăng ở trên sẽ hoạt động

    Ví dụ: nếu mục chuỗi thử nghiệm của bạn được gọi là trial_sequence, bạn sẽ thêm một mục inline_script vào mục chuỗi khối của mình và đặt đoạn mã sau vào đây

    exp.items['trial_sequence'].count = 0

    Bằng cách đặt lại biến này khi bắt đầu một khối mới, biến count_trial_sequence [mà bạn có thể đã quen thuộc] cũng sẽ tự động được đặt lại về 0

    Không giúp đỡ à?

    Lời chúc tốt nhất,

    Lotje

    Bạn có thích câu trả lời của tôi?

  • Jákup

    đã chỉnh sửa 2. 01 giờ sáng

    Xin chào Lotje.
    Cảm ơn rất nhiều vì sự giúp đỡ của bạn

    Điều này chắc chắn cũng sẽ hiệu quả. Nhưng không phải có một biến tích hợp được gọi đơn giản là 'đếm' sao? . Hay biến này có lẽ là bộ đếm count_trial_sequence?

    Trân trọng,
    Jákup

  • Edwin

    chỉnh sửa tháng 12 năm 2012

    Xin chào Jakub

    Tôi nghĩ tôi cũng có thể trả lời. Count_trial_sequence là số lần mục trình tự được gọi là 'trial_sequence' [mà bạn có thể có] được chạy

    Thứ hai, bộ đếm tích hợp sẽ rất khó thực hiện, vì đối với mỗi thử nghiệm, bạn thường muốn đếm thứ khác nhau. Những gì bạn có thể làm là tạo bộ đếm tùy chỉnh của riêng bạn. Sử dụng một mục inline_script để khởi động bộ đếm, sử dụng một mục mỗi khi bạn muốn bộ đếm tăng lên và sử dụng một mục để đặt lại

    bắt đầu truy cập

    self.experiment.set["my_counter", 0]
    

    làm cho bộ đếm tăng lên một

    self.experiment.set["my_counter", self.get["my_counter"+1]]
    

    đặt lại bộ đếm

    self.experiment.set["my_counter", 0]
    

  • Jákup

    đã chỉnh sửa 2. 01 giờ sáng

    Xin chào một lần nữa Edwin


    Và cảm ơn bạn rất nhiều
    Đó thực sự là một ý kiến ​​hay, nếu tôi thực sự muốn tùy chỉnh cách tôi muốn thử nghiệm được tính.

    Nhưng có một biến tích hợp gọi là 'đếm'. Nếu bạn ghi nhật ký bằng trình ghi nhật ký, nó sẽ đếm tất cả các chu kỳ trong suốt quá trình thử nghiệm. Nếu bạn không thể nhìn thấy nó trong mục trình ghi nhật ký, bạn chỉ cần thêm mục này vào tập lệnh trình ghi nhật ký

     log "count"

    Trong thử nghiệm của mình, tất nhiên tôi có thể ghi nhật ký, ví dụ: "count_session1_squence" + "count_session2_sequence" + "count_questionnaire_sequence" riêng biệt. Nhưng sau đó, tệp nhật ký của tôi sẽ có một cột riêng cho từng bộ đếm này và tôi sẽ phải chỉnh sửa chúng theo cách thủ công thành một cột duy nhất là "số đếm". Vì vậy, nếu có thể thiết lập lại điều khiển biến đếm, điều đó thật tuyệt

    exp.items['trial_sequence'].count = 0
    0

    dường như không hoạt động

    Tất nhiên, đây chỉ là soi mói, và tôi có thể giải quyết bằng cách đặt từng mục, tôi muốn được đếm cùng nhau theo cùng một trình tự, và sau đó chỉ cần đếm theo trình tự đó. Nhưng tôi tò mò liệu có thể sử dụng biến đếm trong trường hợp này không. Tôi đang làm tương tự cho "phản hồi" - tôi. e. , tôi chỉ ghi lại biến đó chứ không phải bất kỳ biến phản hồi riêng biệt nào khác

    Chúc mọi điều tốt lành.
    Jákup

  • sebastiaan

    chỉnh sửa tháng 12 năm 2012

    Chào Jakup,

    Chỉ cần một lưu ý nhanh chóng

    Có lẽ thật hữu ích khi hiểu biến đếm thực sự là gì, bởi vì nó có thể hơi khó hiểu. Mỗi mục có một biến được gọi là số đếm, chỉ đơn giản là đếm tần suất mục đó được gọi. Biến này dành riêng cho một mặt hàng cụ thể và chỉ có thể truy cập được từ bên trong mặt hàng đó. Biến mặt hàng này được sử dụng để đặt biến 'toàn cầu' trong thử nghiệm, được gọi là đếm_[tên mặt hàng]. Nếu bạn quan tâm, bạn có thể xem trong nguồn cách điều này xảy ra trong giai đoạn chuẩn bị của một mặt hàng.

    Vì vậy, nếu bạn làm

    exp.items['trial_sequence'].count = 0
    1

    trong một inline_script, bạn sẽ nhận được bộ đếm cho mục inline_script đó. Tương tự, nếu bạn ghi số đếm vào bộ ghi, bạn sẽ ghi bộ đếm cho bộ ghi đó. Điều này có vẻ giống như một bộ đếm toàn cầu, nhưng nó không phải. Nó chỉ đơn giản là bộ đếm cho mặt hàng cụ thể đó. Điều này là do thực tế là các biến có thể tồn tại ở hai cấp độ, như đã giải thích [tôi phải thừa nhận là không thỏa đáng]. Dưới dạng biến thử nghiệm 'toàn cầu', tất cả các mặt hàng đều có thể truy cập hoặc dưới dạng biến mặt hàng 'cục bộ', chỉ từ bên trong một mặt hàng cụ thể

    Không có bộ đếm toàn cầu, vì lý do mà Edwin đã đề cập. OpenSesame không biết thử nghiệm của bạn 'có nghĩa là gì' và do đó không biết cách duy trì bộ đếm thích hợp. Thay vào đó, nó cung cấp các bộ đếm riêng biệt cho tất cả các mặt hàng để bạn diễn giải. Điều đó có ý nghĩa?

    Hy vọng điều này làm sáng tỏ mọi thứ một chút

    Chúc mừng

  • Jákup

    chỉnh sửa tháng 12 năm 2012

    Nó chắc chắn đã làm, cảm ơn vì đã làm rõ

    Vì vậy, khi tôi ghi lại biến phản hồi, theo cách tương tự, nó không phải là biến toàn cục được gọi là "phản hồi", mà là biến cục bộ, được thay thế bằng cùng một biến trong các mục tiếp theo?

    Vì vậy, ghi lại số đếm của máy ghi mô phỏng những gì tôi đang tìm kiếm, đúng không?

    Trân trọng,

    Jákup

  • sebastiaan

    đã chỉnh sửa 2. 01 giờ sáng

    Vì vậy, khi tôi ghi lại biến phản hồi, theo cách tương tự, nó không phải là biến toàn cục được gọi là "phản hồi", mà là biến cục bộ, được thay thế bằng cùng một biến trong các mục tiếp theo?

    Vâng, quy tắc là như sau. Khi một logger tự. get[] là một biến, trước tiên nó sẽ kiểm tra xem biến này có tồn tại ở cấp mục hay không. Nếu không, nó sẽ kiểm tra xem biến có tồn tại ở cấp độ thử nghiệm hay không. Trong trường hợp phản hồi, biến này thường chỉ tồn tại ở cấp độ thử nghiệm. Nhưng bạn sẽ thấy rằng nếu, chỉ để kiểm tra, bạn thêm dòng

    exp.items['trial_sequence'].count = 0
    2

    đối với tập lệnh trình ghi nhật ký, trình ghi nhật ký sẽ chọn biến phản hồi cấp mục mới được đặt này [tất nhiên đây không phải là điều bạn muốn, nhưng chỉ để minh họa]. Vì vậy, đó là một cơ chế dự phòng, trong đó các biến cấp vật phẩm được ưu tiên

    Vì vậy, ghi lại số đếm của máy ghi mô phỏng những gì tôi đang tìm kiếm, đúng không?

    Có, xem phản hồi đầu tiên của tôi trong chủ đề này

    exp.items['trial_sequence'].count = 0
    3

    Mục cần đặt lại trong trường hợp này sẽ là tên của mục nhật ký. Thao tác này sẽ đặt lại biến số lượng ở cấp độ mặt hàng và gián tiếp đặt lại biến số đếm_[tên mặt hàng] ở cấp độ thử nghiệm

    Bạn có thể đặt lại vòng lặp for Python không?

    Bạn có thể đặt lại giá trị của biến vòng lặp thành i = 0 để khởi động lại vòng lặp ngay khi người dùng nhập 'r' . Cái này là cái gì? .

    Bộ đếm trong vòng lặp for là gì?

    Bộ đếm vòng lặp được dùng để quyết định khi nào vòng lặp kết thúc và để luồng chương trình tiếp tục đến lệnh tiếp theo sau vòng lặp .

Chủ Đề