大一python期末复习综合题

这篇具有很好参考价值的文章主要介绍了大一python期末复习综合题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

问题1:阶层函数

问题2:文件读取

问题3:嵌套循环

问题4:求最短路径

问题4.1:路径长度

问题4.2:最短路径

问题4.2.1:列表添加元素

问题4.2.2:返回最短路径

问题5:绘图

问题5.1:绘制城市坐标散点图

问题5.2:绘制路径图


前言

本题涵盖的知识点主要包括嵌套列表,文件读取和处理,绘图。

TSP,即旅行商问题,又称TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一。假设有一个旅行商人要拜访N个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。下面将通过几个子问题以循环的方式解决TSP问题。

显然,起始点的选择不会影响路径长度。

例如:

A,B两个城市,路径为A--->B--->A

A,B,C三个城市,路径为A--->B--->C--->A,A--->C--->B--->A

A,B,C,D四个城市,路径有A--->B--->C--->D--->A,A--->B--->D--->C--->A,A--->C--->B--->D--->A,A-->C--->D--->B--->A,A--->D--->B--->C--->A,A--->D--->C--->B--->A,共有6条路径。

不加证明的给出当城市个数为n,路径总数为(n-1)!

这是题目所需的文件:

链接:https://pan.baidu.com/s/1u_ZBqbt_0odQwB0NT2eTJA?pwd=6666 
提取码:6666

链接:https://pan.baidu.com/s/1lmAVdwCgfdi1NEMUuyqZPw?pwd=6666 
提取码:6666

这是文章所有内容的压缩包:

链接:https://pan.baidu.com/s/1qOUmBJCoio7a6DMJyfEeXw?pwd=6666 
提取码:6666

问题1:阶层函数

请定义阶层函数 f(n),n>=2,返回城市个数的方案数(n-1)!

例如

>>> f(2)

1

>>> f(4)

6

>>> f(10)

362880

#问题1
#********* Begin *********#
def f(n):
    if n==2:
        return 1
    else:
        return (n-1)*f(n-1)
#********* End *********#

问题2:文件读取

请定义函数read()(无输入参数),读取文件中储存的n个城市的地址(n>=2),要求返回n*2的嵌套列表。文件格式第一列为横坐标,第二列为纵坐标。

注:

关于文件地址的获取:鼠标右键复制文件地址会返回:"C:\Users\username\Desktop\city_location.txt"这样一个字符串。

例如:

读取文件前六行时:(每行中间以四个空格隔开)

1304 2312

3639 1315

4177 2244

3712 1399

3488 1535

3326 1556

返回的列表:

[[1304, 2312],

 [3639, 1315],

 [4177, 2244],

 [3712, 1399],

 [3488, 1535],

 [3326, 1556]]

提示:注意\n的处理

#问题2
from pprint import pprint

#********* Begin *********#  
def read():
    infile=open(r"C:\Users\hqh\Desktop\1.txt",'r').readlines()
    n=len(infile)
    l=[0]*n
    for i in range(n):
        l[i]=[eval(j) for j in infile[i].replace('\t',' ').replace('\n','').split()]
    return l
#********* End *********#
location=read()
pprint(location[0:6])

问题3:嵌套循环

请定义distance(location)函数,location是问题二中read()的返回值,是一个n*2嵌套列表即n个城市的坐标。要求返回n*n列表dist,dist[i][j]表示第i到第j个城市的距离。

提示:dist[i][i]=0;dist[i][j]=dist[j][i]

例如:以问题二返回值为location

[[0.0,

  2538.943481056638,

  2873.8046210555094,

  2575.27338354591,

  2318.0994370388858,

  2158.707946897866],

 [2538.943481056638,

  0.0,

  1073.53854145997,

  111.28791488746656,

  266.83515510516975,

  395.03164430207363],

 [2873.8046210555094,

  1073.53854145997,

  0.0,

  964.4946863513557,

  988.6364346917425,

  1094.3239922436135],

 [2575.27338354591,

  111.28791488746656,

  964.4946863513557,

  0.0,

  262.0534296665472,

  416.70733134899365],

 [2318.0994370388858,

  266.83515510516975,

  988.6364346917425,

  262.0534296665472,

  0.0,

  163.35544068074378],

 [2158.707946897866,

  395.03164430207363,

  1094.3239922436135,

  416.70733134899365,

  163.35544068074378,

  0.0]]

