6-4 jmu-python-组合数据类型-3.二维坐标点统计 (15分)

为君一笑 提交于 2019-12-10 03:17:07

随机生成n个点并存入字典,每个点的坐标为(x, y),坐标x、y的取值范围是[0,10]之间的整数。
随机生成点的过程中可能会产生重复的点(两个点的坐标值一样),需记录该点生成的次数,如在
整个生成点的过程中生成了3个坐标为(2,1)的点,那么需将3作为点生成次数纪录下来。
最后在字典中查询3次点坐标,并返回查询结果。

建议:使用字典存储点。
思考:如何在此基础上使用蒙特卡洛方法计算圆周率。

步骤如下: 输入n代表要产生n个点
输入x代表随机数种子(注意:设置种子前需将x转化为整型)

调用generatePoint(n)函数生成n个点,每个点包含x,y坐标,将(x,y)存为元组,然后将该元组作为元素放入列表(可放重复的点坐标),并将该列表返回。
调用createPointDict(pList)将步骤1生成的点列表pList中的每个点放入字典pDict中,字典的键为点(元组),值为出现次数。
调用doQuery(pDict, p): 在pDict中查询p,如果查到则输出点即出现次数,否则输出Not Found。
注意:需要导入random库

函数接口定义:
generatePoints(n) #产生n个2维坐标点放入列表并返回该列表
createPointDict(pList) #将pList中的节点加入字典并统计出现次数,然后返回字典
doQuery(pDict, p) #在pDict中查询p,如果查到则输出该点及其出现次数,否则输出’Not Found’。
裁判测试程序样例:
/* 请在这里填写答案 */
n = int(input())
seed(int(input()))
pList = generatePoints(n)
pDict = createPointDict(pList)
for i in range(3):#查询3次
x, y = [int(e) for e in input().split(’,’)]
doQuery(pDict, (x, y))
输入格式:
输入的n代表产生n个坐标点
输入x代表种子(x需转化为整型)
若干个行所要查找的坐标。

输出格式:
如果存在,输出 二维坐标点 = 出现次数。注:二维坐标点以元组形式出现。
否则输出Not Found

输入样例:
10000
1
2,9
99,100
1,7
输出样例:
(2, 9) = 87
Not Found
(1, 7) = 75`

from random import*
def generatePoints(n):
    ls = []
    for i in range(n):
        x , y = randint(0,10),randint(0,10)
        z = (x,y)
        ls.append(z)
    return ls
def createPointDict(pList):
    #将pList中的节点加入字典并统计出现次数,然后返回字典
    s={}
    for i in pList:
        if i in s:
            s[i]+=1
        else:
            s[i]=1
    return s
def doQuery(pDict, p):
    #在pDict中查询p,如果查到则输出该点及其出现次数,否则输出'Not Found'。
    if p in pDict:
        print("{} = {}".format(p,pDict[p]))
    else:
        print("Not Found")

如果不是random.seed()的形式,就用from import random*的形式引入这个库,randint(0,10)生成的就是包括0和10的随机数
学会字典的基本操作

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!