文章目录

  • 介绍
    • 代码
      • 用户输入
      • 自反关系
      • 对称关系
      • 传递关系
      • 自反闭包
      • 函数及其类型
      • 主函数
    • 打包好的程序以及源码

介绍

我们现在有一个需求,具体需求内容如下
(1) 判断关系R是否为自反关系。键盘输入R的关系序偶,程序输出判断结果
(2) 判断关系R是否为对称关系。键盘输入R的关系序偶,程序输出判断结果
(3) 判断关系R是否为传递关系。键盘输入R的关系序偶,程序输出判断结果
(4) 键盘输入两个已知关系通过合成构造新的关系,程序输出复合后的新关系
(5) 键盘输入关系R序偶,程序计算该关系的自反闭包,并输出结果。
(6) 键盘输入关系R序偶,程序判断该关系是否为函数与函数类型,并输出判断结果。

我使用Python模块化开发思路将每一项需求都进行开发。并有详细注释,所以我就直接上代码了。

代码

根据题意我们的知,我们需要输入两种类型的内容,所以我就做了一个用户输入的模块,然后是个个需求处理模块。

用户输入

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2019/10/30 9:03
# @Author  : 寻觅
# @File    : 用户输入. py
# @Software: PyCharm# 用于接收集合a的函数
def write_a():""":return: 输出按位置分别是‘集合’,'自反集合'"""# 创建一个列表用于存储自反集合original = []# 将接收的集合保存到data中data = input('请输入集合(数字间请用逗号隔开)').split(',')# 将收到的集合自动转换为自反集合并存储到original中n = 0for i in data:original.append([i, i])n += 1print('你输入的集合为', data, '你输入的自反集合为', original)return data, original# 用于接收对偶序列R的的函数
def write_r():""":return: 当程序出现异常,将会输出异常和异常信息,当程序正常运行将会输出正常信息和自动排序后的对偶序列"""# 创建接收对偶序列的序列contrast = []# 接收用户需要输入几对对偶序列的信息,并做容错处理,如果用户输入内容不是整数则抛出异常try:custom = int(input('你要输入几对对偶序列?'))except Exception as abnormal:data = '异常被抛出,异常内容为:%s!\n(输入内容必须是一个整数,请重新输入一个整数)' % abnormalrepeat = Truereturn repeat, dataelse:repeat = False# 如果没有抛出异常,开始对用户输入进行处理i = 0while custom > i:i += 1print('正在输入', i, '对关系序列,按回车键后输入下一对')n = True# 用户进行输入并判断是否合法while n:r = input('对关系中每个元素用逗号隔开:  ').split(',')if len(r) != 2:print('你输入的值有误,请输入有且仅有一对关系!')elif len(r) == 2:contrast.append(r)n = False# 对用户输入的序列自动排序,方便后续处理contrast.sort()print('需要对比的序列经过自动排序后为', contrast)return repeat, contrast

自反关系

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2019/10/30 9:03
# @Author  : 寻觅
# @File    : 用户输入. py
# @Software: PyCharm# 用于接收集合a的函数
def write_a():""":return: 输出按位置分别是‘集合’,'自反集合'"""# 创建一个列表用于存储自反集合original = []# 将接收的集合保存到data中data = input('请输入集合(数字间请用逗号隔开)').split(',')# 将收到的集合自动转换为自反集合并存储到original中n = 0for i in data:original.append([i, i])n += 1print('你输入的集合为', data, '你输入的自反集合为', original)return data, original# 用于接收对偶序列R的的函数
def write_r():""":return: 当程序出现异常,将会输出异常和异常信息,当程序正常运行将会输出正常信息和自动排序后的对偶序列"""# 创建接收对偶序列的序列contrast = []# 接收用户需要输入几对对偶序列的信息,并做容错处理,如果用户输入内容不是整数则抛出异常try:custom = int(input('你要输入几对对偶序列?'))except Exception as abnormal:data = '异常被抛出,异常内容为:%s!\n(输入内容必须是一个整数,请重新输入一个整数)' % abnormalrepeat = Truereturn repeat, dataelse:repeat = False# 如果没有抛出异常,开始对用户输入进行处理i = 0while custom > i:i += 1print('正在输入', i, '对关系序列,按回车键后输入下一对')n = True# 用户进行输入并判断是否合法while n:r = input('对关系中每个元素用逗号隔开:  ').split(',')if len(r) != 2:print('你输入的值有误,请输入有且仅有一对关系!')elif len(r) == 2:contrast.append(r)n = False# 对用户输入的序列自动排序,方便后续处理contrast.sort()print('需要对比的序列经过自动排序后为', contrast)return repeat, contrast

