面试编程1

最近面试了一道编程题,刚开始没写出来,后面仔细琢磨了一下,才做出来

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)

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值