浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案-第十章

一、判断题

1.下面程序的输出结果是1500。 错误

class MulByTwo(object): 
    def __init__(self, number):
        self.number = number
        self.counter = 0
        
    def __next__(self): 
        self.counter += 1 
        return self.counter * self.number

it = MulByTwo(500)
it.__next__()
it.__next__()
it.__next__()
print(it.__next__())

2.下面程序的输出是 6。 错误

i = 6 
def f():
    def g(): 
        print(i) 
    g() 
    i = 10 
f()

这个判断题的答案是 错误

原因分析:
在这个程序中,f() 函数内部定义了一个嵌套函数 g(),并在 g() 中打印变量 i。然而,在 f() 函数内部,i 被赋值为 10,这会导致 Python 将 i 视为一个局部变量。
具体分析如下:

  1. f() 被调用时,局部作用域中定义了 i
  2. g() 中,print(i) 试图访问 i,但此时 if() 的局部作用域中被认为是一个局部变量。
  3. 由于 g() 被调用时,i 还未被赋值,因此会引发 UnboundLocalError,表示在局部作用域中引用了一个未赋值的局部变量。
    因此,程序不会输出 6,而是会抛出一个错误。正确的输出结果是程序运行时会发生错误,而不是输出 6

3.await可以在非异步函数中使用。错误
4.async模块是Python异步编程模块。 错误
5.asyncio是Python关键字。 错误
6.下面程序的输出是3125。 错误

def outer(n):
    def inner(x):
        t = x**n
        return t

    return inner(n)

print(outer(5).inner)

二、编程题

在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔于1848年提出著名的8皇后问题,即在8X8的棋盘上摆放8个皇后,使其不能互相攻击----即任意两个皇后都不能处于同一行、同一列或同一条斜线上。
要求:
(1) 第1 行的皇后放在第1列,问有多少种摆法?
(2) 第二行第四列不能放皇后,问有多少种摆法?

### 浙江大学陈春晖运输打折问题算法题解 运输打折问题是典型的条件分支逻辑应用案例之一,主要涉及基于距离的不同折扣策略来计算最终运费。以下是关于此问题的具体解析。 #### 题目描述 题目要求实现一个自动计费程序,用于帮助运输公司根据货物重量和运输距离计算总费用。基本费率设定为 **每吨每公里1元**,并根据不同运输距离提供不同的折扣比例[^1]。 --- #### 解决方案分析 为了完成这一任务,可以采用以下方法: 1. **输入数据处理** 用户需输入两个参数:`ton` 表示货物重量(单位:吨),`km` 表示运输距离(单位:公里)。可以通过 `input()` 函数获取用户输入,并将其转换为数值型变量以便后续运算[^4]。 2. **定义基础费率与折扣规则** 基础运价设为每吨每公里1元。不同运输距离对应不同的折扣率: - 距离小于 250 公里时无折扣; - 距离介于 [250, 500) 公里之间时享受 98% 折扣; - 距离介于 [500, 1000) 公里之间时享受 95% 折扣; - 距离介于 [1000, 2000) 公里之间时享受 92% 折扣; - 距离介于 [2000, 3000) 公里之间时享受 90% 折扣; - 距离大于等于 3000 公里时享受 85% 折扣[^3]。 3. **编写核心逻辑** 使用嵌套的 `if-elif-else` 控制结构判断当前运输距离所属区间,并据此调整价格系数。 4. **输出结果** 计算完成后打印出总的运输费用,保留整数部分即可。 --- #### Python 实现代码 下面是完整的 Python 程序实现上述功能: ```python list_price = input().split() ton = eval(list_price[0]) km = eval(list_price[1]) price_per_ton_km = 1 fee = 0 if km < 250: discount_rate = 1 elif km < 500: discount_rate = 0.98 elif km < 1000: discount_rate = 0.95 elif km < 2000: discount_rate = 0.92 elif km < 3000: discount_rate = 0.90 else: discount_rate = 0.85 adjusted_price = price_per_ton_km * discount_rate total_fee = adjusted_price * ton * km print(int(total_fee)) ``` --- #### 示例运行 假设输入如下: ``` 10 1500 ``` 执行流程: - `ton = 10`, `km = 1500`; - 判断 `km >= 1000 and km < 2000` 成立,则折扣率为 0.92; - 总费用计算公式为 \( \text{Total Fee} = 10 \times 1500 \times (1 \times 0.92) = 13800 \); - 输出结果为 `13800`. --- #### 注意事项 - 输入验证未在此处考虑,实际开发中应加入异常捕获机制以增强鲁棒性。 - 所有浮点数操作均可能引入精度误差,在必要情况下可选用更精确的数据类型或库函数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qing影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值