Python:程序在使用float时会不断进入无限循环

0 python loops

这是我原来的工作计划:

def num_rushes(required_height, rush_height_gain, back_sliding):
    current_height = 0
    rushes = 0
    while current_height < required_height:
        rushes += 1
        current_height += rush_height_gain
        if current_height >= required_height:
            break
        else:
            current_height -= back_sliding
    return rushes

print num_rushes(100, 15, 7)
Run Code Online (Sandbox Code Playgroud)

这个程序做了什么计算它到达所需高度(required_height)之前需要多少"冲" ,在每次冲刺(rush_height_gain)之后,我们回落给定量(back_sliding).

我想要的是每次匆忙之后,将高度增加0.95(我们每次失去5%的冲动).

正如你在下面看到的,我所做的是将rush_height_gain转换为float,然后将该行添加rush_height_gain *= 0.95到我的while循环中,但是由于某种原因,我似乎无法弄清楚,我最终得到了一个无限循环.

def num_rushes(required_height, rush_height_gain, back_sliding):
    current_height = 0
    rushes = 0
    rush_height_gain = float(rush_height_gain)
    while current_height < required_height:
        rushes += 1
        current_height += rush_height_gain
        if current_height >= required_height:
            break
        else:
            current_height -= back_sliding
        rush_height_gain *= 0.95
    return rushes

print num_rushes(100, 15, 7)
Run Code Online (Sandbox Code Playgroud)

任何关于为什么会发生这种情况的帮助以及如何获得我想要的结果将不胜感激.

干杯.

unu*_*tbu 7

rush_high_gain每次通过时都会变小while-loop.但back_sliding保持不变.如果通过循环(约15)进行了足够的传球,则rush_height_gain可能小于backsliding.此时current_height将变得越来越小,你永远不会退出循环.