中国大学MOOCPython语言程序设计基础学习笔记和课后练习第8周(南京邮电大学)
- 前情提要
- 1.[中国大学MOOCPython语言程序设计基础学习笔记和课后练习1-4周(南京邮电大学)](https://blog.csdn.net/weixin_45718919/article/details/115439347)
- 2.[中国大学MOOCPython语言程序设计基础学习笔记和课后练习5-6周(南京邮电大学)](https://blog.csdn.net/weixin_45718919/article/details/115567303)
- 3.[中国大学MOOCPython语言程序设计基础学习笔记和课后练习第7周(南京邮电大学)](https://blog.csdn.net/weixin_45718919/article/details/116768036)
- 第8周 面向对象程序设计
- 实验周 图形用户界面
前情提要
1.中国大学MOOCPython语言程序设计基础学习笔记和课后练习1-4周(南京邮电大学)
2.中国大学MOOCPython语言程序设计基础学习笔记和课后练习5-6周(南京邮电大学)
3.中国大学MOOCPython语言程序设计基础学习笔记和课后练习第7周(南京邮电大学)
第8周 面向对象程序设计
举例:
class Student:
def __init__(self, name, num, sex):
self.__name=name
self.num=num
self.sex=sex
def introduce(self):
print("姓名:", self.name, "学号:", self.num, "性别:", self.sex)
def get_name(self):
return self.__name
def set_name(self, name):
self.__name=name
stu1=Student("小张","A01","男生")
stu2=Student("小王","A02","女生")
print(stu1.get_name())
print(stu1.num)
举例,turtle类,类的继承
# -*- coding: gbk *-
import turtle as t
class Star:
def __init__(self):
self.size=200
def draw(self):
for i in range(5):
t.forward(self.size)
t.left(144)
class Big_Star(Star):
def __init__(self):
self.size=500
s=Star()
b=Big_Star()
s.draw()
b.draw()
GUI结合面向对象 使用tkinter库 编写整数计算器
# -*- coding: gbk *-
import tkinter as tk
win=tk.Tk()
win.title('整数计算机')
win.geometry('125x150')
win.resizable(False,False)
#默认保存文本框的内容于result变量中
result=tk.StringVar()
#创建文本框
ent=tk.Entry(win,textvariable=result)
ent.place(x=0,y=0,width=120,height=24)
#设置初值
result.set('0')
#设置16个按钮,文字放入列表中
txts=['1','2','3','+',
'4','5','6','-',
'7','8','9',"*",
'C','0','=','/']
for i in range(16):
strBtn=tk.StringVar()
strBtn.set(txts[i])
btn=tk.Button(win,textvariable=strBtn)
btn.place(x=i%4*30,y=i//4*30+24,width=30)
tk.mainloop()
GUI结合面向对象 使用tkinter库 事件处理机制
代码
# -*- coding: gbk *-
import tkinter as tk
win=tk.Tk()
win.title('整数计算机')
win.geometry('125x150')
win.resizable(False,False)
#默认保存文本框的内容于result变量中
result=tk.StringVar()
#创建文本框
ent=tk.Entry(win,textvariable=result)
ent.place(x=0,y=0,width=120,height=24)
#设置初值
result.set('0')
#保存数字和功能,设初值
opt=0
ope=''
save=0
#事件处理机制函数,绑定变量
def calc(event):
global opt
global ope
global save
if event.widget['text'] in ["0","1","2","3","4","5","6","7","8","9"]:
opt=opt*10+int(event.widget['text'])
result.set(str(opt))
elif event.widget['text'] in ["+","-","*","/"]:
save=opt
ope=event.widget['text']
opt=0
result.set('0')
elif event.widget['text'] =='C':
opt=0
result.set('0')
elif event.widget['text'] =='=':
if ope=='+':
result.set(str(opt+save))
elif ope=='-':
result.set(str(save-opt))
elif ope=='*':
result.set(str(save*opt))
elif ope=='/':
result.set(str(save//opt))
#设置16个按钮,文字放入列表中
txts=['1','2','3','+',
'4','5','6','-',
'7','8','9',"*",
'C','0','=','/']
for i in range(16):
strBtn=tk.StringVar()
strBtn.set(txts[i])
btn=tk.Button(win,textvariable=strBtn)
btn.place(x=i%4*30,y=i//4*30+24,width=30)
btn.bind('<Button-1>',calc)
tk.mainloop()
单元测试
单元作业
1.请同学们为本周视频中的范例——简单整数计算器添加连续计算的功能。比如计算1+2+3的结果,或者10+23的结果,为了降低难度,其中不需要同学们考虑运算符的优先级,即算式10+23的结果显示为36而非16。
# -*- coding: gbk *-
#修改程序,使计算器具备连加功能
import tkinter as tk
win=tk.Tk()
win.title('整数计算器')
win.geometry('125x150')
win.resizable(False,False)
#默认保存文本框的内容于result变量中
result=tk.StringVar()
#创建文本框
ent=tk.Entry(win,textvariable=result)
ent.place(x=0,y=0,width=120,height=24)
#设置初值
result.set('0')
#保存数字和功能,设初值
opt=0
ope=''
save=0
#事件处理机制函数,绑定变量
def calc(event):
global opt
global ope
global save
if event.widget['text'] in ["0","1","2","3","4","5","6","7","8","9"]:
#opt变量中存放的是在文本框中显示的操作数
opt=opt*10+int(event.widget['text'])
result.set(str(opt))
elif event.widget['text'] in ["+","-","*","/"]:
#实现连续运算功能
#如果ope里有内容,不为空字符串时候,用户不是第一次按按钮
if ope!='':
#根据保存在ope中的运算类型,对save和opt进行相应的运算
if ope == '+':
save=opt + save
elif ope == '-':
save=save - opt
elif ope == '*':
save=save * opt
elif ope == '/':
save=save // opt
#否则为用户第一次按运算按钮的情形
else:
save=opt
ope=event.widget['text']
opt=0
result.set('0')
elif event.widget['text'] =='C':
#增加连续运算功能后,必须清除上一层运算的ope变量
ope=''
opt=0
result.set('0')
elif event.widget['text'] =='=':
if ope=='+':
result.set(str(opt+save))
elif ope=='-':
result.set(str(save-opt))
elif ope=='*':
result.set(str(save*opt))
elif ope=='/':
result.set(str(save//opt))
#设置16个按钮,文字放入列表中
txts=['1','2','3','+',
'4','5','6','-',
'7','8','9',"*",
'C','0','=','/']
for i in range(16):
strBtn=tk.StringVar()
strBtn.set(txts[i])
btn=tk.Button(win,textvariable=strBtn)
btn.place(x=i%4*30,y=i//4*30+24,width=30)
btn.bind('<Button-1>',calc)
tk.mainloop()
实验周 图形用户界面
请编写Python程序完成以下要求:结合上周的范例程序——简单整数计算器,制作一个能够处理实数运算的计算器。
如果能力允许,同学们也可以模仿Windows计算器的功能,为自己设计开发的计算器加上一些实现数学函数的功能。