对称关系

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Author  : 寻觅
# @File    : 对称关系.py
# @Time    : 2019/10/30 22:45
# @Software: PyCharmdef symmetric(contrast):""":param contrast: 传入一个对偶序列R:return: 输出对称关系判断结果"""# 将判断结果设置为resultresult = True# 创建一个空集合用来存储被反向后的序列reverse = []# 遍历对偶序列R给ifor i in contrast:# 将每个遍历出来的i反向j = i[::-1]# 将反向后的内容存入之前建立的新序列reverse.append(j)# 将新序列自动排序(原本序列在输入时已经排序过)reverse.sort()# 对比序列看是否一样,如果不一样就不是对称关系if reverse != contrast:result = Falsereturn result

传递关系

传递关系需要用到符合关系的一些判断,所以在这里我就直接引入符合关系对函数进行一些处理

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Author  : 寻觅
# @File    : 传递关系.py
# @Time    : 2019/10/30 23:26
# @Software: PyCharmfrom 符合关系 import adddef transmit(contrast):result = True""":param contrast: 传入一个对偶序列R:return: 输出符合关系判断结果"""# 将自己进行一次符合运算data = add(contrast, contrast)for i in data:# count用于判断指定元素在集合中出现的次数,查看符合运算出的内容是否都为本身if contrast.count(i) == 0:result = Falsereturn result

自反闭包

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Author  : 寻觅
# @File    : 自反闭包.py
# @Time    : 2019/10/30 23:54
# @Software: PyCharmfrom 自反关系 import introspectdef reverse(original, contrast):""":param original: 传入一个自反函数A:param contrast: 传入一个对偶序列R:return: 输出自反闭包"""# 判断输入是否就自反函数,如果是,就直接输出Rif introspect(original, contrast):return contrast# 如果不是就将A和R相加else:data = original + contrast# 将加完后的内容取出检查是否有重复的for i in data:# count函数用来判断列表中有几个指定的元素,将重复的内容删除if data.count(i) > 1:data.remove(i)return data

函数及其类型

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Author  : 寻觅
# @File    : 函数及其类型.py
# @Time    : 2019/10/31 0:13
# @Software: PyCharmdef fn(fn1, fn2, contrast):""":param fn1: 传入第一个集合:param fn2: 传入第二个集合:param contrast: 传入序列R:return: 输出按顺序分别是‘是否是函数’,‘是否单射’,‘是否满射’"""# 建立一个data列表,之后用来判断是否是满射会用data = []# 默认是函数result = True# 默认不是单射和满射single = Falsefull = False# 判断如果集合与序列长度不一样,哪肯定不是函数if len(fn1) != len(contrast):result = Falseelse:# 用来判断fn1是否有问题n = 0while len(fn1) > n:# count函数用来判断列表中有几个指定的元素,如果发现序列R中并非有且只有一个集合fn1中的元素这就不是一个函数。if fn1.count(contrast[n][0]) != 1:result = Falsebreakn += 1# 用来判断fn2是否有问题n = 0while len(fn2) > n:# 先将序列R中对应fn2位置的函数都取出存放到一个新的列表中data.append(contrast[n][1])# 查看是否有序列R中的元素在fn2中并没有出现的情况出现,如果有就表示这不是函数if fn2.count(contrast[n][1]) == 0:result = Falsebreak# 判断是否是单射elif fn2.count(contrast[n][1]) == 1:single = Truen += 1# 将序列R中拿出的一组新列表和fn2都进行一次排序data.sort()fn2.sort()# 判断fn2和data是否完全相等,来判断是否是满射if fn2 == data:full = Truereturn result, single, full

主函数

