最近面试了一道编程题,刚开始没写出来,后面仔细琢磨了一下,才做出来
import os
import numpy as np
"""
1. 程序接收x、y、z三个命令⾏输⼊
2. 新建⼀个维度数为x * y * z的数组
3. 对于第x维的每⼀个元素,以索引作为名称新建⼦⽂件夹
4. 对于第y维的每⼀个z维的数组,找出数值最⾼的三个值及其坐标,并以y维的索引作
为⽂件名,储存在其第x维对应的⽂件夹下
5. 同时统计第z维中每⼀个索引被选中的次数,并保存结果
"""
# 1. 程序接收x、y、z三个命令⾏输⼊(这里假设输入的值都是整数,未做错误判断)
x, y, z = map(int, input().split())
# 2. 新建⼀个维度数为x * y * z的数组
scores = np.random.rand(x, y, z)
# print(scores)
# 5.创建一个列表,用来记录z维中每⼀个索引被选中的次数,首先次数都设置为0
idx_stat = [0 for i in range(z)]
# 接收一个数组以及整数n,m,找出数组中最大的三个数,并返回其索引位置和数值
def find_max_idx(item, n, m):
idxs = []
vals = []
# 从小到大排序,返回一个新数组
new_item = sorted(item)
# 获取数组中最大的三个数
max_vals = new_item[-3:]
for i in max_vals:
for j in range(len(item)):
if i == item[j]:
idxs.append("{}{}{}".format(n, m, j))
vals.append(i)
else:
continue
return idxs, vals
# 获取当前文件路径
path = os.getcwd()
# 统计第z维中每⼀个索引被选中的次数
def update_stat(idxs):
for i in idxs:
numb = int(i[-1])
idx_stat[numb] += 1
for i in range(x):
# 3. 对于第x维的每⼀个元素,以索引作为名称新建⼦⽂件夹
file_path = path + '\\' + str(i)
if not os.path.exists(file_path):
os.mkdir(file_path) # 创建文件夹
for j in range(y):
item = scores[i, j]
# 4. 对于第y维的每⼀个z维的数组,找出数值最高的三个值及其坐标
idxs, vals = find_max_idx(item, i, j)
# 4. 以y维的索引作为⽂件名,储存在其第x维对应的⽂件夹下
file_path2 = path + '\\' + str(i) + '\\' + str(j)
if not os.path.exists(file_path2):
with open(file_path2, "w", encoding="utf-8") as op:
for k in range(len(idxs)):
op.write("索引{}:对应的值{}".format(idxs[k], vals[k]) + '\n')
op.close()
# print("索引:", idxs)
# print("三个最大的值:", vals)
# result = process(idxs, vals)
# save_result(result, i, j)
update_stat(idxs)
print("z维中每⼀个索引被选中的次数:", idx_stat)
运行结果: