如果循环中的数字小于前一个数字,如何打印出来?

时间:2019-07-12 16:50:06

标签: python loops for-loop while-loop

一个问题要求我输出一个数字的值(如果它小于先前的输出,但是不小于该数字),请跳过它并继续循环直到找到较小的数字,然后重复直到最小的数字被发现。我已经使方程式可以输出随机结果,但是我很难找到如何使数字降到最小的值。

我尝试在while循环中使用if语句,但是它会引发错误或仅输出一个值并且不会继续。

import random
time = 1
while time > 0:

    f1 = random.random()
    f2 = random.random()
    f3 = random.random()
    x = 15*(f1/(f1+f2+f3))
    y = 15*(f2/(f1+f2+f3))
    z = 15*(f3/(f1+f2+f3))
    sum_fifteen = x+y+z
    from math import sqrt
    time = ((sqrt(8**2 + (x**2)))/3) + (y/5) + ((sqrt(6**2 + (z**2)))/4)
    print (time)

我希望输出递减直到没有较小的值,但实际上输出的结果在6到7之间是无限的

2 个答案:

答案 0 :(得分:1)

由于业障低,我无法评论您的问题,但根据我的阅读

  

如果一个数字的值小于前一个输出但不小于该数字,则输出它的值,跳过它并继续循环直到找到一个较小的数字,然后重复直到找到最小的数字为止

事实是,当找到最小可能的数字时,您必须停止操作。因此,您可以考虑任意范围的数字,例如要在7到9之间生成随机数。 我不知道是否必须为浮点数或整数,但是您可以看一下random.uniform(a,b),它从uniform distribution a和b。 所以如果你拿

number = random.uniform(6,9)

并创建一个循环,当生成的数字小于7时该循环将停止,该数字应为您已获取的最小数字。 对您来说,打印比上一个数字小的数字应该很容易。

答案 1 :(得分:1)

在所需的代码下面。 我清理了您提供的代码并进行了一些修改。 无限循环的主要问题是您的条件time > 0(总是如此)。

import random
from math import sqrt

# We choose arbitrarily value bigger than 7
res = 10
old_res = 11
cur_res = 10
accuracy = 0.01

while old_res-res > accuracy:
    f1 = random.random()
    f2 = random.random()
    f3 = random.random()
    x = 15*(f1/(f1+f2+f3))
    y = 15*(f2/(f1+f2+f3))
    z = 15*(f3/(f1+f2+f3))

    cur_res = ((sqrt(8**2 + (x**2)))/3) + (y/5) + ((sqrt(6**2 + (z**2)))/4)
    if cur_res < res:
        old_res = res
        res = cur_res
        print (res)

我已经用res重命名了time,这很容易混淆,我为res管理了三个变量。 cur_res:包含计算的当前值 res:包含最小值 old_res:包含res之后的最后一个最佳结果。

如果要找到接近6的最佳结果,可以修改accuracy。 (只是old_res - res)。 提高准确性以获得更好的结果。