#问题3
#********* Begin *********#  
def distance(l):
    n=len(l)
    dist=[[0]*n for i in range(n)]
    for i in range(n):
        for j in range(i,n):
            dist[i][j]=((l[i][0]-l[j][0])**2+(l[i][1]-l[j][1])**2)**0.5
            dist[j][i]=dist[i][j]
    return dist
#********* End *********#
pprint(distance(location[0:6]))

问题4:求最短路径

问题4.1:路径长度

请定义函数length(way),way是传入的1*n列表,里面是0~(n-1)的一个排列,即路径,最后会返回出发点,要求函数返回路径和,

若代码正确则会输出如下:

[7161.093526113121, 7438.587165121758]

提示:可以利用问题3的dist进行计算

#问题4.1
#********* Begin *********#
dist=distance(location)  #请在左侧为dist赋值
def length(way):
    l=dist[way[0]][way[-1]]
    for i in range((len(way)-1)):
        l+=dist[way[i]][way[i+1]]
    return l
#********* End *********#
print([length([0,1,2,3,4,5]),length([0,1,2,4,3,5])])

问题4.2:最短路径

由前面定义的阶层函数f(n)知路径总数为(n-1)!,而初始点的选择对结果没有影响,故默认以第n个城市为起点,关于0~(n-2)(索引值,对应第1个到(n-1)个城市)的全排列代码已给出,并储存在(n-1)!*(n-1)列表ways中。

例如,n=4,ways是0-2的全排列,ways=[[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]]

问题4.2.1:列表添加元素

ways是0~(n-2)的全排列,请你把n-1添加至ways每一个子列表开头,以上为例,添加元素后的ways=[[3, 0, 1, 2], [3, 0, 2, 1], [3, 1, 0, 2], [3, 1, 2, 0], [3, 2, 0, 1], [3, 2, 1, 0]]

提示:这是添加到子列表开头不是末尾

#问题4.2.1

import itertools
n=len(dist)
nums = list(range(n-1))
ways= [list(i) for i in list(itertools.permutations(nums))]

#********* Begin *********#
ways=[[n-1]+i for i in ways]
#********* End *********#

问题4.2.2:返回最短路径

在问题4.2.1的基础上,遍历所有方案并返回最短路径对应的方案bestway,bestway是一个1*n的列表。

提示:你可以使用length(way)帮助你解决问题

#问题4.2.2
#********* Begin *********#
def best(ways):
    lways=[length(i) for i in ways]
    bestway=ways[lways.index(min(lways))]
    return bestway
#********* End *********#
bestway=best(ways)

问题5:绘图

请在同一张画布上绘制1*2两个子图,相关的库已经导入

问题5.1:绘制城市坐标散点图

请在第一个子图中绘制城市坐标散点图,函数已经定义,无返回值。要求:标题为”城市坐标散点图”,图例为”citylocation”。你无需添加show语句。

提示:plt.scatter(x,y)会绘制相应坐标的散点图

提示:在输入图例的时候传入的字符串应当储存在列表中,例如图例为a时,传入为[a]

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']#显示中文标签

#问题5.1
def p1():
    #********* Begin *********#
    x=[i[0] for i in location]
    x.append(x[0])
    y=[i[1] for i in location]
    y.append(y[0])
    plt.subplot(1,2,1)
    plt.scatter(x,y)
    plt.title('城市坐标散点图')
    plt.legend(['citylocation'])
    #********* End *********#
p1()

问题5.2:绘制路径图

请在第二个子图中根据问题4求得的最短路径bestway绘制路径图,要求:标题为”最佳路径”,图例为”bestway”,线型要求为 ’r*-’。你无需添加show语句。

注意:终点和起点需要连接

提示:subplot(m,n,p)表示在有m*n个子图的画布上绘制第p张子图

当输入文件是1时输出如下

大一python期末复习综合题

 当输入文件是2时输出如下:

大一python期末复习综合题

 文章来源地址https://www.toymoban.com/news/detail-500620.html

#问题5.2
def p2():
    #********* Begin *********#
    x=[location[i][0] for i in bestway]
    x.append(x[0])
    y=[location[i][1] for i in bestway]
    y.append(y[0])
    plt.subplot(1,2,2)
    plt.plot(x,y,'r*-')
    plt.legend(['bestway'])
    plt.title('最佳路径')
    #********* End *********#