主函数内我所有变量都用的是中文,我试了我的两台Windows10系统,pycharm编译器,Python3.8版本情况下没有报错,只有一些让我使用ASCII编码的提示,但是并不影响程序运行!

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2019/10/30 9:03
# @Author  : 寻觅
# @File    : 主模块. py
# @Software: PyCharmfrom 用户输入 import write_a as 输入A, write_r as 输入R
from 自反关系 import introspect as 自反关系判断
from 对称关系 import symmetric as 对称关系判断
from 传递关系 import transmit as 传递关系判断
from 符合关系 import add as 符合运算
from 自反闭包 import reverse as 自反闭包计算
from 函数及其类型 import fn as 函数判断# 用来接收write_r模块的
def 输入R精简版():重复 = Truewhile 重复:输入 = 输入R()重复 = 输入[0]内容 = 输入[1]if 重复:print(内容)return 内容# 做用户输入判断
程序重复 = True
while 程序重复:print("""请输入你需要执行的功能的序号!1.判读自反关系2.判读对称关系3.判读传递关系4.对两个关系进行复合5.输出自反闭包6.判读是否为函数以及函数类型""")输入判断 = Truewhile 输入判断:序号 = input('请输入相应的数字:  ')# isdigit用于判断是否为数字if 序号.isdigit():序号 = int(序号)if 1 <= 序号 <= 6:输入判断 = Falseelse:print('请输入数字1或2或3或4或5或6')else:print('请数字一个整数')# 将类(Relation)进行实例化处理if 序号 == 1:A = 输入A()[1]R = 输入R精简版()自反关系 = 自反关系判断(A, R)if 自反关系:print('你输入%s和%s\n是自反关系\n' % (A, R))else:print('你输入%s和%s\n不是自反关系\n' % (A, R))elif 序号 == 2:R = 输入R精简版()对称关系 = 对称关系判断(R)if 对称关系:print('你输入的%s\n是对称关系\n' % R)else:print('你输入的%s\n不是对称关系\n' % R)elif 序号 == 3:R = 输入R精简版()传递关系 = 传递关系判断(R)if 传递关系:print('你输入的%s\n是传递关系\n' % R)else:print('你输入的%s\n不是传递关系\n' % R)elif 序号 == 4:print('请输入第一组')R1 = 输入R精简版()print('请输入第一组')R2 = 输入R精简版()符合运算结果 = 符合运算(R1, R2)print('两对关系相加后的结果为:', 符合运算结果, '\n')elif 序号 == 5:A = 输入A()[1]R = 输入R精简版()自反闭包 = 自反闭包计算(A, R)print('自反闭包为:', 自反闭包)elif 序号 == 6:A = 输入A()[0]B = 输入A()[0]R = 输入R精简版()函数 = 函数判断(A, B, R)if 函数[0]:print('\n这是函数,', end='')else:print('\n这不是函数,', end='')if 函数[1]:print('是单射,', end='')else:print('不是单射,', end='')if 函数[2]:print('是满射\n',)else:print('不是满射\n',)异常 = Truewhile 异常:程序重复 = input('请输入是否继续执行?(‘是’、‘yes’、‘1’为继续程序,‘否’、‘no’、‘0’为结束程序)')if 程序重复 == '是' or 程序重复 == 'yes' or 程序重复 == '1':异常 = Falseelif 程序重复 == '否' or 程序重复 == 'no' or 程序重复 == '0':程序重复 = False异常 = Falseelse:print('输入有误,请重新输入')

打包好的程序以及源码

链接:https://pan.baidu.com/s/1bkdGz4izcgobJXGtqgiMgQ
提取码:x79f

