Tag: while循环

是(true)与破坏编程实践?

我经常使用这种代码模式: while(true) { //do something if(<some condition>) { break; } } 另一位程序员告诉我,这是不好的做法,我应该用更标准的代码replace它: while(!<some condition>) { //do something } 他的推理是,你可以“轻松地忘记”rest,并有一个无止境的循环。 我告诉他,在第二个例子中,你可以轻而易举地处于一个永不回头的状态,所以就像循环一样容易,所以两者都是同样有效的做法。 而且,我经常更喜欢前者,因为当有多个中断点时,代码更容易阅读,即多个条件脱离循环。 任何人都可以通过为一方或另一方添加证据来丰富这一论点吗?

如何检查列表中的所有元素是否与条件匹配?

我有一个像20000名单组成的名单。 我使用每个列表的第三个元素作为标志。 只要至less有一个元素的标志是0,我想在这个列表上做一些操作,就像: my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], …..] 在开始时,所有的标志都是0.我使用while循环来检查是否至less有一个元素的标志是0: def check(lista): for item in lista: 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] = 1 else: do_sth() 实际上,我想在my_list中移除元素,但我不能在迭代它的时候删除项目。 原始的my_list没有标志: my_list = [["a", "b"], ["c", "d"], ["e", "f"], […]

如何在没有尾部调用优化的情况下使用函数式编程replacereplacewhile循环?

我在我的JavaScript中尝试更多function的风格; 因此,我已经用循环replace了诸如map和reduce之类的效用函数。 但是,我还没有findwhile循环的function替代,因为tail调用优化通常不适用于JavaScript。 (从我所了解的ES6防止尾部调用溢出堆栈,但不会优化其性能。) 我解释了我在下面试过的,但是TLDR是:如果我没有tail调用优化,while循环实现的function是什么? 我曾经尝试过: 创build一个“while”实用程序function: function while(func, test, data) { const newData = func(data); if(test(newData)) { return newData; } else { return while(func, test, newData); } } 由于尾部调用优化不可用,我可以将其重写为: function while(func, test, data) { let newData = *copy the data somehow* while(test(newData)) { newData = func(newData); } return newData; } 然而在这一点上,我觉得我已经使我的代码更复杂/混淆谁使用它,因为我必须拖动一个自定义的实用function。 我看到的唯一的实际优势是它迫使我使循环纯净; 但似乎只是使用一个常规的while循环更直接,并确保我保持一切纯净。 我也试图找出一种方法来创build一个模仿recursion/循环效应的生成器函数,然后使用find或reduce之类的效用函数对其进行迭代。 […]

如何在java中使用Scanner方法“hasNext”作为条件退出while循环?

我是一个初学java编程,并遇到了一个奇怪的问题。 下面是我的代码,它要求用户input并打印出用户每次input一个单词的内容。 问题是程序永远不会结束,而且从我的有限理解来看,它似乎陷入了while循环内部。 任何人都可以帮我一下吗? 提前致谢。 import java.util.Scanner; public class Test{ public static void main(String args[]){ System.out.print("Enter your sentence: "); Scanner sc = new Scanner (System.in); while (sc.hasNext() == true ) { String s1 = sc.next(); System.out.println(s1); } System.out.println("The loop has been ended"); // This somehow never get printed. } }

如何杀一个while循环与按键?

我正在读取串行数据并使用while循环写入一个csv文件。 我希望用户一旦感觉到已经收集了足够的数据就能够杀死while循环。 while True: #do a bunch of serial stuff #if the user presses the 'esc' or 'return' key: break 我已经做了这样的事情,使用opencv,但它似乎并没有在这个应用程序(我真的不想只为这个函数导入opencv)… # Listen for ESC or ENTER key c = cv.WaitKey(7) % 0x100 if c == 27 or c == 10: break 所以。 我如何让用户跳出循环? 此外,我不想使用键盘中断,因为脚本需要在while循环终止后继续运行。

Timer和TimerTask与Java中的Thread + sleep

我在这里发现了类似的问题,但没有答案让我满意。 因此,再次重述这个问题 – 我有一个任务需要定期完成(比如每隔1分钟)。 使用Timertask和Timer来做这件事,而不是创build一个带有睡眠的无限循环的新线程,有什么好处呢? 使用timertask- TimerTask uploadCheckerTimerTask = new TimerTask(){ public void run() { NewUploadServer.getInstance().checkAndUploadFiles(); } }; Timer uploadCheckerTimer = new Timer(true); uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000); 使用Thread和sleep- Thread t = new Thread(){ public void run() { while(true) { NewUploadServer.getInstance().checkAndUploadFiles(); Thread.sleep(60 * 1000); } } }; t.start(); 如果逻辑的执行时间超过间隔时间,我就不必担心是否会错过某些周期。 请评论这个.. 谢谢, -Keshav 更新: 最近我发现使用Timer与Thread.sleep()之间的另一个区别。 假设当前的系统时间是上午11:00。 […]

在C预处理器中编写一个while循环

我从教育/黑客的angular度来问这个问题,(我不会真的想要这样的代码)。 是否有可能只使用C预处理器指令来实现一个while循环。 我明白,macros不能recursion地扩展,那么这将如何完成?

循环是否真的更快?

我已经听了好几次了。 向后计数JavaScript循环真的快吗? 如果是这样,为什么? 我见过几个testing套件的例子,显示反向循环更快,但我找不到任何解释为什么! 我假设这是因为循环不再需要评估一个属性,每次检查它是否完成,它只是检查最终的数值。 即 for (var i = count – 1; i >= 0; i–) { // count is only evaluated once and then the comparison is always on 0. }

在Python中模拟一个do-while循环?

我需要在Python程序中模拟一个do-while循环。 不幸的是,以下直接的代码不起作用: l = [ 1, 2, 3 ] i = l.__iter__() s = None while True : if s : print s try : s = i.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 8, in <module> s = i.next() ', […]

我如何列出与PHP中的while循环相同的id数据?

我有一个MySQL表。 这样的列 series_id, series_color, product_name 我应该列出与group一样的series_id product 。 我想要那个列表所有相同的sary_id回显我的屏幕 A12 Series Product – Milk – Tea – sugar – water B12 Series Product – Water – Banana – Cofee – Tea