meisner7
2020-12-09 00:33
采纳率: 63.2%
浏览 5
已结题

新人,求大佬帮忙解答

本练习的目的是为预测水獭数量提供算法。爱丽丝和鲍勃(Alice and Bob)估计,当水獭的数量不太多时,水獭的数量每年将增长78.4%。然而,一旦水獭数量达到100,000人,各种因素就会导致繁殖减慢和更高的死亡率。因此,当水獭种群中至少有100,000人时,一年内仅增加24%。

注意:除非另有明确说明,否则对于每个问题,您都可以调用先前问题中要求的功能(即使您自己不知道如何编写它们)。

问题1:编写一个舍入函数,将浮点数x(假定为正数或零)作为参数,并返回最接近x的整数。如果X恰恰是在两个整数之间的中间,我们会总结(例如: 倒圆(16.5)是等于到17)。我们假定有一个地板函数它接受一个浮子作为参数并返回其下部的整数部分(例如: 地板(16.9)是等于以16)。(因此,您可以在不重写的情况下呼叫发言权)。

问题2:编写以下函数,将某个种群中的水獭数量作为参数,并返回第二年该种群中的水獭数量。该数字必须是整数(因为我们不能有水獭的非整数分数),因此我们将四舍五入到最接近的整数。

问题3:

a)编写一个函数predictV1,该函数将数年以及水獭初始种群中包含的水獭数量作为参数。然后,您的函数将返回所需年限后水獭的数量。请注意,如果所需的年数等于0,则您的函数应该起作用,并且在这种情况下,将返回初始种群中水獭的数量。
例如:  previsionV1(3,40,000 )将返回157,859,即3年后从40,000只水獭开始的水獭数量。
previsionV1(0,45000)将返回45000。

b)编写一个函数previsionV2,该函数将年份,初始水獭种群中包含的水獭数量,显示的布尔值和整数yearInit作为参数。如果display为false,则该功能将与previsionV1完全相同。但是,如果显示为True,则除了intyear是学习的第一年之外,除了在要求的年限之后返回水獭的数量外,它还将显示每年的相应水獭数量。
我们添加了一个附加约束:您的函数previsionV2不得调用previsionV1,这只是一个教育性的中间步骤,可帮助您编写previsionV2。
注意,请注意使最优雅/分解的算法成为可能。

示例:  previsionV2(3,40000,True,2020)将显示:

2020:40,000 
2021:71360 
2022:127306 
2023:157859

并将返回157859。

问题4:写一个函数会达到其把参数作为一个门槛整数,整数nbInit对应于初始种群水獭的数量,和一个整数yearInit对应研究的第一年,其将返回一年水獭的数量将达到或超过指定的阈值。
请注意:乍一看,使用上一个问题中编写的预测功能似乎与您有关。但是,如果您采用这种策略,则由于重复该算法,很有可能导致过多的不必要的计算。我们将在三月至四月的有关复杂性的章节中更详细地介绍这一点。

示例:将
达到(40,000,45,000,2020)的价值是2020年,因为我们要通过在2020年从45,000獭开始达到40,000水獭的阈值。将
达到(120,000,40,000,2020)的价值是2022年,因为我们要达到120,000只水獭,2020年为40,000只水獭。将
达到(157859,40,000,2020)是2023年将达到(100,000,40,000,2010

  • 好问题 提建议
  • 收藏

2条回答 默认 最新

  • 清风未明月 2020-12-09 11:42
    已采纳

    以后还是多多自己动手做做吧,这训练的就是基础,我也是半个新手,写一个给你:

    # 问题1
    def question_1(num_float):
        return round(num_float)  # python自带化整函数
    
    
    # 问题2
    def question_2(year_num):  # 问题二求的是第二年水獭的数量
        if year_num < 100000:
            return question_1(year_num * 1.784)
        elif year_num >= 100000:
            return question_1(year_num * 1.24)
    
    
    # 问题3(a) 求的是n年后水獭的数量
    def predictV1(time, number):
        final_num = number
        if time > 0:
            for i in range(time):
                final_num = question_2(final_num)
        return final_num
    
    
    # 问题3(b)根据参数显示水獭数量变化情况,并返回水獭最终的数量
    def previsionV2(time, number, display, intyear):
        final_num = number
        if display:
            print(intyear, ':', final_num)
        if time > 0:
            for i in range(time):
                final_num = question_2(final_num)
                if display:
                    print(intyear + i + 1, ':', final_num)
        return final_num
    
    
    # 问题4 计算水獭数量到达阈值的年份
    def question_4(threshold, nbInit, yearInit):
        time_spent = 0
        num = nbInit
        while True:
            if num >= threshold:
                return yearInit + time_spent
            num = question_2(num)
            time_spent += 1
    
    
    if __name__ == '__main__':
        final_num_1 = predictV1(3, 40000)
        print('predictV1 final number is:', final_num_1)
    
        print()
        final_num_2 = previsionV2(3, 40000, True, 2020)
        print('predictV2 final number is:', final_num_2)
    
        print()
        year = question_4(157859,40000,2020)
        print('Ending year is', year)
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 清风未明月 2020-12-09 09:56

    你这哪翻译的题目。。。看着太难受了,不过不翻译的话估计我都懒得看O(∩_∩)O哈哈~

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题