今天又给自己出了道题,需求是实现《光·遇》游戏中的格子琴谱的打印,这种琴谱是一个5*3的长方格子谱(音域是从中音do开始的十五个钢琴白键),那么需求就变成了:
1.打印一个5*3的长方形格子
2.实现向指定格子中填充内容
3.在每一层循环中给需要填充内容的行列数传参
下面是实现了这几个功能的代码:
# 定义乐谱边长
x = 26
y = 13
# 琴谱的页数
# num = 1
# 初始化
a = 0
b = 0
# 第p行第q列
# pq传参
def get_p():
global p
p = int(input(":"))
def get_q():
global q
q = int(input(":"))
# 定义打印函数
def my_print(q):
if q == 1:
print(' *' + ' *' * 4 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *')
elif q == 2:
print(' *' + ' ' * 8 + ' *' + ' *' * 4 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *')
elif q == 3:
print(' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' *' * 4 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *')
elif q == 4:
print(' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' *' * 4 + ' *' + ' ' * 8 + ' *')
elif q == 5:
print(' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' *' * 4 + ' *')
# 开始输出
num = int(input("请输入您的琴谱总页数:"))
# 开始循环打印
while a in range(num):
get_p()
get_q()
for b in range(y):
# if判断,筛选特殊行
if p == 1 and (b == 1 or b == 2 or b == 3):
my_print(q)
elif p == 2 and (b == 5 or b == 6 or b == 7):
my_print(q)
elif p == 3 and (b == 9 or b == 10 or b == 11):
my_print(q)
elif b == 0 or b == 4 or b == 8 or b == 12:
print(' *' * x)
# else筛选剩余行
else:
print(' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *' + ' ' * 8 + ' *')
a +=1
这个是打印了“一闪一闪亮晶晶”(1155665)的单手琴谱的效果:
请输入您的琴谱总页数:7
:1
:1
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
:1
:1
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
:1
:5
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
:1
:5
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
:2
:1
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
:2
:1
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
:1
:5
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
在写的过程中遇到了一些问题,因为刚接触python,对一些规则不熟悉,我在给pq传参时发现最终只能打印出给pq初始化时赋的值,刚开始对这种现象百思不得其解,明明刚调用完赋值函数,怎么转眼在“主函数”中就不认我刚刚赋的值呢,经过在中间疯狂print()来找错误,突然发现好像在python中没有主函数的概念,我刚刚所做的是妄图在两个平等的“函数”中去使用其中一个对另一个函数中的变量造成影响,在经过多方查证搜索之后,我找到了global函数,这个函数的作用是声明全局变量,可以满足这个题目的需求。
最后的输出效果不算良好,后续完善的话主要从以下几个方面来着手:
1.实现在十五格琴谱中实现多手和弦(在一页琴谱中填充两个或多个格子),也就是传参的时候可以同时传多个参数
2.实现横向打印,纵向的输出结果不太美观,但是这一步似乎要在完成了第一步之后才可以开始实现,因为涉及到每一横行打印多页
3.实现一页琴谱上对指法的指示性(每页填充时有多种填充方式),目的在区分这一页按键的先后顺序