小编喜欢音乐和编程,总是想一些奇怪的点子能够结合一下两个热爱的领域。背吉他唱名实在太枯燥了,于是就突发奇想写了一个python小程序,辅助自己记忆指板。
import time
import datetime
import json
import random
# 记录程序开始时间
start = time.time()
def calculate2(a, b):
"""根据1、2、4、6弦弦数和品数计算简谱"""
c = float(a + 0.5 * b)
if 3.5 <= c < 7:
c += 0.5
elif c == 7.5:
c = 1
elif c == 7 and b != 0:
c = 1
elif c > 7.5:
c = float(c - 7) + 0.5
if c >= 3.5:
c += 0.5
return c
def calculate3(a, b):
"""根据3、5弦弦数和品数计算简谱"""
if 0 <= b <= 4:
return calculate2(a, b)
else:
return calculate2(a, b)
def calculate1(a, b):
"""根据弦数调用不同的计算方法"""
values = [3, 7, 5, 2, 6, 3]
a = values[a - 1]
if 1 < a < 4 or a == 7:
return calculate2(a, b)
else:
return calculate3(a, b)
def main():
count = 0
res = 0
wrong_questions = []
while count < 20:
count += 1
print(f"这是你的第{count}次尝试,加油!")
num1 = random.randint(1, 6)
num2 = random.randint(0, 8)
answer = calculate1(num1, num2)
try:
num = float(input(f"请问{num1}弦{num2}品的简谱是:"))
except ValueError:
num = float(input("输入格式有误!请重新输入一个数字:"))
if num == answer:
print("恭喜你答对啦,你真棒!距离吉他大师又近了一步!")
res += 1
else:
print(f"很遗憾答错了,正确答案是{answer},熟能生巧,请再试一次吧!")
wrong_questions.append((num1, num2, answer))
show_results(count, res, start, wrong_questions)
def show_results(count, res, start, wrong_questions):
"""显示结果并记录数据"""
a = float(res / count)
end = time.time()
duration = float(end - start)
print("——————————")
print("本轮练习已结束,辛苦啦!")
print("你的战绩如下:")
print(f"本轮用时{duration:.2f}秒,一共答对了{res}次,正确率为{a:.2%},坚持就是胜利,请继续加油!")
file_path = "D:/Desktop/练琴数据.txt"
save_results(file_path, a, duration)
print("——————————")
if wrong_questions:
review_wrong_questions(wrong_questions)
def save_results(file_path, accuracy, duration):
"""保存结果到文件"""
with open(file_path, "a") as f:
now = datetime.datetime.now()
eff = float((accuracy) / (duration) * 100)
result = {
"日期": now.strftime("%Y-%m-%d %H:%M:%S"),
"正确率": f"{accuracy:.2%}",
"花费时间": f"{duration:.2f}s",
"比率": f"{eff:.2f}"
}
json.dump(result, f, ensure_ascii=False, indent=4)
f.write("\n")
def review_wrong_questions(wrong_questions):
"""复习错误的问题"""
print("以下是你回答错误的题目,请再做一遍以加深印象:")
for num1, num2, answer in wrong_questions:
print(f"{num1}弦{num2}品的简谱是:")
try:
num = float(input("请输入你的答案:"))
if num == answer:
print("恭喜你答对啦,你真棒!")
else:
print(f"很遗憾答错了,正确答案是{answer},请记住哦!")
except ValueError:
num = float(input("输入格式有误,请重新输入一个数字!"))
if num == answer:
print("恭喜你答对啦,你真棒!")
else:
print(f"很遗憾答错了,正确答案是{answer},熟能生巧,请再试一次吧!")
if __name__ == "__main__":
main()
希望我可以做出更多好玩的东西来!