Python数据分析实战——朱文强、钟元生主编课后答案

3.2 判断年份是否闰平年。

year = int(input("请输入年份:"))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    print(f"{year}是闰年。")
else:
    print(f"{year}是平年。")

区分:% 取余 即整除。 / 除以。 // (向下)取整。

3.3 求一个自然数除了自身以外的最大约数。

num = int(input('请输入一个整数:'))
count = num // 2

while count > 0:
    if num % count == 0:
        print(count, 'is the max factor of ', num)
        break

    count = count - 1

一个整数,除了自身以外的最大因子的值,不会超过此整数除以2的商。
如49,49//2=24,则24*2=48,则24是49的最大因子。
最大约数就看在1~24中,哪个数能够被49整除且最大。

3.4 对一个整数进行质因数分解。

n = int(input("请输入一个数:"))
print(n, '=', end=" ")
i = 2
while i <= n:
    if i == n:
        print(i, end="")
        break
    elif n % i == 0:
        print(i, end="*")
        n = n / i
    else:
        i += 1

4.1 有两个列表。1>合并列表并去除重复,放在C中。2>对C按元素大小降序排序。

a = [4,10,12,4,9,6,3]
b = [12,8,5,6,7,6,10]
c_list = set(a + b)
print(c_list)
print(sorted(c_list, reverse=True))

这里输出的c_list是一个集合。可以把c_list转换为列表。即:

c_list = list(set(a + b)

4.2 已知一个列表,统计列表中各元素出现次数,并按格式输出。

a_list = [4, 6, 3, 8, 9, 0, 3, 3, 7, 1, 4, 6, 7, 3, 4]
result = []
for i in a_list:
    if i not in result:
        result.append(i)
        print("元素", i, "在列表中出现了", a_list.count(i), "次")

5.20 阅读代码,写出执行结果。

x = list(range(10))
x[::3] = map(lambda y:y**2,[1,2,3,4])
print(x)

输出结果:

[1,1,2,4,4,5,9,7,8,16]

原理:x[::3] = y 是指将x列表中每隔3个数的索引(即0、3、6、9)更换为y中(即1、4、9、16)相应的值。

5.2 定义一个函数,对任意两个函数之间的所有整数(包含本身)求和。函数有两个参数,用于指定起始及结束整数,较小的作为起始整数。将结果作为返回值返回。

def sum_z(start,end):
    if start>end:
        start,end = end,start           "较小的作为起身整数。这就是交换次序。"
    return sum(range(start,end+1))      "求和可以用range。"

print(sum_z(10,5))

5.3 定义一个函数,计算矩形的面积与周长。包含两个参数:长和宽,且由于正方形是特殊的矩形,因此也支持传递一个参数的情况。当传递一个参数时,表示长宽相等,返回计算结果。

def square(length, width=None):
    if width is None:
        width = length

    area = length * width
    p = (length + width) * 2
    print(f"面积为:{area}")
    print(f"周长为:{p}")


square(2)
square(2,4)

5.4 角谷定理。随机输入一个自然数,若为偶数则将其除以2,若为奇数则将其乘以3加1。经过有限次运算,总能得到自然数值1。捕获用户输入的数字,然后输出从该数字到最终结果1的过程,统计需要经过多少步计算可得到自然数1。

count = 0
random = int(input("随机输入一个自然数:"))
while random != 1:
    if random % 2 == 0:
        random = random // 2
        print(random)
        count += 1
    else:
        random = random * 3 + 1
        print(random)
        count += 1

print(f"步数为:{count}")

注意这里偶数的情况,除以要用//取整而不是%取余,否则random为0。

5.5 一只青蛙一次可以跳上一节台阶,也可以跳上两节。求该青蛙跳上一个n节台阶总共有多少种跳法。(先后次序不同,算作不同结果)

这是一个斐波那契数列问题,此处用递归的办法给出。 来源GPT3.5。

def jump_floor(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        return jump_floor(n - 1) + jump_floor(n - 2)


print(f"有{jump_floor(10)}种跳法。")

原理:当 n 等于 1 或 2 时,跳法总数分别为 1 和 2。当 n 大于 2 时,可以先跳上一级台阶,然后剩下的 n-1 级台阶的跳法总数为 jump_floor(n - 1);或者先跳上两级台阶,然后剩下的 n-2 级台阶的跳法总数为 jump_floor(n - 2)。因此,总的跳法总数为这两个子问题的跳法总数之和。

5.6编写函数,对传递的一组数据进行操作,调整数据的位置,使得所有奇数位于前半部分,所有偶数位于后半部分,并保证奇数和奇数、偶数和偶数之间的相对位置不变。

来源GPT3.5。

def reorder_array(nums):
    """
    将奇数放在偶数前面,且保证奇数和奇数、偶数和偶数之间的相对位置不变。
    :param nums: 待调整的数组
    :return: 调整后的数组
    """
    n = len(nums)
    i, j = 0, 0  # 定义两个指针 i 和 j
    
    while j < n:
        if nums[j] % 2 == 1:  # 当前数是奇数
            nums[i], nums[j] = nums[j], nums[i]  # 将当前数与第一个偶数交换
            i += 1
        j += 1
    
    return nums

原理:它使用两个指针 i 和 j,初始值都为 0。当 j 对应的数为奇数时,将它与第一个偶数交换,并将指针 i 向右移动。这样,指针 i 始终指向当前奇数应该放置的位置。然后将指针 j 向右移动,继续扫描数组,直到 j 超出数组范围为止。这样,所有奇数都被放在了偶数的前面,并且奇数和奇数、偶数和偶数之间的相对位置没有发生变化。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值