You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:17:25