【问题标题】:Reducing Equation Loop减少方程循环
【发布时间】:2019-08-20 13:18:23
【问题描述】:

我正在尝试创建一个循环,如果“X”的值是一个整数,它将除以 2,这就是新值。然后,如果新值是整数,则除以 2 或如果有小数,则将其减去 0.5,即为新值。我希望它从“X”循环到 >= 1.5

我已经尝试了一段时间/if/elif 并且接近了,但是当我将“X”值从 217 更改为 218 时,输出不正确。

def func():
    val = 217
    while val >= 1.5:
        val = val/2
        print(val)
        if val is float:
            val = val-.5
            print(val)
        elif val is int:
            val = val/2
            print(val)
        else:
            val = val//2
            print(val)
func()

当 val = 217 时,这会完美呈现,但它会变为 0.0 而不是 1.5

else: val = val//2 对我来说似乎不合适,但这是我最接近按照我想要的方式渲染这段代码的方式。

输出:

108.5 54.0 27.0 13.0 6.5 3.0 1.5 0.0 = 1.5 时,不明白为什么会出现在这里

现在,如果您将 val 更改为 218

def func():
    val = 218
    while val >= 1.5:
        val = val/2
        print(val)
        if val is float:
            val = val-.5
            print(val)
        elif val is int:
            val = val/2
            print(val)
        else:
            val = val//2
            print(val)
func()

输出:

109.0 54.0 27.0 13.0 6.5 3.0 1.5 0.0

由于 218/2 = 109 然后 109/2 = 54.5 而出现了一些错误

由于我希望代码打印出每个新值,因此我希望它显示每个值,就好像您正在输入每个等式然后点击等号一样。我希望输出看起来像这样:

输出:

109.0 (/2) 54.5 (-0.5) 54.0 (/2) 27.0 (/2) 13.5 (-0.5) 13.0 (/2) 6.5 (-0.5) 6.0 (/2) 3.0 (-1.5) 1.5 (>= 1.5)

输出接近我想要的,但不完全是。

【问题讨论】:

    标签: python-3.7


    【解决方案1】:

    值x除以2的结果是否为整数的最简单测试是:

    int(x / 2) == x / 2
    

    或者,一般来说:

    int(expression) == expression # to test any expression for an integer value
    # but typically the expression is just a variable to avoid redundant calculations
    

    试试这个:

    def func():
        val = 218
        print(val, end='')
        while val >= 1.5:
            val /= 2
            print(' (/2)', val, end='')
            if int(val) != val:
                val -= .5
                if val >= 1.5:
                    print(' (-0.5)', val, end='')
        print(' (>= 1.5)')
    
    func()
    

    在http://ideone.com/wCOxta查看演示

    打印:

    218 (/2) 109.0 (/2) 54.5 (-0.5) 54.0 (/2) 27.0 (/2) 13.5 (-0.5) 13.0 (/2) 6.5 (-0.5) 6.0 (/2) 3.0 (/2) 1.5 (>= 1.5)
    

    【讨论】:

    【解决方案2】:

    主要问题是'val is float'和'val is int'条件总是为假,你需要另一种方法来检查val的小数部分是否为0。

    一个粗略的方法(但毫无疑问更好)是:

    if (val * 10) % 10 == 0:  # If the decimal part is 0
    

    此外,根据您在开头描述的算法,最终的 else 不应该存在。 此外,在循环开始时,您忘记将值除以 2,仅当它是圆形时。

    您在每个循环中执行两个不同的操作,这就是为什么最终结果可能比您预期的要提前一步,您可能希望更改循环以在每次迭代中执行一个操作或在第二个操作上添加一个条件。

    【讨论】:

    • 谢谢。你帮我靠近了。
    【解决方案3】:

    平滑的东西:

    x = 1.0
    
    if type(x) is float:
        print("float")
    elif type(x) is int:
        print("int")
    
    >>> float
    

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多