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