L139931 2023-03-16 13:41 采纳率: 100%
浏览 58
已结题

Python十赌九输

img


import random, mathdef gamble_once(): return True if random.random() > 0.5 else Falsedef every_day_money(hold_money): if hold_money < 1: return 0 input_money = 1 hold_money = hold_money - input_money while not gamble_once(): input_money = input_money * 2 hold_money = hold_money - input_money if hold_money <= 0: return hold_money hold_money = hold_money + 2 * input_money return hold_moneyif name == 'main': hold_money = 1000 hold_money_list = [] year_number = 10 for day in range(1,math.ceil(365 * year_number)): hold_money = every_day_money(hold_money) hold_money_list.append(hold_money) from matplotlib import pyplot as plt plt.scatter( list(range( len(hold_money_list)) ), hold_money_list, s = 1) plt.title('every day's money during {} year'.format(year_number)) plt.show()
这是已经写出来的代码,不知道怎么重复运行再得出结果

  • 写回答

3条回答 默认 最新

  • 追cium 2023-03-16 13:49
    关注

    参考GPT和自己的思路:

    您好,要重复运行代码以得出结果,您可以将代码放入一个循环结构中,例如使用 for 循环可以重复运行。具体来说,您可以将程序封装成一个函数,然后在一个 for 循环中多次调用该函数,每次传入不同的参数进行计算,最后保存结果或进行统计分析。举个例子,您可以这样修改代码:

    import random, math
    from matplotlib import pyplot as plt
    
    def gamble_once():
        return True if random.random() > 0.5 else False
    
    def every_day_money(hold_money, year_number):
        if hold_money < 1:
            return 0
        input_money = 1
        hold_money = hold_money - input_money
        hold_money_list = []
        for day in range(1,math.ceil(365 * year_number)):
            input_money = 1
            while not gamble_once():
                input_money = input_money * 2
                hold_money = hold_money - input_money
                if hold_money <= 0:
                    hold_money_list.append(hold_money)
                    return hold_money
            hold_money = hold_money + 2 * input_money
            hold_money_list.append(hold_money)
        return hold_money_list
    
    if __name__ == '__main__':
        hold_money = 1000
        year_number = 10
        hold_money_list_all = []
        for i in range(10):
            hold_money_list = every_day_money(hold_money, year_number)
            plt.plot(list(range(len(hold_money_list))), hold_money_list)
            hold_money_list_all.append(hold_money_list)
        plt.title("every day's money during {} years".format(year_number))
        plt.xlabel('days')
        plt.ylabel('money')
        plt.show()
    
        # 计算平均资产值和破产率
        bankrupt_count = 0
        total = 0
        for hold_money_list in hold_money_list_all:
            total += hold_money_list[-1]
            if hold_money_list[-1] <= 0:
                bankrupt_count += 1
        print("平均资产值为:{:.2f}".format(total / len(hold_money_list_all)))
        print("破产率为:{:.2%}".format(bankrupt_count / len(hold_money_list_all)))
    

    在这个修改后的代码中,every_day_money 函数除了接收一个初始资产参数 hold_money,还接收了一个年数参数 year_number,并将每天资产值放入了一个列表 hold_money_list 中。主函数中使用 for 循环调用 every_day_money 函数 10 次,每次传入相同的初始资产值和年数,并将每次计算得到的 hold_money_list 用 plt.plot 画在同一张图中。最后,计算了所有实验的平均资产值和破产率,并打印出来。

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

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月16日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?