|
发表于 2021-4-14 01:35:25
|
显示全部楼层
本帖最后由 丨游戏灬需要 于 2021-4-14 02:39 编辑
这次应该对了 .listData3 我就不验算了 ,逻辑在try_know那
确实难(也确实因为我本身就没干过编程) .花了我一整天才想出.....所以我确菜了
class A():
class Simulation():
def __init__(self):
self.listResult =[]
self.listHead =[]
def try_know(self):
return '''例如:['# a', '## b', '### c' ,'## d' ,'### e' ,'# f' ,'### g']
相当于:
# a
## b
### c
## d
### e
# f
### g
操作的话:
进入 ,创建
进入 ,创建
进入 ,创建
后退 ,创建
进入 ,创建
退后 ,退后 ,创建
进入 ,进入 ,创建
结果的话:
['1' ,'a']
['1.1' ,'b']
['1.1.1' ,'c']
['1.2' ,'d']
['1.2.1' ,'e']
['2' ,'f']
[2.1.1 ,'g']
所以 :
当前层最高 :listHead[-1] +=1
进入 :listHead.append(1)
后退 :listHead.pop()
创建 :listResult.append(['.'.join(map(str,listHead)) ,value])
如果要进入: 进入*n ,创建
如果要返回: 返回*n ,当前 ,创建
如果同层:当前 ,创建
'''
def peer(self):
'''指向当前最高层'''
self.listHead[-1] +=1
def entry(self):
'''进入'''
self.listHead.append(1)
def back(self):
'''后退'''
self.listHead.pop()
def create(self ,value):
'''创建'''
self.listResult.append(['.'.join(map(str ,self.listHead)) ,value])
def get_rsult(self):
return self.listResult
def __init__(self):
self.listData1 =['#a' ,'##b' ,'##c' ,'###d' ,'#e']
self.listData2 =['# a', '## b', '### c' ,'## d' ,'### e']
self.listData3 =['# a', '## b', '### c' ,'## d' ,'### e' ,'# f' ,'### g']
self.listData4 =['# a', '## b', '## c', '### d', '### e', '### f', '## g','### h','# i', '## j', '## k', '### l', '#### m','#### n', '### o', '# p','## q', '### r', '### s','## t', '### u', '# v', '## w', '### x','### y','## z']
def try_knowSimulation(self):
self.Simulation().try_know()
def try_know(self):
return '''
对比#数量 ,
如果现在的比上一个的数量多几个 ,说明是进入几个
如果现在的比上一个的数量少几个 ,说明是后退几个
如果数量相等 ,说明是同层建立
'''
def test(self ,listChooseData):
oldHead =''
temp =self.Simulation()
for info in listChooseData:
newHead ,value =self.split(info)
newHeadNum =newHead.count('#')
oldHeadNum =oldHead.count('#')
if newHeadNum >oldHeadNum:
for time in range(newHeadNum -oldHeadNum):
temp.entry()
temp.create(value)
oldHead =newHead
elif newHeadNum <oldHeadNum:
for time in range(oldHeadNum -newHeadNum):
temp.back()
temp.peer()
temp.create(value)
oldHead =newHead
elif newHeadNum ==oldHeadNum:
temp.peer()
temp.create(value)
oldHead =newHead
return temp.get_rsult()
def split(self ,strObj):
'''分割#和value'''
flag_ ,value =strObj.rsplit('#' ,1)
flag =flag_ +'#'
return [flag ,value]
a =A()
# print(a.try_know())
print(a.test(a.listData1))
print(a.test(a.listData2))
print(a.test(a.listData3))
print(a.test(a.listData4)) |
评分
-
查看全部评分
|