Cách chạy vòng lặp for chỉ một lần Python

Một câu lệnh lặp, hoặc vòng lặp, lặp đi lặp lại việc thực thi một câu lệnh, được gọi là thân vòng lặp, cho đến khi biểu thức điều khiển là sai [0]. Biểu thức điều khiển phải có kiểu vô hướng

Câu lệnh while đánh giá biểu thức điều khiển trước khi thực hiện thân vòng lặp

Câu lệnh do đánh giá biểu thức điều khiển sau khi thực hiện thân vòng lặp;

Câu lệnh for thực thi thân vòng lặp dựa trên đánh giá của biểu thức thứ hai trong ba biểu thức

từ tài liệu UNIX trực tuyến

Brian W

Bài đăng này có hữu ích không?

  • Có lẽ không quá ngu ngốc, nếu chúng ta xem xét từ khóa "phá vỡ"?

    for i in 1
    do
    some_command
    [ $?
    some_other_command
    [ $? -ne 0 ] && break

    some_other_other_command
    [ $?

    xong

    Dễ đọc hơn thay vì sử dụng cách nhập liệu if-then-else

    Bài đăng này có hữu ích không?

  • @Wayne, tôi thừa nhận bài viết trước của bạn về việc làm. trong khi xây dựng. Nếu bạn tự tìm thấy điều đó, bạn thông minh hơn tôi

    @N. martin, đó cũng là một cấu trúc nguyên bản sâu sắc. Tôi có xu hướng sử dụng các hàm [C và awk và bash] để tôi có thể trả về sớm trong điều kiện lỗi. Tôi chưa bao giờ nghĩ về một vòng lặp với break. Và đối với những thứ thực sự khó hiểu, bạn có thể đặt tiếp tục thay vào đó, và nó vẫn dừng

    Đây là một thành ngữ liên quan trong C [sử dụng vòng lặp một lần duy nhất] để giải quyết một vấn đề thực sự. Tôi tìm thấy cái này trong cửa sổ X. h nhưng tôi phải mất một lúc lâu mới hiểu chuyện gì đang xảy ra và tại sao nó lại hữu ích

    Giả sử bạn muốn một #define đặt hai giá trị [rất phổ biến trong X để đặt x và y hoặc chiều rộng và chiều cao cùng nhau]

    Bạn muốn có thể viết mã của bạn. SetSize[w,x,y];

    và bạn muốn xác định một macro như

    #define SetSize[ w, w_x, w_y] w->x = [w_x];

    Chà, có ba dấu chấm phẩy ở đó, hai dấu chấm phẩy trong định nghĩa và một trong lệnh gọi. Điều đó có vẻ ổn - chỉ có một câu lệnh trống sau khi thay thế văn bản trong bộ xử lý trước. Nhưng trên thực tế, nó không thành công khi bạn viết như

    if [Điều kiện] SetSize[ win, 40, 73];

    và nó không thành công vì bây giờ có một câu lệnh trống ẩn tách câu lệnh khác ra khỏi if, do dấu chấm phẩy thứ ba đó gây ra

    Bạn có thể khắc phục điều này bằng cách xóa ; . Nhưng điều đó có nghĩa là người dùng phải biết SetSize là định nghĩa hay hàm. Hoặc bạn có thể đính kèm các bài tập trong định nghĩa trong { }, nhưng sau đó bạn sẽ nhận lại các câu lệnh trống của mình. Trên thực tế, đây là khẳng định của tôi. đối với bất kỳ cách nào bạn có thể mô tả trình tự cuộc gọi như thế này, tôi có thể tạo nguồn C hợp lệ có bẫy lỗi cú pháp ở đâu đó. Đây chỉ là một vấn đề cơ bản về C. các ký hiệu cho các câu lệnh đơn giản và phức hợp không tương thích [hoặc ít nhất, không thể thay thế cho nhau]

    Điều tôi muốn là một cách để gói một câu lệnh C phức hợp trở lại thành một câu lệnh đơn giản và nó liên quan đến một vòng lặp chạy chính xác một lần và tôi đã tìm thấy nó trong X. tập tin h. Đi như thế này

    #define SetSize[ w, w_x, w_y]
    do { w->x = [w_x];

    việc làm. trong khi thực hiện một lần lặp lại, tìm thấy 0 [sai] và không thực hiện nữa

    việc làm. while là một câu lệnh đơn giản, và bạn có thể viết nó ở bất cứ đâu mà bạn có thể viết lời gọi hàm, theo cùng một cách, không có bẫy cú pháp. Bạn KHÔNG muốn có dấu chấm phẩy ở cuối định nghĩa - phần cuối của câu lệnh xuất phát từ mã gọi

    Và bên trong câu lệnh đơn giản là một {. } khối trong đó bạn có thể làm bất cứ điều gì hợp lệ trong C. Biến ngăn xếp tạm thời, câu lệnh chuyển đổi, định nghĩa cấu trúc tạm thời, trên thực tế, mọi thứ hợp lệ trong hàm main[] đều có thể vào đó

    Nó thậm chí không hiệu quả. Khi cú pháp đã hoạt động, hầu hết các trình biên dịch tối ưu hóa sẽ không đặt mã cho vòng lặp nào cả

    Bài đăng này có hữu ích không?

  • Giới thiệu về từ khóa break

    Bạn có thể chỉ định có bao nhiêu vòng bạn muốn phá vỡ?

    for i in 1 2
    do
    some_code_here
    [[ $?
    for j in 1 2
    do

    some_other_code_here
    [[ $?
    done

    có thể_một số_khác_mã_ở đây

    xong

    có thể không đẹp [tôi thừa nhận]

    Bài đăng này có hữu ích không?

  • Không, tôi không tin như vậy nếu bạn muốn ngắt cả hai, hãy đặt cờ
    ngắt rồi kiểm tra lại cờ xem đó có phải là ngắt thực sự không.

    Bài đăng này có hữu ích không?

  • @Wayne

    Chắc chắn rồi, bạn có thể ngắt các vòng lặp lồng nhau mà không cần đặt cờ.
    Tôi thỉnh thoảng sử dụng nó.

    Hoạt động với ksh trên "Tru64", bây giờ chúng tôi chạy "AIX 6. 1", nó vẫn hoạt động

    Xem "lập trình bash pro" [Chris F. A. Johnson], trang 26

    Bài đăng này có hữu ích không?

  • Vì điều này được đăng ngay dưới diễn đàn AIX của IBM, tôi chưa bao giờ hiểu liệu chúng ta đang nói về shell hay C. Nó có vẻ giống một cuộc thảo luận ngôn ngữ chung hơn

    Đối với cấu trúc "break n", nó có vẻ hợp lệ trong trình bao, có thể là trong Perl, có thể là trong Python và không hợp lệ trong C và awk. Cá nhân tôi không thích viết mã yêu cầu tôi tính độ sâu của các vòng lặp và cũng áp đặt điều đó vào việc bảo trì. Đó là về xấu như một goto. Và nếu bạn có thể phá vỡ và, tại sao không tiếp tục?

    Bài đăng này có hữu ích không?

  • @Paul. vâng, bạn có thể "phá vỡ n" VÀ nó HỢP LỆ để "tiếp tục n" trong ksh và bash [và PHP]. Nó không tồn tại trong Python. Không biết đối với Perl
    Và vâng, nó gần như khủng khiếp như "goto" hoặc "vòng lặp có tên" của ADA, hai điều này cho phép người bảo trì biết nơi chúng tôi muốn đến [và không tính . Tôi nhớ có nhiều goto trong một số trình điều khiển thiết bị Kernighan, Ritchie & Thomson.

    @Paul và Wayne và SmileyBtW. "làm {. } trong khi 0" khiến tôi nhớ đến việc tạo mã "trong ngăn xếp" để tăng tốc độ hiển thị các ký tự và chuỗi trong X11, các pragma từ C đến hợp ngữ cho các toán tử bị thiếu [trong C] như xoay [ROL và ROR] và. TRÁO ĐỔI.
    [ồ. "trao đổi" chủ đề không hồi kết trong diễn đàn C] với từ khóa "đăng ký" C, tất cả điều này để chúng tôi có thể kéo các cửa sổ có nội dung của chúng bằng Motorola 68000 hoặc 68040 kém.

    Bài đăng này có hữu ích không?

  • cho, trong khi, làm

    đã trở nên phổ biến nhờ cuốn sách "Công cụ phần mềm" của Kernighan và Plauger [1976] và là từ khóa điều khiển vòng lặp được hỗ trợ bởi ngôn ngữ kiểu C và một số ngôn ngữ kịch bản. Ngôn ngữ kiểu Pascal có cấu trúc tương tự

    Vòng lặp for có luôn chạy một lần cho Python không?

    Một vòng lặp kiểm soát đầu vào sẽ không bao giờ thực thi nếu điều kiện sai , tuy nhiên, vòng lặp kiểm soát đầu ra sẽ thực thi ít nhất một lần .

    Tại sao vòng lặp while của tôi chỉ chạy một lần Python?

    Một vòng lặp while thậm chí có thể không thực hiện được một lần nếu điều kiện không được đáp ứng . Tuy nhiên, do-while sẽ chạy một lần, sau đó kiểm tra điều kiện cho các vòng lặp tiếp theo.

    Python sẽ thực thi đoạn mã bên trong vòng lặp while sau bao nhiêu lần?

    Mã bên trong vòng lặp được thực thi vô hạn cho đến khi chương trình buộc phải dừng.

  • Chủ Đề