1、 《Python语言程序设计》平时作业 姓 名: 贺 涛 学 号: 2016120101013 1. Python语言有哪些数据类型? 数值类型(整型、浮点型、复数型)、布尔型、字符串、列表、元组、字典和集合等 2. Python语言有哪些运算符?请列表说明它们各自的运算优先级。 算术运算符、位运算符、关系运算符、逻辑运算符、赋值运算符、成员运算符、身份运算符等 3. Python语言有哪些语句? if语句、while语句、for语句 4. 简述元组与列表的异同。并简述它们各自的用途。 Python元组和列表一样,都是有序序列,在很多情况下可以相互替换,很多操
2、作也类似,但它们也有区别: l 元组是不可变的序列类型,元组能对不需要改变的数据进行写保护,使数据更安全。列表是可变的序列类型,可以添加、删除或搜索列表中的元素。 l 元组使用小括号定义用逗号分隔的元素,而列表中的元素应该包括在中括号中。虽然元组使用小括号,但访问元组元素时,要使用中括号按索引或分片来获得对应元素的值。 l 元组可以在字典中作为关键字使用,而列表不能作为字典关键字使用,因为列表不是不可改变的。 l 只要不尝试修改元组,那么大多数情况下把它们作为列表来进行操作 用途: l 列表可被用于保存多个互相独立对象的数据集合 l 元组用于描述一个不会改变的事务的多个属性 5
3、 简述字典和集合的异同。并简述它们各自的用途。 字典和集合的数据元素之间没有任何确定的顺序关系,属于无序的数据集合体,因此不能像序列那样通过位置索引来访问数据元素。 作为一种复合数据类型,字典和集合之间的主要区别在于它们的操作,字典主要关心其元素的检索、插入和删除,集合主要考虑集合之间的并、交和差操作。 6. 请分别举例说明遍历列表、元组、字典和集合中各元素的方法。 l 列表:列表与for循环语句配合使用,可实现对列表各个元素的遍历。 for i in list: print ("序号:%s 值:%s" % (list.index(i) + 1, i)) l 元组:元组与f
4、or循环语句配合使用,可实现对元组各个元素的遍历。示例同列表。 l 字典: n 遍历字典的关键字:d.keys():返回一个包含字典所有关键字的列表,所以对字典关键字的遍历转换为对列表的遍历。 n 遍历字典的值:d.values():返回一个包含字典所有值的列表,所以对字典值的遍历转换为对列表的遍历。 n 遍历字典的元素:d.items():返回一个包含所有(关键字,值)元组的列表,所以对字典元素的遍历转换为对列表的遍历。 l 集合:集合与for循环语句配合使用,可实现对集合各个元素的遍历。 7. 在Python中如何实现二维数组、结构体、结构体数组(二维表)、链表?请举例说明。
5、 二维数组:列表中嵌套列表 matrix=[[0,0,0],[0,0,0],[0,0,0],[0,0,0]] 结构体:使用字典数据类型实现结构体 当列表的元素也是一个列表时,列表就表示二维矩阵或锯齿阵。 8. 在Python中如何实现栈和队列?请举例说明。 class Stack(object): def __init__(self): self.stack=[] def isEmpty(self): return self.stack==[] def push(self,item): self.stack.append(item) def pop(self): if
6、 self.isEmpty(): raise IndexError,'pop from empty stack' return self.stack.pop() def peek(self): return self.stack[-1] def size(self): return len(self.stack) class Queue: def __init__(self, head=None): self.storage = [head] def enqueue(self, new_element): self.storage.append(new_element
7、) def peek(self): return self.storage[0] def dequeue(self): return self.storage.pop(0) 9. 请分别说明Python中正则表达式、lambda函数、装饰器、异常处理、断言处理各自的用途。 正则表达式: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 lambda函数:是指没有函数名的简单函数,只可以包含一个表达式,不允许包含其他复杂的语句,表达式的结果是函数的返回值。
8、用匿名函数有个好处,因为函数没有名字,所以不必担心函数名冲突。 装饰器:可简单地理解为一个函数,这是一个用来包装函数的函数,经常用于为已经存在的函数添加额外的功能。当多个函数有重复代码时,可以将此部分代码单独拿出来整理成一个装饰器,然后对每个函数调用该装饰器,这样可以实现代码的复用,而且可以让原来的函数更轻便。当需要为多个己经写好的函数添加一个共同功能,例如检查参数的合法性时,就可以单独写一个检查合法性的装饰器,然后在每个需要检查参数合法性的函数处调用即可,而不用去每个函数内部修改。 断言处理: 10. 请分别举例说明,在Python中函数的实在参数与形式参数间单向和双向传递数据是如何实
9、现的。函数的位置参数与关键字参数有何区别? 在Python中,实参向形参传送数据的方式是“值传递”,即“拷贝”或“复制”。实参的值传给形参,是对象间整体赋值,是一种单向传递方式,不能由形参传回给实参。 函数体传入的参数,为函数体外变量引用的副本。在函数体中改变变量指向的堆中的值,对函数外变量有效。在函数体中改变变量的引用,对函数外变量无效。 关键字参数和位置参数的区别: 函数调用时的参数通常采用按位置匹配的方式,即实参按顺序传递给相应位置的形参。实参的个数应与形参个数必须完全相等。 在函数调用中使用关键字参数,是指通过形式参数的名称来指示为哪个形参传递什么值,这可以跳过某些参数或脱离
10、参数的顺序。 11. 请简述Python中类对象与实例对象、类属性与实例属性各自的区别?并简述它们各自的用途。 类对象与实例对象的区别:在一个类中,类对象只有一个,但实例对象可以有多个。类对象在定义类后便自然存在,而实例对象需要人为创建。 类属性与实例属性的区别:实例属性是实例对象所特有的。类对象并不拥有实例属性,所以不能通过类对象来访问实例属性。实例属性也只能用实例对象来访问,不能用类对象来访问实例属性。类属性即可用类对象访问,也可用实例对象访问。 用途: 12. 请简述Python中类方法、实例方法、静态方法各自的区别?并简述它们各自的用途。 实例方法只能用实例对象来调用,不能
11、用类对象来调用实例方法。 类方法:类方法是类对象所拥有的方法,类方法的第一个参数必须是类对象,可以通过实例对象和类对象去访问类方法,类方法可以对类属性进行修改。 实例方法:实例方法是类中最常定义的成员方法,它至少有一个参数并且必须以实例对象作为其第一个参数,在类外实例方法只能通过实例对象去调用,不能通过其他方式去调用。 静态方法:静态方法需要通过修饰器“@staticmethod”来进行修饰,静态方法不需要多定义参数。静态方法中不需要额外定义参数,因此如果在静态方法中引用类属性,则必须通过类对象来引用。 13. 请举例说明Python面向对象的多态性(例如函数重载、运算符重载)是如何实
12、现的? 父类和多个子类中都有同名的方法,虽然方法同名,但该方法在不同类中的行为是不同的。当向一个对象发送消息(即调用该方法)时,所得结果取决于是哪一个对象接收。多个不同的对象都支持相同的消息,但各对象响应消息的行为不同,这种能力就是多态性的体现,即同一操作在不同的上下文环境中具有不同形态的意思。 14. 请分别简述利用thinter模块、turtle模块和graphics模块绘图时各自的绘图步骤。 thinter模块:· 1. 导入 Tkinter 模块 2. 创建控件 3. 指定这个控件的 master, 即这个控件属于哪一个 4. 告诉 GM(geometry manager
13、) 有一个控件产生了。 turtle模块: 1. 引入turtle模块 2. 创建画布。调用turtle中的Pen函数。 3. 移动海龟。 4. 提起画笔 graphics模块: 1. 导入graphics模块包 2. 使用GraphWin 3. 调用Point()类,设置X坐标和Y坐标 4. 调用draw()方法,绘制 15. 简述使用tkinter模块创建一个图形用户界面应用程序的主要步骤。 1. 导入Tkinter模块 2. 创建一个顶层窗口对象,来容纳你的整个GUI程序 3. 在你的顶层窗口对象上(或者其中)创建所有的GUI模块(以及功能) 4. 把这些G
14、UI模块与底层代码相连接 5. 进入主事件循环 16. 在tkinter模块中事件绑定方式有哪几种?并简述它们各自的用途。 widget.bind(event,handler) 使用frame的bind方法将一个callback方法绑定到一个事件 绑定到widget instance 使用bind方法 绑定到widget的toplevel windows,顶层窗口,也是用bind 绑定到widget class,使用bind_class 17. 请用Python语言编写一个简易的系统登录程序。 import tkinter.messagebox import tkinte
15、r my_window = tkinter.Tk() # 生成my_window主窗口 my_window.title('welcome my_window') # 设置窗口标题 cv = tkinter.Canvas(my_window,bg='lightcyan') # 用画布设置窗口的颜色 cv.pack() my_window.geometry('200x150') # 设置窗口大小 # label 标签(用户名和密码的变量) varName = tkinter.StringVar() # 文字变量储存器器 varName.set('admin') v
16、arPwd = tkinter.StringVar() varPwd.set('123456') # 创建账户的标签 labname = tkinter.Label(my_window,text='用户名',justify=tkinter.RIGHT,bg='pink',width=80) labname.place(x=10,y=5,width=80,height=20) # 创建文本框,同事设置关联变量 enterName = tkinter.Entry(my_window,width=80,textvariable=varName) enterName.pla
17、ce(x=100,y=5,width=80,height=20) # 创建密码的标签 和文本框 labPwd = tkinter.Label(my_window,text='密码',justify=tkinter.RIGHT,bg='pink',width=80) labPwd.place(x=10,y=30,width=80,height=20) enterPwd = tkinter.Entry(my_window,show='*',width=80,textvariable=varPwd) enterPwd.place(x=100,y=30,width=80,height
18、20) # 登录按钮事件处理函数 def login(): Name = enterName.get() Pwd = enterPwd.get() if Name =='admin' and Pwd == '123456': tkinter.messagebox.showinfo(title='Python tkinter',message='登录成功!!') else: tkinter.messagebox.showerror(title='python tkinter',message='登录
19、失败') # 创建按钮组件,并且设置按钮事件的处理函数 buttonOK = tkinter.Button(my_window,text = 'login',background='lightskyblue',command = login()) buttonOK.place(x=30 , y=70 , width=50,height=20) # 取消按钮的时间处理函数 def cancel(): # 清空用户输入的用户名和密码 varName.set('') varPwd.set('') buttonCan
20、cel = tkinter.Button(my_window,text='Cancel',background='lightgray',command=cancel()) buttonCancel.place(x=100,y=70,width=50,height=20) # 启动消息循环 my_window.mainloop() 18. 请用Python语言编写一个简易的计算器程序。 from tkinter import * reset=True def buttonCallBack(event): global label global r
21、eset num=event.widget['text'] if num=='C': label['text']="0" return if num in "=": label['text']=str(eval(label['text'])) reset=True return s=label['text'] if s=='0' or reset==True: s="" reset=False label['text']=s+num #主窗口 root=Tk() root.wm_ti
22、tle("计算器") #显示栏1 label=Label(root,text="0",background="white",anchor="e") label['width']=35 label['height']=2 label.grid(row=1,columnspan=4,sticky=W) #按钮 showText="789/456*123-0.C+" for i in range(4): for j in range(4): b=Button(root,text=showText[i*4+j],width=7) b.grid(row=i+2,
23、column=j)
b.bind("
24、oot.mainloop() 19. 请用Python语言编写一个简易的猜数字游戏程序。 import random answer = random.randint(1,10) print('猜数游戏') num=input('请输入你猜测的数字\n') guess=int(num) n=0 while n<2: if guess == answer and n==0: print('么么哒。对啦') print('厉害了一
25、次就对了') break if guess < answer: print('不对哦,太小了') elif guess > answer : print('不对哦,太大了') elif guess==answer : print('么么哒。对啦') num=input('请你重新输入\n') guess=int(num) n=n+1 if n==1 and guess==answer: print('可以哦,第
26、二次就对了') break elif n==2 and guess ==answer: print('还行,终于猜出来了') break elif n==2 and guess !=answer : print('不行哦,三次都不对') break print('游戏结束') 20. 请用Python语言编写一个简易的通讯录管理程序。 mydic={} while True: print("="*7,"通讯录管理系统","="*7) pri
27、nt("1.增加姓名和手机") print("2.删除姓名") print("3.修改手机号") print("4.查询所有用户") print("5.根据姓名查找手机号") print("6.退出") print("="*29) a=input("请选择要执行的项目:") if a=="1": name=input("请输入联系人姓名:") tel=input("请输入手机号:") if tel.isdigit() and len(tel)==11:
28、 mydic[name]=tel print("当前手机内联系人:",mydic) else: print("输入有误") elif a=="2": name=input("请输入要删除的姓名:") tel=mydic.pop(name) print("已删除:"+name+tel) print("当前手机联系人:",mydic) elif a=="3": name=input("请输入要修改的手机号
29、姓名:") tel=input("请输入新的手机号:") mydic[name]=tel print("修改成功!") print("当前手机内联系人:",mydic) elif a=="4": print("当前手机内联系人:",mydic) elif a=="5": name=input("请输入要查询的联系人姓名:") print(name,mydic[name]) print("") elif a=="6": print("感谢使用通讯录系统") break else: print("输入有误") 精选范本






