输入任何正整数时输出停止。问题一定出在while循环中

Posted

技术标签:

【中文标题】输入任何正整数时输出停止。问题一定出在while循环中【英文标题】:The output halts when entered any positive integer. The problem must be in the while loop 【发布时间】:2020-05-14 02:41:27 【问题描述】:
height=int(input("Enter the height from which the ball is dropped: "))
count=0
travel_dist=0
index=0.6

    if height<=0:
        print("The ball cannot bounce...")
    else:
        while (height>0):
            travel_dist=height+(height*index)
            count+=1
            height=height*index
            if height<=0:
                break;
       print("The ball has bounced ", count, "and travelled the total distance of ", travel_dist)

我尝试移除 while 循环,但无法获得球的整个轨迹。

【问题讨论】:

将正值重复乘以 0.6 不会使其为零或负(数学上)。由于舍入错误,如果您等待足够长的时间,它可能会变为零。 我投票结束这个问题,因为这显然是一个数学问题,而不是编程问题。 【参考方案1】:

正如用户@MichaelButscher 上面提到的,将一个正值重复乘以系数(在这种情况下为0.6)将接近于零,但永远不会到达那里。如果您在 while 循环中打印出 height,您可以看到这一点。您必须将height 的限制设置为不同的数字(例如:我将while (height&gt;0) 更改为while (height&gt;2)),如下所示:

height=int(input("Enter the height from which the ball is dropped: "))
count=0
travel_dist=0
index=0.6

if height<=0:
    print("The ball cannot bounce...")
else:
    while (height>2):
        travel_dist=height+(height*index)
        count+=1
        height=height*index
        print(height)
        if height<=0:
            break
    print("The ball has bounced ", count, "and travelled the total distance of ", travel_dist)

这表示一个球从其初始高度落下到上升到小于 2 的高度之前反弹了多少次。您可以将height 的条件设置为任何大于 0 的数字,例如 0.00001。

【讨论】:

【参考方案2】:
while height >0  is always true therefore while loop runs infinite. 

通过检查计数值更正while循环条件。

while (count>0):

修改后的代码,

height=int(input("Enter the height from which the ball is dropped: "))
count=0
travel_dist=0
index=0.6

if height<=0:
     print("The ball cannot bounce...")
else:
     while (count>0):
        travel_dist=height+(height*index)
        count+=1
        height=height*index
        if height<=0:
           break;

     print("The ball has bounced ", count, "and travelled the total distance of ", travel_dist)

【讨论】:

while (count>0) 总是假的

以上是关于输入任何正整数时输出停止。问题一定出在while循环中的主要内容,如果未能解决你的问题,请参考以下文章

用dev c++编程 输入正整数n,1<=n<=6,输出长度为n的所有01字符串,每行一个串

C++初学者---根据输入的任何一个正整数,输出可能被表示的连续正整数

c语言编程:连续输入若干个正整数,求其和及其平均值,直到输入0结束.

C语言:输入n(小于10的正整数),输出如下形式的数组?

c语言习题,输入一个正整数,按照从高位到低位的顺序输出各位数字。怎么做

C语言从键盘输入的若干整数中找出最小值 输入负数时结束?