第1关:动态欢迎语

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def welcome(username, hour):
# 根据输入的时间选择不同的问候语
# begin
if 0 <= hour < 12:
greeting = "Good morning"
elif 12 <= hour < 18:
greeting = "Good afternoon"
elif 18 <= hour < 24:
greeting = "Good evening"
else:
greeting = "Invalid time"
# end

# 生成动态欢迎语welcome_message
# begin
welcome_message = f"{greeting}, {username}! Welcome to our platform."
return welcome_message
# end


# 输入用户名user_name和时间input_time
user_name = input()
input_time = int(input())
# 调用函数welcome获取welcome_message,并输出
# begin
welcome_message = welcome(user_name, input_time)
print(welcome_message)
# end

第2关:向量计算器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import math


# 向量加法
def vector_addition(vector1, vector2):
# begin
return [a + b for a, b in zip(vector1, vector2)]
# end


# 向量减法
def vector_subtraction(vector1, vector2):
# begin
return [a - b for a, b in zip(vector1, vector2)]
# end


# 向量点积
def dot_product(vector1, vector2):
# begin
return sum(a * b for a, b in zip(vector1, vector2))
# end


# 向量长度(模)
def vector_length(vector):
# begin
return math.sqrt(sum(x**2 for x in vector))
# end


# 单位向量,如果是零向量,则返回提示:零向量没有单位向量
def unit_vector(vector):
# begin
length = vector_length(vector)
if length == 0:
return "零向量没有单位向量"
return [x / length for x in vector]
# end


# 向量夹角(单位:度),角的度数theta=cos(theta)*180/math.pi,如果有向量为0,则返回提示:无法计算零向量的夹角
def vector_angle(vector1, vector2):
# begin
length1 = vector_length(vector1)
length2 = vector_length(vector2)
if length1 == 0 or length2 == 0:
return "无法计算零向量的夹角"
dot = dot_product(vector1, vector2)
cos_theta = dot / (length1 * length2)
# 防止浮点数误差导致math.acos报错
cos_theta = max(min(cos_theta, 1.0), -1.0)
theta = math.acos(cos_theta) * 180 / math.pi
return f"{theta:.2f} 度"
# end


# 打印向量,例如[5.00 7.00 9.00 ]
def print_vector(vector):
# begin
formatted = " ".join(f"{x:.2f}" for x in vector)
print(f"[{formatted} ]")
# end


# 输入示例向量
# 请输入第一个向量(用逗号分隔,例如 1,2,3):
# 请输入第二个向量(用逗号分隔,例如 4,5,6):
vector1 = [float(x) for x in input().split(",")]
vector2 = [float(x) for x in input().split(",")]

# 1. 向量加法
print("\n1. 向量加法结果:")
add_result = vector_addition(vector1, vector2)
print_vector(add_result)

# 2. 向量减法
print("\n2. 向量减法结果:")
# begin
sub_result = vector_subtraction(vector1, vector2)
print_vector(sub_result)
# end

# 3. 向量点积
print("\n3. 向量点积结果:")
# begin
dot_result = dot_product(vector1, vector2)
print(f"{dot_result:.2f}")
# end

# 4. 向量1的长度
print("\n4. 第一个向量的长度:")
# begin
length1 = vector_length(vector1)
print(f"{length1:.2f}")
# end

# 5. 向量2的长度
print("\n5. 第二个向量的长度:")
length2 = vector_length(vector2)
print(f"{length2:.2f}")

# 6. 第一个向量的单位向量
print("\n6. 第一个向量的单位向量:")
unit_vector1 = unit_vector(vector1)
if isinstance(unit_vector1, str):
print(unit_vector1)
else:
print_vector(unit_vector1)

# 7. 第二个向量的单位向量
print("\n7. 第二个向量的单位向量:")
# begin
unit_vector2 = unit_vector(vector2)
if isinstance(unit_vector2, str):
print(unit_vector2)
else:
print_vector(unit_vector2)
# end

# 8. 向量夹角,注意如果有因为向量为0而返回"无法计算零向量的夹角"提示信息的处理
print("\n8. 向量夹角:")
# begin
angle = vector_angle(vector1, vector2)
print(angle)
# end