R3向量求和、点积与叉积代码未通过全部Stepik测试求排查
Stepik R3向量运算作业测试未通过排查
你的代码仅通过50%测试,大概率是输出格式或舍入逻辑不符合题目的隐性要求,以下是几个常见问题及修正方向:
1. 输出小数位数不统一
你的代码用np.round(x,2)处理结果,但打印时如果结果是整数(比如2.0),会输出2.0而非2.00,部分OJ系统会严格校验输出格式,要求必须保留两位小数。
修正方式:用格式化字符串强制保留两位小数,比如:
# 向量求和输出 print("{0:.2f} {1:.2f} {2:.2f}".format(*soma)) # 点积输出 print("{0:.2f}".format(dot)) # 叉积输出 print("{0:.2f} {1:.2f} {2:.2f}".format(*cross))
2. 舍入方式不一致
np.round采用银行家舍入法(对0.5的情况,舍入到最近的偶数),比如np.round(2.5,0)会得到2而非3。如果题目要求常规四舍五入(0.5进1),这种差异会导致测试失败。
修正方式:改用decimal模块控制舍入模式:
from decimal import Decimal, ROUND_HALF_UP def round_half_up(x): return float(Decimal(str(x)).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP))
将所有需要舍入的结果用这个函数处理即可。
3. 输入处理的边界情况
虽然题目针对R3向量,但如果测试用例存在首尾空格,strip()可以进一步确保输入处理的鲁棒性;另外需确认输入是否严格为3个元素(不过Stepik测试用例通常会符合R3要求)。
修正后的完整代码示例
import numpy as np from decimal import Decimal, ROUND_HALF_UP def round_half_up(x): return float(Decimal(str(x)).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)) v1 = input().strip() v2 = input().strip() tuple1 = tuple(float(item) for item in v1.split()) tuple2 = tuple(float(item) for item in v2.split()) arr1 = np.array(tuple1) arr2 = np.array(tuple2) # 向量求和 s = np.add(arr1, arr2) soma = [round_half_up(x) for x in s] print("{0:.2f} {1:.2f} {2:.2f}".format(*soma)) # 点积 d = np.dot(arr1, arr2) dot = round_half_up(d) print("{0:.2f}".format(dot)) # 叉积 c = np.cross(arr1, arr2) cross = [round_half_up(x) for x in c] print("{0:.2f} {1:.2f} {2:.2f}".format(*cross))
内容的提问来源于stack exchange,提问作者samuelisaac
相关产品推荐
相关产品推荐

