这是我们老师布置的第三份作业
本博客参考地址
https://www.runoob.com/python/att-string-split.html
https://blog.csdn.net/qq_43210174/article/details/104659334
题目一
编写函数实现输入任意两个集合及对应运算符,能够返回两个集合的计算的结果
#如集合A = {1,2,3} B = {2,3} 运算符 - 得到计算结果为A与B的差集,Result = {1}
前提的函数
map
input
Converts input(prompt) to eval(input(prompt))
这是官网上的的解释
翻译一下,就是 把input(提示)转换为 eval()型的input
eval
eval
(expression[, globals[, locals]])
后面跟一个表达式,一个全局变量,一个区域变量
官方的解释如下
The arguments(字符串) are a string and optional(可选择的) globals and locals. If provided, globals must be a dictionary. If provided, locals can be any mapping object.
The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example:
翻译一下
eval的参数是一个字符串和一个可选择的全局变量和区域变量,如果提供全局变量一定是一个字典,如果提供了区域对象一个是map类型的对象
split()
语法
str.split(str="", num=string.count(str)).
参数
-
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
-
num – 分割次数。默认为 -1, 即分隔所有
一个例子
str = "Line1-abcdef \nLine2-abc \nLine4-abcd"; print(str.split( )) # 以空格为分隔符,包含 \n print(str.split(' ', 1 )) # 以空格为分隔符,分隔成两个
结果如下
['Line1-abcdef', 'Line2-abc', 'Line4-abcd'] ['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
split()返回的对象,就默认是一个集合
所以这道题的代码如下
A=set(input("请输入一个集合:").split()) B=set(input("请输入一个集合:").split()) s=input("请输入一个运算符(-差集 +并集 &交集 ^对称集):") def set_operation(setA,setB,symbol): if symbol=='&': print("交集:", setA & setB) print("交集:", setA.intersection(setB)) #求交集的函数 elif symbol=='+': print("并集:", setA | setA) print("并集:", setA.union(setA)) #求并集的函数 elif symbol=='-': print("差集:", setA - setB) print("差集:", setA.difference(setB)) #求差集的函数 elif symbol=='^': print("对称差集:",setA ^ setB) print("对称差集:",setA.symmetric_difference(setB)) #求对称集的函数 else: print("请重新输入运算符!") set_operation(A,B,s)
题目二
#1.编写函数实现输入任意键值均为数字的字典,可以返回按字典的键值升序排列的新字典。
#如字典dict = {‘a’:1,‘b’:3,‘c’:2}
#输出为[(‘a’, 1), (‘c’, 2), (‘b’, 3)];前提知识
zip
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 ***** 号操作符,可以将元组解压为列表。
例子如下
a = [1, 2, 3] b = [4, 5, 6] c = [4, 5, 9, 7, 8] zipped = zip(a, b) # 返回一个对象 list1=list(zipped) # list() 转换为列表 list2=list(zip(a, c)) # 元素个数与最短的列表一致 print(list1) print(list2) a1, a2 = zip(*zip(a, b)) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式 list3=list(a1) list4=list(a2) print(list3) print(list4)
输出如下
[(1, 4), (2, 5), (3, 6)] [(1, 4), (2, 5), (3, 9)] [1, 2, 3] [4, 5, 6]
代码如下
import operator
A=set(input("请重输入Key:").split())
B=set(input("请重输入value:").split())
def dictionary_Order(ListA,ListB):
mydict = dict(zip(ListA,ListB)) #把他们组合成一个新的字典
print(mydict) #输出这个组合后的字典
after_ordering=sorted(mydict.items(),key=operator.itemgetter(1))
#operator.intemgetter是第一个域的
print(after_ordering)
dictionary_Order(A,B)
题目三
定义Circle(圆)类,成员包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。
class Circle:
def __init__(self,site, radius, color):
self.center = site
self.radius = radius
self.color = color
def perimeter(self):#周长
return 3.14 * 2 * self.radius
def area(self):#面积
return 3.14 * self.radius * self.radius
A=float(input("请输入半径:"))
circle = Circle((10,12),A,"绿色")
print(circle.perimeter())#周长
print(circle.area())#面积
print(circle.color)#颜色