小白学python的一个月经历了什么
首先我在慕课里找到了个python教程基础部分这个是免费的
在这里花了1周多的时间
https://python123.io/index/courses/1521
接下来是两个方法的地方
https://www.liaoxuefeng.com/wiki/1016959663602400
https://www.runoob.com/python3/python3-tutorial.html
就在这三个地方学习
当时我基础部分还没学完 我朋友就来找我一起参加2020华为云软件赛
哈哈哈真是没有对比就没有伤害
菜鸡的我吧他实现了 但时间却用的太长了
和大家分享下题目 代码
题目
1.1 输入信息
输入为包含资金流水的文本文件,每一行代表一次资金交易记录,包含本端账号ID, 对端账号ID, 转账金额,用逗号隔开。
本端账号ID和对端账号ID为一个32位的无符号整数
转账金额为一个32位的无符号整数
转账记录最多为28万条
每个账号平均转账记录数< 10
账号A给账号B最多转账一次
举例如下,其中第一行[1,2,100]表示ID为1的账户给ID为2的账户转账100元:
1,2,100
1,3,100
2,4,90
3,4,50
4,1,95
2,5,95
5,4,90
4,6,30
6,7,29
7,4,28
1.2 输出信息
输出信息为一个文件,包含如下信息:
第一行输出:满足限制条件下的循环转账个数。
说明:数据集经过处理,会保证满足条件的循环转账个数小于300万。
第二行开始:输出所有满足限制条件的循环转账路径详情。
输出循环转账路径要按照指定排序策略进行排序:每条循环转账中,ID(ID转为无符号整数后)最小的第一个输出;总体按照循环转账路径长度升序排序;同一级别的路径长度下循环转账账号ID序列,按照字典序(ID转为无符号整数后)升序排序。
举例如下:
4
1,2,4
1,3,4
4,6,7
1,2,5,4
1.3 限制条件
循环转账的路径长度最小为3(包含3)最大为7(包含7),例如账户A给账户B转账,账户B给账户A转账,循环转账的路径长度为2,不满足循环转账条件。
代码
import re
import time
with open('test_data.txt', 'r')as f:
ls = []
ls_one = []
ls_two = []
num_all = 0
# 分为两个序列
for line in f.readlines():
ls_one += re.findall("(\d{0,32}),\d{0,32},\d{0,32}", line)
ls_two += re.findall("\d{0,32},(\d{0,32}),\d{0,32}", line)
s3 = []
s33 = []
addceb=[]
s4 = []
s5 = []
s6 = []
s7 = []
# 计算循环转账次数
ss=0
with open ('result.txt','w+')as f1:
for i, j in enumerate(ls_one):
c = ls_two[i]
for lc,czz in enumerate(ls_one[i:], i):
if czz == c:
b = ls_two[lc]
if j==b:
continue
elif j != b:
for lj,js in enumerate(ls_one[lc:],lc): #3
if js == b:
e = ls_two[lj]
if j == e:
num_all+=1
if c<b<e:
addceb = c + ',' + b + ',' + e
#print(addceb)
elif e<c<b:
addceb = e + ',' + c + ',' + b
print(addceb)
else:
addceb = b + ',' + e + ',' + c
#print(addceb)
s3.append(addceb)
elif j != e:
for hm,mc in enumerate(ls_one[lj:],lj):
if mc == e:
g = ls_two[hm]
if j == g and c != e:
#print(c, b, e, g)
num_all += 1
addceb = c + ',' + b + ',' + e +','+g
s4.append(addceb)
elif j!=g:
for wt,ts in enumerate(ls_one[i:],i):#五次
if ts == g:
h = ls_two[wt]
if j == h and c!=g:
num_all += 1
addceb = c + ',' + b + ',' + e+','+g+','+h
s5.append(addceb)
s5.sort(reverse=False)
#6次
elif j!=h :
for ws,sh in enumerate(ls_one[wt:], wt):
if sh == h:
m = ls_two[ws]
if j == m and b!=h and c!=g:
num_all += 1
addceb = c + ',' + b + ',' + e + ',' + g + ',' + h+','+m
s6.append(addceb)
s6.sort(reverse=False)
#7次
elif j!=m:
for xa,ax in enumerate(ls_one[ws:],ws):
if ax == m:
z = ls_two[xa]
if j == z and c!=h:
num_all += 1
addceb = c + ',' + b + ',' + e + ',' + g + ',' + h + ',' + m+','+z
s7.append(addceb)
s7.sort(reverse=False)
else:
continue
else:
continue
else:
continue
else:continue
else:
continue
else:
continue
else:
continue
else:
continue
else:
continue
else:
continue
else:
continue
else:
continue
s33=sorted(s3, key=lambda x: x[0])
s33.extend(s4)
s33.extend(s5)
s33.extend(s6)
s33.extend(s7)
f1.write(str(num_all)+'\n')
for s in s33:
f1.write(s + '\n')
用标准库实现的后来才知道数据处理还可以用numpy库 ~~题目有给出但是由于我不会就没有用了。。。。