这两天豆子在学习Python的pandas模块。这个模块可以很方便的处理各个格式的文本文件,结合前面学习的Turtle绘图模块,我们可以做一个检测记忆的小游戏,通过输入中国的省份名字,他会自动地在空白地图上表明出来。如果实在想不起了,输入exit可以退出,然后会生成一个csv文件,标明我漏掉的省份名称。
截图如下
输入exit 退出之后,会自动生成一个csv,里面是我漏掉的省份名字
下面看看思路和实现的要点:
困难点:
1.如何获取每个省份在这个地图里面的坐标
2.如何处理坐标和省份名字之间的关系
3.地图上显示内容
解决方案:
- 我们可以通过 turtle 的鼠标事件来显示坐标
比如说,通过下面的代码,我可以在地图上点击对应的区域来获取响应的坐标
def get_mouse_click_coor(x,y):
print(x,y)
turtle.onscreenclick(get_mouse_click_coor)
turtle.mainloop()
- 创建一个类似下面的csv文件,列出省份名字和其对应的坐标,通过第一步的准备,我可以把每个省份的坐标都获取出来
state,x,y
河北,115.0,48.0
山西,73.0,-1.0
辽宁,192.0,58.0
吉林,234.0,91.0
黑龙江,243.0,151.0
江苏,164.0,-63.0
浙江,169.0,-120.0
安徽,130.0,-85.0
福建,144.0,-165.0
江西,109.0,-145.0
山东,139.0,-22.0
- 显示内容就很容易了,指定Turtle的实例化对象到对应的坐标输出相应的文字即可
下面是源代码,不到60行,非常简单,但是游戏效果很好
import turtle
import pandas
screen = turtle.Screen()
screen.title("中国省份记忆测试")
image= "china.gif"
screen.addshape(image)
turtle.shape(image)
#回答正确的列表
correct=[]
#总数据
data = pandas.read_csv("province.csv")
allstate= data.state.to_list()
#没有记住的列表
faillist=[]
while len(correct) < 34:
answer = screen.textinput(title=f"{len(correct)}/34 正确", prompt="省份名字是什么?").title()
if answer == 'Exit':
print("exit")
for item in allstate:
if item in correct:
pass
else:
print(item)
faillist.append(item)
print(faillist)
newdata= pandas.DataFrame(faillist)
newdata.to_csv("newdata.csv")
break
#把 pandas数据里面符合我们搜索结果的那一行数据找出来
state_data = data[data.state == answer]
if len(state_data) == 0:
print("No such state")
else:
# 找到这一行了,把对应的名字,x和y坐标找出来
name = state_data.state.item()
x = state_data.x
y = state_data.y
print(name)
print(x)
print(y)
#发送海龟到对应坐标处输出内容
display = turtle.Turtle()
display.hideturtle()
display.penup()
display.goto(int(x),int(y))
display.write(name,align="center",font=("Arial",8,"normal"))
correct.append(answer)
来源:oschina
链接:https://my.oschina.net/u/4405012/blog/4774764