คำถามติดแท็ก while-loop

A while loop เป็นโครงสร้างควบคุมที่ใช้ในภาษาการเขียนโปรแกรมหลายภาษาเพื่อดำเนินการชุดคำสั่งอย่างต่อเนื่องตราบเท่าที่ตรงตามเงื่อนไขเฉพาะ

14
เลียนแบบลูป do-while ใน Python หรือไม่?
ฉันต้องการเลียนแบบลูป do-while ในโปรแกรม Python น่าเสียดายที่รหัสตรงไปตรงมาไม่ทำงาน: list_of_ints = [ 1, 2, 3 ] iterator = list_of_ints.__iter__() element = None while True: if element: print element try: element = iterator.next() except StopIteration: break print "done" แทนที่จะเป็น "1,2,3 ทำแล้ว" มันพิมพ์ผลลัพธ์ต่อไปนี้: [stdout:]1 [stdout:]2 [stdout:]3 None['Traceback (most recent call last): ', ' File "test_python.py", line …

12
ไวยากรณ์สำหรับ Bash บรรทัดเดียวแบบไม่ จำกัด ในขณะที่วนซ้ำ
ฉันกำลังมีปัญหาในการหาเซมิโคลอนและ / หรือเครื่องหมายปีกกาที่ถูกต้อง ฉันต้องการทำเช่นนี้ แต่เป็นหนึ่งซับจากบรรทัดคำสั่ง: while [ 1 ] do foo sleep 2 done
633 bash  loops  while-loop 

23
อันไหนเร็วกว่า: ในขณะที่ (1) หรือขณะที่ (2)
นี่เป็นคำถามสัมภาษณ์ที่ผู้จัดการอาวุโสถาม ไหนเร็วกว่ากัน while(1) { // Some code } หรือ while(2) { //Some code } ผมบอกว่าทั้งสองมีความเร็วในการทำงานเดียวกันเป็นภายในแสดงออกwhileในที่สุดก็ควรประเมินหรือtrue falseในกรณีนี้ทั้งสองประเมินtrueและไม่มีคำแนะนำแบบมีเงื่อนไขพิเศษภายในwhileเงื่อนไข ดังนั้นทั้งสองจะมีความเร็วในการดำเนินการเท่ากันและฉันชอบในขณะที่ (1) แต่ผู้สัมภาษณ์กล่าวอย่างมั่นใจว่า: "ตรวจสอบพื้นฐานของคุณwhile(1)เร็วกว่าwhile(2)" (เขาไม่ได้ทดสอบความมั่นใจของฉัน) มันเป็นเรื่องจริงเหรอ? ดูเพิ่มเติม: "สำหรับ (;;)" เร็วกว่า "ขณะ (TRUE)" หรือไม่ ถ้าไม่ทำไมผู้คนถึงใช้มัน?

5
ทำไม“ ในขณะที่ (! feof (ไฟล์))” ผิดเสมอ
ฉันเห็นคนพยายามอ่านไฟล์แบบนี้ในโพสต์จำนวนมากเมื่อเร็ว ๆ นี้: #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { char *path = "stdin"; FILE *fp = argc > 1 ? fopen(path=argv[1], "r") : stdin; if( fp == NULL ) { perror(path); return EXIT_FAILURE; } while( !feof(fp) ) { /* THIS IS WRONG */ /* Read and …
573 c  file  while-loop  eof  feof 


30
วงกลับเร็วขึ้นจริงๆหรือ
ฉันเคยได้ยินเรื่องนี้ค่อนข้างน้อย JavaScript มีการวนซ้ำเร็วขึ้นจริงหรือไม่เมื่อนับถอยหลัง ถ้าเป็นเช่นนั้นทำไม ฉันเห็นตัวอย่างชุดทดสอบสองสามตัวอย่างที่แสดงว่าลูปที่กลับด้านนั้นเร็วกว่า แต่ฉันไม่สามารถหาคำอธิบายได้ว่าทำไม! ฉันสมมติว่าเป็นเพราะลูปไม่ต้องประเมินคุณสมบัติทุกครั้งที่ตรวจสอบเพื่อดูว่ามันเสร็จแล้วและตรวจสอบกับค่าตัวเลขสุดท้าย กล่าวคือ for (var i = count - 1; i >= 0; i--) { // count is only evaluated once and then the comparison is always on 0. }

6
คุณจะเรียกใช้คำสั่งในวิธีทุบตีจนสำเร็จ
ฉันมีสคริปต์และต้องการขอข้อมูลจากผู้ใช้สคริปต์ไม่สามารถดำเนินการต่อไปจนกว่าผู้ใช้จะกรอกข้อมูลนี้ ต่อไปนี้เป็นความพยายามของฉันในการวางคำสั่งลงในลูปเพื่อให้ได้สิ่งนี้ แต่มันไม่ทำงานด้วยเหตุผลบางอย่าง echo "Please change password" while passwd do echo "Try again" done ฉันลองวนรอบหลายครั้งแล้ว: while `passwd` while [[ "`passwd`" -gt 0 ]] while [ `passwd` -ne 0 ]] # ... And much more แต่ฉันไม่สามารถทำให้มันใช้งานได้
237 bash  command  while-loop 

20
ประกาศตัวแปรภายในหรือภายนอกของลูป
ทำไมงานต่อไปนี้ถึงทำงานได้ดี? String str; while (condition) { str = calculateStr(); ..... } แต่สิ่งนี้ถูกกล่าวว่าเป็นอันตราย / ไม่ถูกต้อง: while (condition) { String str = calculateStr(); ..... } จำเป็นต้องประกาศตัวแปรนอกลูปหรือไม่?

12
ฉันจะพล็อตแบบเรียลไทม์ในการวนรอบโดยใช้ matplotlib ได้อย่างไร
ฉันพยายามพล็อตข้อมูลบางส่วนจากกล้องแบบเรียลไทม์โดยใช้ OpenCV อย่างไรก็ตามการวางแผนตามเวลาจริง (โดยใช้ matplotlib) ดูเหมือนจะไม่ทำงาน ฉันได้แยกปัญหาออกเป็นตัวอย่างง่ายๆนี้: fig = plt.figure() plt.axis([0, 1000, 0, 1]) i = 0 x = list() y = list() while i < 1000: temp_y = np.random.random() x.append(i) y.append(temp_y) plt.scatter(i, temp_y) i += 1 plt.show() ฉันคาดหวังว่าตัวอย่างนี้จะพล็อต 1,000 คะแนนแยกกัน สิ่งที่เกิดขึ้นจริงคือหน้าต่างปรากฏขึ้นพร้อมกับจุดแรกที่แสดง (ตกลงกับสิ่งนั้น) จากนั้นรอให้การวนซ้ำให้เสร็จก่อนที่มันจะเติมส่วนที่เหลือของกราฟ ความคิดใดที่ว่าทำไมฉันถึงไม่เห็นคะแนนเติมทีละครั้ง?

3
วิธีการของจาวาที่มีคอมไพล์ประเภทส่งคืนโดยไม่มีคำสั่งส่งคืน
คำถามที่ 1: ทำไมรหัสต่อไปนี้จึงรวบรวมโดยไม่มีคำสั่ง return public int a() { while(true); } หมายเหตุ: Unreachable Code Errorหากฉันจะเพิ่มผลตอบแทนหลังจากที่ในขณะที่แล้วผมได้รับ คำถามที่ 2: ในทางกลับกันทำไมรหัสต่อไปนี้จึงรวบรวม public int a() { while(0 == 0); } แม้ว่าสิ่งต่อไปนี้จะไม่เป็นเช่นนั้น public int a(int b) { while(b == b); }

21
“ ในขณะที่ (จริง)” ลูปไม่ดีเหรอ? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันเขียนโปรแกรมใน Java มาหลายปีแล้ว แต่ฉันเพิ่งกลับไปโรงเรียนเพื่อรับปริญญาอย่างเป็นทางการ ฉันค่อนข้างแปลกใจที่ได้เรียนรู้ว่าในการมอบหมายครั้งสุดท้ายของฉันฉันเสียคะแนนในการใช้ลูปเหมือนด้านล่าง do{ //get some input. //if the input meets my conditions, break; //Otherwise ask again. } while(true) ตอนนี้สำหรับการทดสอบของฉันฉันแค่สแกนหาอินพุตคอนโซลบางส่วน แต่ฉันบอกว่าการวนซ้ำแบบนี้หมดกำลังใจเพราะการใช้breakคล้ายกับgotoเราไม่ได้ทำมัน ฉันเข้าใจถึงข้อผิดพลาดgotoและลูกพี่ลูกน้องของ Java อย่างสมบูรณ์break:labelและฉันรู้สึกดีที่จะไม่ใช้มัน ฉันยังตระหนักว่าโปรแกรมที่สมบูรณ์กว่านี้จะให้วิธีการหลบหนีอื่น ๆ เช่นเพื่อจบโปรแกรม แต่นั่นไม่ใช่เหตุผลที่อาจารย์ของฉันอ้างดังนั้น ... มีอะไรผิดปกติกับdo-while(true)?

5
จะตรวจสอบว่าองค์ประกอบทั้งหมดของรายการตรงกับเงื่อนไขได้อย่างไร?
ฉันมีรายการที่ประกอบไปด้วย 20,000 รายการ ฉันใช้องค์ประกอบที่ 3 ของแต่ละรายการเป็นค่าสถานะ ฉันต้องการที่จะดำเนินการบางอย่างในรายการนี้ตราบใดที่ธงอย่างน้อยหนึ่งองค์ประกอบเป็น 0 มันเหมือน: my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....] ในการเริ่มต้นการตั้งค่าสถานะทั้งหมดเป็น 0 ฉันใช้การวนรอบสักครู่เพื่อตรวจสอบว่าค่าสถานะอย่างน้อยหนึ่งองค์ประกอบเป็น 0: def check(list_): for item in list_: if item[2] == 0: return True return False ถ้าcheck(my_list)กลับTrueมาฉันจะทำงานต่อในรายการของฉัน: while check(my_list): for item in my_list: if condition: item[2] = …

14
ฉันจะทำให้ความรู้สึกของประโยค 'else' ของ Python loops ได้อย่างไร?
โปรแกรมเมอร์ Python หลายคนอาจไม่รู้ว่าไวยากรณ์ของwhileลูปและforลูปรวมถึงelse:ประโยคที่เป็นตัวเลือก: for val in iterable: do_something(val) else: clean_up() เนื้อความของelseclause เป็นสถานที่ที่ดีสำหรับการดำเนินการล้างข้อมูลบางประเภทและดำเนินการเมื่อสิ้นสุดการวนรอบปกติ: คือออกจากลูปด้วยreturnหรือbreakข้ามelseประโยค; ออกหลังจากcontinueเรียกใช้งานมัน ฉันรู้ว่านี้เพียงเพราะฉันเพียงแค่มองมันขึ้น (อีกครั้ง) เพราะฉันไม่สามารถจำได้ว่าเมื่อelseข้อจะถูกดำเนินการ เสมอ? เมื่อ "ล้มเหลว" ของลูปตามชื่อแนะนำ? เมื่อเลิกจ้างปกติ? แม้ว่าจะออกจากลูปด้วยreturnหรือไม่ ฉันไม่สามารถมั่นใจได้อย่างสมบูรณ์โดยไม่ต้องมองหามัน ฉันโทษความไม่แน่นอนที่ยังคงมีอยู่ของฉันเกี่ยวกับการเลือกคำหลัก: ฉันพบว่าไม่มีความelseผิดพลาดอย่างเหลือเชื่อสำหรับซีแมนติกส์นี้ คำถามของฉันไม่ใช่ "เพราะเหตุใดคำหลักนี้จึงใช้เพื่อจุดประสงค์นี้" (ซึ่งฉันอาจจะลงคะแนนให้ปิด แต่หลังจากอ่านคำตอบและความคิดเห็นแล้ว) แต่ฉันจะคิดอย่างไรเกี่ยวกับelseคำหลักเพื่อให้ความหมายของมันสมเหตุสมผล จำได้ไหม ฉันแน่ใจว่ามีจำนวนการสนทนาที่ยุติธรรมเกี่ยวกับเรื่องนี้และฉันสามารถจินตนาการได้ว่าตัวเลือกถูกสร้างขึ้นเพื่อความสอดคล้องกับประโยคtryของแถลงการณ์else:(ซึ่งฉันต้องค้นหาด้วย) และมีเป้าหมายที่จะไม่เพิ่มเข้าไปในรายการ คำสงวนของไพ ธ อน บางทีเหตุผลในการเลือกelseจะทำให้ฟังก์ชั่นของมันชัดเจนขึ้นและทำให้มันน่าจดจำมากขึ้น แต่ฉันหลังจากเชื่อมต่อชื่อกับฟังก์ชั่นไม่ใช่หลังจากคำอธิบายทางประวัติศาสตร์ต่อกัน คำตอบสำหรับคำถามนี้ซึ่งคำถามของฉันถูกปิดสั้น ๆ ซ้ำ ๆ กันมีเรื่องราวที่น่าสนใจมากมาย คำถามของฉันมีจุดเน้นที่แตกต่างกัน (วิธีเชื่อมต่อความหมายเฉพาะelseกับตัวเลือกคำหลัก) แต่ฉันรู้สึกว่าควรมีลิงก์ไปยังคำถามนี้ที่ไหนสักแห่ง

7
ตัวแปรที่ถูกแก้ไขภายในลูป while ไม่ได้ถูกจดจำ
ในโปรแกรมต่อไปนี้ถ้าฉันตั้งค่าตัวแปร$fooเป็นค่า 1 ภายในifคำสั่งแรกมันจะทำงานในแง่ที่ว่าค่านั้นถูกจดจำหลังจากคำสั่ง if อย่างไรก็ตามเมื่อฉันตั้งค่าตัวแปรเดียวกันเป็นค่า 2 ภายในคำสั่งifที่อยู่ในwhileคำสั่งมันจะถูกลืมหลังจากwhileวนรอบ มันทำงานเหมือนกับว่าฉันกำลังใช้สำเนาของตัวแปร$fooภายในwhileลูปและฉันกำลังแก้ไขเฉพาะสำเนานั้น นี่คือโปรแกรมทดสอบที่สมบูรณ์: #!/bin/bash set -e set -u foo=0 bar="hello" if [[ "$bar" == "hello" ]] then foo=1 echo "Setting \$foo to 1: $foo" fi echo "Variable \$foo after if statement: $foo" lines="first line\nsecond line\nthird line" echo -e $lines | while read line do …
187 bash  while-loop  scope  sh 

2
วิธีการแยกออกจากวงใน Bash?
ฉันต้องการเขียนสคริปต์ Bash เพื่อประมวลผลข้อความซึ่งอาจต้องใช้ขณะที่ลูป ตัวอย่างเช่น a while loop ใน C: int done = 0; while(1) { ... if(done) break; } ฉันต้องการเขียนสคริปต์ Bash ที่เทียบเท่า แต่สิ่งที่ฉันมักจะใช้และเป็นตัวอย่างคลาสสิกทั้งหมดที่ฉันอ่านได้แสดงให้เห็นคือ: while read something; do ... done มันไม่มีความช่วยเหลือเกี่ยวกับวิธีการทำwhile(1){}และbreak;สิ่งที่กำหนดไว้อย่างดีและใช้กันอย่างแพร่หลายใน C และฉันไม่ต้องอ่านข้อมูลสำหรับ stdin ใครสามารถช่วยฉันด้วย Bash เทียบเท่ากับรหัส C ข้างต้น?
150 bash  shell  while-loop 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.