【问题标题】:Run time while loop condition运行时while循环条件
【发布时间】:2019-12-09 04:24:24
【问题描述】:
def selection_sort(a):
    for i in range(0, len(a) - 1):
        minIndex = i
        for j in range(i + 1, len(a)):
            if a[j] < a[minIndex]:
                minIndex = j
            if minIndex != i:
                a[i], a[minIndex] = a[minIndex], a[i]

def selection_sort_runs():
    run_time_list = []
    n = 1
    while [having trouble thinking of loop condition here]
        start_time = time.time()
        rand = [random.randint(0, 100) for x in range(1, 10001*n)]
        selection_sort(rand)
        end_time = time.time()
        run_time = end_time - start_time
        run_time_list.append(run_time)
        if run_time < 60:
            n += 1

我想继续循环直到 run_time 大于 60,但我想不出一个条件可以让我这样做并将 n 加一,因为 run_time 是包含在循环内的产品,有什么想法吗?

【问题讨论】:

    标签: python python-3.x data-structures


    【解决方案1】:

    您有两个可能的选择是使用break 语句

        while True:
            start_time = time.time()
            rand = [random.randint(0, 100) for x in range(1, 10001*n)]
            selection_sort(rand)
            end_time = time.time()
            run_time = end_time - start_time
            run_time_list.append(run_time)
            if run_time < 60:
                n += 1
            else:
                break
    

    或者您可以重构代码,以便在循环外初始化 run_time 变量。

    run_time = -1        
    while run_time < 60:
            start_time = time.time()
            rand = [random.randint(0, 100) for x in range(1, 10001*n)]
            selection_sort(rand)
            end_time = time.time()
            run_time = end_time - start_time
            run_time_list.append(run_time)
            if run_time < 60:
                n += 1
    

    【讨论】:

    • @busybear 不一定。如果没有 if 语句,您最终会多计数 1,因为 break 之前的最后一次迭代将超过 60。您可以在循环结束后将其减 1 以解决这个问题。
    • 是的。我没有仔细阅读每个变量在做什么并假设了一些事情:)
    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多