我试图使用while循环减少而不在while循环体中包含标志值

时间:2015-10-18 04:48:15

标签: python

我正在尝试使用while循环减少而不使用while循环体内的标志值。我想知道为什么我从这段代码中得到一个无限循环。我不确定原因是因为整数是不可变的,而且它会不断被覆盖。

end_number = 500 
i = 0


while i < end_number:
    print("I'm decrementing in percentages of 10")
    end_number = end_number - (end_number * 0.10)

2 个答案:

答案 0 :(得分:3)

赋值渐近为零。

if (cursor != null) {
            Log.i(AppConstants.APPUILOG,"cursor not null");
            cursor.moveToFirst();
            String[] from = new String[] new String[] {NAME,JOBTITLE,THUMBNAILURL};
            int[] to = new int[] {R.id.textViewMain,R.id.textViewSub,R.id.contact_icon};
            SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.contact_list_item, cursor, from, to);
            mainListView.setAdapter(cursorAdapter);
        }else {
            Log.i(AppConstants.APPUILOG,"cursor is null");
        }

将接近零,但永远不会到达那里。无论end_number = end_number - (end_number * 0.10) 有多小,它的90%仍会大于零。所以,你的循环永远不会退出。

这是抽象的,数学上正确的答案。由于浮点数学的限制,您的问题在细节上有点略有不同。当10%的end_number向下舍入为零时,有一个点,所以你有end_number,而end_number永远保持在那个值。

答案 1 :(得分:1)

如果你运行循环和品脱end_number,你会看到它是0.所以你的循环永远不会退出..问题是每次不会达到0时自身小10%。

您需要更改作业。你需要做的是这个

end_number = tiny float - 0