2401_85788322 2024-06-17 18:43 采纳率: 71.4%
浏览 3
已结题

在Python的while循环语句习题中遇到的问题

如图所示,为什么i的初始赋值和i+1的位置先后会影响最后的结果?如果我直接把11带进去推的话,我还是能理解哪里出了问题,但是从本质上来说我不太理解,感谢指教

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-17 18:43
    关注

    引自免费微信小程序:皆我百晓生

    这个问题的核心在于循环变量i的初始化位置以及它在循环中的更新方式对最终结果的影响。在两种情况下,i的含义有所不同,因此导致了不同的结果。

    第一种情况(i=0

    1. 初始化i=0,这意味着i从零开始计数。
    2. 循环条件while S<=500,只要累积捐款不超过500元,循环继续。
    3. 内部操作
      • i=i+1,每次循环前先增加i
      • S=(20+20+(i-1)*5)*i/2,计算累积捐款。这里i-1是因为i在计算之前已经增加了1次,所以i-1实际上是当前人的编号。
    4. 结束条件:当S>500时,循环停止,此时i是最后一个参与捐款的人的编号加1(因为最后一次循环i又增加了1次)。

    第二种情况(i=1

    1. 初始化i=1,这意味着i从一(即第一个人)开始计数。
    2. 循环条件同上。
    3. 内部操作
      • S=(20+20+(i-1)*5)*i/2,计算累积捐款。这里i-1正确地反映了到目前为止的人数。
      • i=i+1,每次循环后增加i
    4. 结束条件:当S>500时,循环停止,此时i是最后一个参与捐款的人的编号。

    修正与分析

    第一种情况下的代码实际上多计算了一次i,因此当S首次超过500元时,i的值会比实际人数大1。为了修正这一点,可以将i的初始化改为i=1,并在循环内先计算S再增加i,这样i就能准确表示达到目标所需的捐款人数。

    修改后的代码

    S = 0
    i = 1
    while S <= 500:
        S = (20 + 20 + (i-1)*5)*i/2
        i += 1
    print(f"第{i-1}个人捐后总费用超过500元")
    

    这样修改后,i的值将准确反映达到目标所需的人数,因为在计算Si尚未增加,而在循环结束后输出时减去1以纠正最后一次不必要的增加。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月17日
  • 已采纳回答 6月17日
  • 创建了问题 6月17日