# Tips:函数内部使用外部的变量需要global声明 #定义两个列表,一个表示所有歌曲,一个表示显示歌曲,定义一个光标变量 #你给我翻译翻译:什么***叫***翻页 #翻页就是更新显示列表 #你再给我翻译翻译:什么***叫***挪动光标 #挪动光标就是更新光标变量 n=int(input()) allsong=[i for i in range(1,n+1)]#所有歌曲 if n<=4: window=allsong else: window=[1,2,3,4]#窗口显示歌曲 choose=1#当前选中歌曲 def fanye(i):#翻页+移动光标 global window,allsong,choose if window==[1,2,3,4] and choose==1 and i=="U": window=allsong[-4:] choose=allsong[-1] elif window==allsong[-4:] and choose==allsong[-1] and i=="D": window=[1,2,3,4] choose=1 else: if i=="U" and choose==window[0]: for j in range(len(window)): window[j]-=1 choose=window[0] elif i=="D" and choose==window[-1]: for j in range(len(window)): window[j]+=1 choose=window[-1] def move(i):#只移动光标 global window,allsong,choose if i=="U": choose-=1 elif i=="D": choose+=1 cmd=input() if len(allsong)<=4: for i in cmd: move(i) choose=(choose+len(window))%len(window)#处理溢出 #注意:只移动光标包含两种情况: #1、光标在中间2、窗口宽度大于等于所有歌曲 #第一种情况光标不会有头尾跨越问题,但第二种会有 #所以需要写这行代码处理溢出 else: for i in cmd: p1=(choose==window[0] and i=="U") p2=(choose==window[-1] and i=="D") if p1 or p2: fanye(i) else: move(i) for i in window: print(i,end=" ") print() print(choose)