python的常用数组工具

写在前面:

疫情期间在家无聊,写了一个简易的常用数组工具
功能模块主要是排序/计算
当然排序可以选择升序及降序排列
为了方便用户,加入了删除/查找/插入等额外的功能
计算模块则包括了求和/求积/标准差以及百分位数等功能
我觉得可以覆盖一些常用的数组处理
如果你不想用一些复杂的大型软件,这个会是一个很好的小工具~
对于软件的交互,我还是设计的比较简便的
全程敲数字键就ok了,很好上手!

编辑后:

在之前的基础上根据意见加入了文件读取的功能,用户可以直接在指定文件夹下新建一个data.txt来进行计算,这个在数据量大的情况下免去了一个个手动输入的麻烦,功能是一样的

from functools import reduce
import numpy
import os
import sys
for k in range(100):
    print('欢迎使用常用数组工具')
    select = input('请选择操作模式:\n1:手动输入\n2:读取文件\n请输入对应功能代码:')
    if select == '1':
        print('手动输入模式:\n1:排序\n2:计算\n3:退出')
        a = input('请输入您想要使用的功能代码:')
        # 数据的正反向排序
        if a == '1':
            cishu = input('请输入您想排序的数值个数:')
            cishu2 = int(cishu)
            data = []
            for i in range(cishu2):
                shuju = input('请输入您想排序的第%d个数值:' % (i+1))
                data.append(shuju)
            reshape = [int(i) for i in data]
            b = input('您想要升序还是降序\n1:升序\n2:降序\n请输入您想要使用的功能代码:')
            if b == '1':
                result = sorted(reshape)  # 正向排序函数
                print('输入数组为:', reshape)
                print('排序后数组为:', result)
            elif b == '2':
                result = sorted(reshape)  # 正向排序函数
                result.reverse()   # 反向排序函数
                print('输入数组为:', reshape)
                print('排序后数组为:', result)
            else:
                print('指令错误,请检查后重试')
            for p in range(100):
                c = input('是否需要继续操作\n1:插入\n2:修改\n3:删除\n4:退出\n5:查询\n请输入您想要使用的功能代码:')
                if c == '1':
                    xindata = input('请输入您想插入的值:')
                    weizhi = input('请输入您想插入的位置:')
                    weizhi1 = int(weizhi)
                    reshape.insert(weizhi1-1, xindata)
                    print(reshape)
                    reshape1 = [int(l) for l in reshape]
                    p = input('您想要升序还是降序,分别以1/2表示:')
                    if p == '1':
                        result2 = sorted(reshape1)  # 正向排序函数
                        print(result2)
                    elif p == '2':
                        result2 = sorted(reshape1)  # 正向排序函数
                        result2.reverse()  # 反向排序函数
                        print(result2)
                    else:
                        print('指令错误,请检查后重试')
                elif c == '2':
                    xin = input('请输入您想修改的值:')
                    di = input('请输入您想修改值的所在位置:')
                    di1 = int(di)
                    xin2 = int(xin)
                    reshape[di1-1] = xin2
                    s = input('您想要升序还是降序,分别以1/2表示:')
                    if s == '1':
                        result = sorted(reshape)  # 正向排序函数
                        print('输入数组为:', reshape)
                        print('排序后数组为:', result)
                    elif s == '2':
                        result = sorted(reshape)  # 正向排序函数
                        result.reverse()  # 反向排序函数
                        print('输入数组为:', reshape)
                        print('排序后数组为:', result)
                    else:
                        print('指令错误,请检查后重试')
                elif c == '3':
                    xin3 = input('请输入您想删除的数据位置:')
                    xin4 = int(xin3)
                    reshape3 = reshape.pop(xin4-1)
                    g = input('您想要升序还是降序,分别以1/2表示:')
                    if g == '1':
                        result = sorted(reshape)  # 正向排序函数
                        print('输入数组为:', reshape)
                        print('排序后数组为:', result)
                    elif g == '2':
                        result = sorted(reshape)  # 正向排序函数
                        result.reverse()  # 反向排序函数
                        print('输入数组为:', reshape)
                        print('排序后数组为:', result)
                    else:
                        print('指令错误,请检查后重试')
                elif c == '4':
                    break
                elif c == '5':
                    gg = input('请输入您想要查询的具体数值:')
                    xin = [str(i) for i in reshape]
                    if gg in xin:
                        zhi = xin.index(gg)
                        print('您查询的数值的首次出现位置为:', (zhi+1))
                        juti = [i for i, x in enumerate(xin) if x == gg]  # enumerate是遍历函数,产生一个list,数据类型为int
                        juti1 = [i + 1 for i in juti]
                        print('您查询的数值的所有出现位置为:', juti1)
                    if gg not in xin:
                        print('列表无查询项,请重试')

                else:
                    print('指令错误,请检查后重试')
        elif a == '3':
            exit()
        elif a == '2':
            xuan = input('请选择您想要进行的计算\n1:求和\n2:求积\n3:平均值\n4:标准差\n5:百分位数\n请输入您想要使用的功能代码:')
            if xuan == '1':
                one = input('请输入您想要计算的数值个数:')
                cishu3 = int(one)
                data2 = []
                for i in range (cishu3):
                    two = input('请输入第%d个数值:' % (i+1))
                    data2.append(two)
                reshape2 = [int(i) for i in data2]
                print('输入列表为:', reshape2)
                print('列表元素之和为:', sum(reshape2))  # 直接列表元素求和
            elif xuan == '2':
                three = input('请输入您想要计算的数值个数:')
                cishu4 = int(three)
                data3 = []
                for i in range(cishu4):
                    four = input('请输入第%d个数值:' % (i+1))
                    data3.append(four)
                reshape3 = [int(i) for i in data3]
                print('输入列表为:', reshape3)
                jie = reduce(lambda x, y: x * y, reshape3)  # reduce函数的顺序累积
                print('列表元素乘积:', jie )
            elif xuan == '3':
                five = input('请输入您想要计算的数值个数:')
                cishu5 = int(five)
                data4 = []
                for i in range(cishu5):
                    four = input('请输入第%d个数值:' % (i + 1))
                    data4.append(four)
                reshape4 = [int(i) for i in data4]
                print('输入列表为:', reshape4)
                ping = numpy.average(reshape4)  # numpy中的average函数
                print('列表元素平均值:', ping)
            elif xuan == '4':
                six = input('请输入您想要计算的数值个数:')
                cishu5 = int(six)
                data5 = []
                for i in range(cishu5):
                    four = input('请输入第%d个数值:' % (i + 1))
                    data5.append(four)
                reshape4 = [int(i) for i in data5]
                print('输入列表为:', reshape4)
                cha = numpy.std(reshape4)  #numpy中的std函数
                print('列表元素标准差为:', cha)
            elif xuan == '5':
                seven = input('请输入您想要计算的数值个数:')
                cishu6 = int(seven)
                data6 = []
                for i in range(cishu6):
                    five = input('请输入第%d个数值:' % (i + 1))
                    data6.append(five)
                a = [int(i) for i in data6]
                aa = input('请输入您想要的百分位:')
                aaa = int(aa)
                baifen = numpy.percentile(a, aaa)
                print('列表的%d%%位数为:' % aaa, baifen)

            else:
                print('指令错误,请检查后重试!')
        else:
            print('指令错误,请检查后重试!')
    if select == '2':
        print('文件读取模式:\n1:排序\n2:计算\n3:退出')
        a = input('在将需读取的名为data.txt的文件放入当前文件夹后,输入您想要使用的功能代码:')
        filename = 'data.txt'
        if a == '1':
            if os.path.exists(filename):
                with open(filename, 'r') as file_to_read:
                    lines = file_to_read.read()
                datamat = lines.split()
                changdu = len(datamat)
                reshape = [int(i) for i in datamat]
                datamat2 = numpy.array(reshape)
                print('当前文件内数据量:%d' % changdu)
                b = input('您想要升序还是降序\n1:升序\n2:降序\n请输入您想要使用的功能代码:')
                if b == '1':
                    result = sorted(datamat2)  # 正向排序函数
                    print('输入数组为:', datamat2)
                    print('排序后数组为:', result)
                elif b == '2':
                    result = sorted(datamat2)  # 正向排序函数
                    result.reverse()  # 反向排序函数
                    print('输入数组为:', datamat2)
                    print('排序后数组为:', result)
                else:
                    print('指令错误,请检查后重试!')
            else:
                print('data.txt在当前目录下不存在,请检查后重试!')
        elif a == '2':
            if os.path.exists(filename):
                with open(filename, 'r') as file_to_read:
                    lines = file_to_read.read()
                datamat = lines.split()  # 空格括号内空参数
                changdu = len(datamat)
                reshape = [int(i) for i in datamat]
                datamat2 = numpy.array(reshape)
                print('当前文件内数据量:%d' % changdu)
                xuan = input('请选择您想要进行的计算\n1:求和\n2:求积\n3:平均值\n4:标准差\n5:百分位数\n请输入您想要使用的功能代码:')
                if xuan == '1':
                    print('输入列表为:', datamat2)
                    print('列表元素和:', sum(datamat2))
                elif xuan == '2':
                    print('输入列表为:', datamat2)
                    jie = reduce(lambda x, y: x * y, datamat2)  # reduce函数的顺序累积;lambda是匿名函数
                    print('列表元素乘积:', jie)
                elif xuan == '3':
                    print('输入列表为:', datamat2)
                    print('列表元素平均值:', numpy.average(datamat2))
                elif xuan == '4':
                    print('输入列表为:', datamat2)
                    print('列表元素标准差:', numpy.std(datamat2))
                elif xuan == '5':
                    aa = input('请输入您想要的百分位:')
                    aaa = int(aa)
                    print('列表的%d%%位数为:' % aaa, numpy.percentile(datamat2, aaa))
                else:
                    print('指令错误,请检查后重试!')
            else:
                print('data.txt在当前目录下不存在,请检查后重试!')
        else:
            print('指令错误,请检查后重试!')
    else:
        print('指令错误,请检查后重试!')
发布了2 篇原创文章 · 获赞 2 · 访问量 316

猜你喜欢

转载自blog.csdn.net/MusicGeekit/article/details/104707354
今日推荐