p2()
plt.show()

到了这里,关于大一python期末复习综合题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库相关理论知识(有目录便于直接锁定相关知识点+期末复习)

    一,数据模型,关系型数据模型,网状模型,层次模型 1. 数据库模型 是用来描述和表示现实世界中的事物、概念以及它们之间的关系的工具, 但是并不是越专业越好,还要平衡它的模型的复杂性、通用性和成本效益等因素 。数据模型按不同的应用层次可以分为 三个层次 ,

    2024年03月16日
    浏览(42)
  • 模式识别期末复习问题合集

    1.什么是模式?监督模式识别和非监督模式识别的典型过程分别是什么? 模式:指需要识别且可测量的对象的描述  2.基本的基于最小错误率的贝叶斯决策规则是什么? 3.最小错误率的贝叶斯决策规则的等价形式有哪些?  4.多类问题中基于最小错误率的贝叶斯决策规则是什么

    2024年02月09日
    浏览(25)
  • Python期末复习题库(上)——“Python”

    小雅兰期末加油冲冲冲!!! 1. (单选题) Python源程序的扩展名为( A ) A. py B. c C. class D. ph 2. (单选题) 下列( A )符合可用于注释Python代码。 A. # B. */ C. // D. $ 3. (单选题)下列关于Python 语言的特点的说法中,错误的是( A ). A. Python 语言是非开源语言 B. Python 语言是跨平台语

    2024年02月07日
    浏览(27)
  • Python期末复习题库(下)——“Python”

    小雅兰期末加油冲冲冲!!! 1. (单选题)下列关于文件打开模式的说法,错误的是( C )。 A. r代表以只读方式打开文件 B. w代表以只写方式打开文件 C. a代表以二进制形式打开文件 D. 模式中使用+时,文件可读可写  2. (单选题)下列选项中,以追加模式打开文件的是( D ) A. a B. ab+ C.

    2024年02月07日
    浏览(27)
  • python期末复习笔记

    目录 python笔记 第一章 1. 编译解释的区别和联系 p8~ 2. Python 3.0无法向下兼容python 2.0的既有语法 p11 3. Python 语言的特点 p12 4. 启动运行方式 p15 5. IPO程序编写方法概念 p22 第二章 1. Python程序语法元素分析 p36 2. Python蟒蛇绘制 p46 第三章 (较为琐碎,边动手边记) 1. 数字类型 p62

    2024年02月11日
    浏览(32)
  • Python期末复习题

    一 回文数判断。设n是一任意自然数,如果n的各位数字反向排列所得自然数与n相等,则n被称为回文数。从键盘输入一个数字,请编写程序判断这个数字是不是回文数,若是返回True,否则返回False。 【输入示例】12321 【输出示例】True 二 素数判断。编写一个函数isPrime(x),接受

    2024年02月08日
    浏览(35)
  • C++ easyx大一期末作业利器

    紧跟着1.0版本的完成,又到了激动人心的C++期末作业了。(上学期是C语言的),这学期,我仅仅改了一点点上学期的期末作业,然后很轻松的水…啊不,完成了这次的期末作业。 所以,大家一定要注重复用!!! 很快乐。 这个改一改就是你的…啊不是,我是说基于框架进行开发

    2024年02月15日
    浏览(35)
  • python二级和期末复习题

    2023年04月12日
    浏览(57)
  • Python期末复习知识点大合集(期末不挂科版)

    本期博客总结了老师给出的考试范围的相关知识点,知识点总结的并不是很完整,更多详细细致的知识点可以去看一下我的Python专栏: Python编程基础 Python每日一学 知识点总结仅供参考,总结不易,期待得到你们的点赞收藏转发三连,谢谢!祝大家期末考试顺利通过!!!

    2024年02月03日
    浏览(37)
  • Python期末复习题:组合数据类型

    有10 名同学的python 课程成绩分别为:94, 89, 96, 88, 92, 86, 69, 95, 78,85。 要求利用列表分析成绩,输出平均值、最高的3个成绩和最低的3个成绩、成绩中位数(是按顺序排列的一组数据中居于中间位置的数,如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数)。

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包