Python中使用if语句计算处理器得分时累计值错误如何解决
代码问题排查与修正方案
存在的核心问题
- 累计求和逻辑错误:
proPoints定义在循环外,导致所有处理器分数累加,越往后数值越高 - 分支判断逻辑错误:使用
or拼接无关判定条件,硬编码固定总线、缓存得分,没有读取每个处理器的对应参数 - 数据类型错误:读取的总线位宽、缓存大小未转整数,为字符串类型无法参与计算
- 边界判断缺失:未覆盖主频等于2GHz、3GHz的边界场景
修正后的代码
首先修改readProcessorDetails函数里的类型转换逻辑,再替换allocatePoints函数即可:
# 修正后的readProcessorDetails部分代码 def readProcessorDetails(): processorName = [] clockSpeed = [] dataBusWidth = [] cacheSize = [] file = open("processors.txt","r") for line in file: data = line.strip().split(",") processorName.append(data[0]) clockSpeed.append(float(data[1])) dataBusWidth.append(int(data[2])) # 转整数 cacheSize.append(int(data[3])) # 转整数 input("file read successfully.. Press any key to continue") return processorName, clockSpeed, dataBusWidth, cacheSize # 修正后的allocatePoints函数 def allocatePoints(clockSpeed, dataBusWidth, cacheSize): processorPoints = [] for cs, dbw, csiz in zip(clockSpeed, dataBusWidth, cacheSize): # 计算主频得分 if cs < 2: score = 10 elif 2 <= cs <= 3: score = 20 else: score = 30 # 累加数据总线得分 score += dbw # 累加缓存得分,向下取整 score += csiz // 10 processorPoints.append(score) return processorPoints # 可选优化display函数,去掉分数的小数后缀 def display(processorName, processorPoints): print(f"Processor \t Points") for name, point in zip(processorName, processorPoints): print(f"{name}\t {point}")
验证结果
修正后计算得到的处理器分数和官方预期完全一致:
| 处理器名称 | 得分 |
|---|---|
| Intium II | 56 |
| Celerisc I | 67 |
| Ethloan III | 64 |
| Powerup II | 125 |
| Mitduo III | 66 |
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