大学离散数学作业用代码怎么写?用Python判断离散数学的自反、对称、传递、符合、自反闭包、函数及其类型直接上代码配超详细注释以及源码下载地址 =_= python大学任务相关推荐

  1. 用Python做一个超好玩的拼图游戏,0基础也能包你学会,附送超详细注释的源码~

    导语 你所认为的python........                                                              python & bor ...

  2. python源码下载地址

    python源码下载地址 https://www.python.org/ftp/python/3.10.1/Python-3.10.1.tgz 或者指定你想下载的版本:https://www.pyth ...

  3. 产线数字化软件源码_软件生产线技术、开源软件声明、源码下载地址

    软件生产线技术.开源软件声明.源码下载地址 软件生产线指生产软件的软件,先利用建模工具软件用图解的形式给出应用系统的系统模型,之后自动生成应用系统可执行程序,自动完成建立应用系统的工作.它能有效提高应 ...

  4. Blender源码下载地址

    发现一个收录比较全的blender源码下载地址,Markup一下,转自:https://www.cnblogs.com/kekec/p/3856713.html blender源代码编译 blende ...

  5. HotSpot源码(一):Docker与虚拟机的区别,class字节码解析,linux内核源码下载地址,Yacc与Lex快速入门

    Docker是虚拟机吗? Docker是用来隔离的,使用的是隔离的namespace,使用OS提供的接口进行应用程序之间的资源隔离,不是虚拟机.再加上它自己特殊的文件系统,一层一层叠加.他只不过是一个 ...

  6. QT各版本的源码下载地址

    QT各版本的源码下载地址:http://download.qt.io/archive/qt/ 有时候需要不同的版本,这里记录一下.

  7. 各个版本spring的jar包以及源码下载地址

    各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.1.2,留存备用: http://maven.springframework.org/release/org/spring ...

  8. Google Chrome 源码下载地址 (Google Chrome Source Code Download)

    1. Google Chrome 源码 SVN 地址:http://src.chromium.org/svn.包含有 Chrome.Gears.Webkit.GCC 等源码以及编译依赖工具.Chrom ...

  9. 微信小程序UI自动化实践:python+minium+PO模式(超详细教程附源码供下载)

    文章目录 前言 一.minium介绍 二.安装环境 1. 安装minium doc 2. 安装minium 3. 启动小程序 三.准备知识 1. 启动 2. 配置 3. 命令行运行 4. 元素定位 5 ...

  10. 大量教程+工具+源码下载地址汇总

    应广大网友要求,最近小弟精心整理了一批免豆下载的C++优质资料并做了分类,包括98个学习资料.9个相关工具和21套源码.将此下载目录分享给大家,大家可以选择性下载.需要的就拿去,希望希望~ 0 l8 ...

最新文章

  1. Educational Codeforces Round 54
  2. 滴滴开源在2019:十大重点项目盘点,DoKit客户端研发助手首破1万Star
  3. 千兆以太网线和水晶头的制作方法
  4. 开发工作中平常 能用到的 Git 常用命令
  5. MongoDB基本应用操作整理
  6. ElasticSearch fuzzy模糊查询(英文检索)
  7. Scala-Unit6-final/type关键字、样例类样例对象
  8. 搜索关键字高亮显示,就比微信多个多音字搜索
  9. ArcGIS10.6使用ArcGIS Diagrammer
  10. matlab 复权数据,用Pandas计算前复权数据
  11. 军团要塞2无限子弹服务器,【图片】教大家创建tf2服务器(互联网的)小白版~【军团要塞吧】_百度贴吧...
  12. 【Maven打包报错解决方案】Using ‘UTF-8‘ encoding to copy filtered resources.
  13. 欧拉计划 P429 (数论)
  14. redis服务之主从复制、哨兵模式、群集模式
  15. can收发器 rx_Microchip工程师社区 - 两组PIC18F25K80+CAN收发器的CAN通讯 - 16位MCU及DSC - 麦田论坛...
  16. 拓展交流空间,分享开发精彩 | 开发者说·DTalk 鉴赏
  17. 【学术方法 | 文献阅读】How to Read Papers
  18. 初级中学理化生实验室建设与配备标准
  19. Secure Code Warrlor学习记录(三)
  20. linux 文件夹 775,linux - 如何为文件夹及其所有子文件夹和文件设置chmod?

热门文章

  1. 考研复试数据库原理课后习题(七)——数据库设计
  2. 计算机常用英语1000个,常用的1000个英语单词
  3. 服务注册与发现-Spring Cloud Netflix-Eureka
  4. Paypal Payments REST API支付 沙箱测试 php版本
  5. 小区人脸识别门禁系统解决方案
  6. 怎样屏蔽(去掉)csdn博客侧栏广告
  7. UVALive 3713 Astronauts(2-sat+输出任意路径)
  8. python多找表格进行数据对比
  9. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks论文翻译
  10. Spring的初体验-1