这题得倒着推。第10天还没吃,就剩1个,说明第9天吃完一半再吃1个还剩1个,假设第9天还没吃之前有桃子p个,可得:p * 1/2 - 1 = 1,可得 p = 4。以此类推,即可手算出。

代码思路为:第10天还没吃之前的桃子数量初始化 p = 1,之后从9至1循环9次,根据上述公式反推为 p = (p+1) * 2 可得第1天还没吃之前的桃子数量。

'''------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:猴子第一天摘下若干个桃子,当即吃了一半,觉得不过瘾
      又多吃了一个,以后每天都吃掉前一天剩下桃子的一半加
      一个,到第n天时,就只剩下一个桃子了,求第一天共摘了
      多少个桃子?

说明:正整数n为用户输入,其范围是:1<n<30

---------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main和其它函数中的
      任何内容,仅在函数的注释标志之间填入所编写的若干语句。
------------------------------------------------------'''


def main():
    print("【请连续三次根据输入的正整数n求得第一天摘的桃子数:】")
    for repeat in range(3):
        print("【第%d次:】" % (repeat+1))
        n = int(input("【请输入一个正整数n: 】"))
        # **********Program**********
        x = 1
        for i in range(n):
            x = (x+1) * 2
        # **********  End  **********
        print('【第一天共摘了】%d【个桃子】' % x)


if __name__ == '__main__':
    main()

参考:【Python3练习题 016】 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 - 点点花飞谢 - 博客园