python第8周 作业

1 完成下列函数并且计算,

a)编写一个函数 fun1(n), 返回的值为1+1/2+1/3+…1/n ,要求用分数计算,(提示使用Fraction类)
假设你学号的最后3位是p,那么令x=1000+p,求f(x)的值,它的分子和分母之和是多少?

from fractions import Fraction as Fra

def fun1(n):
    SUM=0
    for i in range(1,n+1):   
        xi=Fra(1,i)
        SUM+=xi
    return SUM

def  split(SUM):
    
    string_list=str(SUM).split("/")
    int_list=list(map(int,string_list))
    Split_SUM=sum(int_list)
    
    return Split_SUM

n=int(input("请输入学号的最后三位"))
n=n+1000
SUM=fun1(n)
Split_SUM=split(SUM)
print("结果为",Split_SUM)



b)编写一个函数 fun2(n),返回值为(1+1/2+1/3+…+1/n)^2 +(1/2+1/3+…1/n)^2 +… +(1/(n-1)+1/n)^2 + (1/n)^2假设你学号的最后2位是p,那么令x=100+p,求f(x)的值,它的分子和分母之和是多少?

from fractions import Fraction as Fra

def SUM(n):
    sumi=0
    SUM=0
    for i in range(n+100,0,-1):   #使用倒序遍历 逆向计算
        xi=Fra(1,i)           #()求和
        sumi+=xi              
        
        k=sumi**2            # 整体求和
        SUM+=k
    return SUM

def  split(SUM):
    string_list=str(SUM).split("/")        #拆分字符串
    int_list=list(map(int,string_list))    #转化为int的列表
    Split_SUM=sum(int_list)                #分子分母求和
    return Split_SUM

x=int(input("请输入学号的最后两位"))
SUM=SUM(x)
Split_SUM=split(SUM)
print("结果为",Split_SUM)

2 基于UDP的通信程序,要求实现UDP的通信, 修改该程序,向111.231.9.47:5003端口发送 你的学号.

import socket

#发送
def Send(txt):
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #申请套接字
    addr=("111.231.9.47",5003)           #发送地址(IP地址+端口号)
    s.sendto(txt.encode("UTF-8"),addr)   
                  

txt=input("请输入要发送的学号")
Send(txt)

3 文本编辑器制作

import tkinter 
import tkinter as tk
from tkinter import *
import tkinter.filedialog
import tkinter.messagebox
import tkinter.scrolledtext
import tkinter.colorchooser
import tkinter.simpledialog

#----------------------------------------一、创建窗口-------------------------------------------------
filename=""  #定义空文件名
win=tk.Tk()
win["height"]=400
win["width"]=600
#-----------------------------------------------------------------------------------------------------



#---------------------------------------二、功能定义区---------------------------------------------

#-----------------------------------------1.菜单栏 File-----------------------------------------------------------

textChanged=tk.IntVar(value=0)  #字符串计数器

#1.打开
def Open():
    global filename
    #1.获取字符,是否保存原来的文档
    if textChanged.get():
        yesno=tk.messagebox.askyesno(title="Save or not",message="Do you want to Save?")  #询问框
        
        if yesno==tkinter.YES:   
            Save()       
        filename=tkinter.filedialog.askopenfilename(title="Open file",filetypes=[("Text files","*.txt")]) #打开路径框
    
    #2.打开新的文档
    if filename:
        txtContent.delete(0.0,tk.END)  #删除原来的文本
        fp=open(filename,"rb")         #读取文本
        txtContent.insert(tkinter.INSERT,"".join(fp.read().decode('GBK'))) #解码插入到文本编辑器
        fp.close()     #关闭指针
        textChanged.set(0)  #字符串置0
 
#2.保存
def Save():
    global filename
    if not filename:
        SaveAs()
    
    elif textChanged.get():
        fp=open(filename,"w")   #创建文本
        fp.write(txtContent.get(0.0,tkinter.END))#将文本框的内容导入文件
        fp.close()   #关闭
        textChanged.set(0) #计数器置0

#3.保存到        
def SaveAs():
    global filename
    #创建对话框,默认对应的路径和文件名
    newfilename=tkinter.filedialog.asksaveasfilename(title="Save As",initialdir=r"c:\\",initialfile="new.txt")
    
    #写入文件内容
    if newfilename:
        fp=open(newfilename,"w") 
        fp.write(txtContent.get(0.0,tkinter.END))
        fp.close()
        filename=newfilename

        textChanged.set(0)

#4.关闭
def Close():
    global filename
    Save()   #保存
    txtContent.delete(0.0,tkinter.END) #区域置空
    filename=""  #文件名置空
  

    
#-------------------------------------------2.菜单栏 Edit-----------------------------------------------------------
#1.回退
def Undo():
    txtContent["undo"]=True    
    try:
        txtContent.edit_undo() 
    except Exception as e:
        pass

#2.前进
def Redo():
    txtContent["undo"]=True
    try:
        txtContent.edit_redo()
    except Exception as e:
        pass

#3.复制
def Copy():
    txtContent.clipboard_clear()  #清空缓冲区
    txtContent.clipboard_append(txtContent.selection_get())  #保存到缓冲区
    pass

#4.剪切
def Cut():
    Copy()  #复制文本
    txtContent.delete(tkinter.SEL_FIRST,tkinter.SEL_LAST)  #删除文本编译器的选中文本

#5.粘贴
def Paste():
    try:
        txtContent.insert(tkinter.SEL_FIRST,txtContent.clipboard_get()) #获取缓冲区文本
        txtContent.delete(tkinter.SEL_FIRST,tkinter.SEL_LAST)     #删除选中文本
        return 
    except Exception as e:
        pass
    
#6.查找    
def Search():
    textToSearch=tkinter.simpledialog.askstring(title="Search",prompt="What to search?")  
    start=txtContent.search(textToSearch,0.0,tkinter.END)             
    if start:   #查找到时,返回yes
        tkinter.messagebox.showinfo(title="Found",message="ok")
          

#--------------------------------------------3.菜单栏 Help-----------------------------------------------------------
#1,关于
def About():
    tkinter.messagebox.showinfo(title="About",message="Author:Dong Fuguo")  #弹出信息框
    pass




#-------------------------------------------------------------------------------------------------------------------   






#------------------------------------三、菜单栏框架----------------------------------

menu1=tk.Menu(win)

#菜单1 File
#---------------------------------------------------------------------
submenu=tk.Menu(menu1,tearoff=0)

submenu.add_command(label="Open",command=Open)   
submenu.add_separator()                             
submenu.add_command(label="Save",command=Save)  
submenu.add_separator()
submenu.add_command(label="SaveAs",command=SaveAs)
submenu.add_separator()
submenu.add_command(label="Close",command=Close)

menu1.add_cascade(label="File",menu=submenu)
#-----------------------------------------------------------------------


#菜单2  Edit
#-----------------------------------------------------------------------
submenu2=tk.Menu(menu1,tearoff=0)

submenu2.add_command(label="Undo",command=Undo)
submenu2.add_separator()
submenu2.add_command(label="Redo",command=Redo)
submenu2.add_separator()
submenu2.add_command(label="Copy",command=Copy)
submenu2.add_separator()
submenu2.add_command(label="Cut",command=Cut)
submenu2.add_separator()
submenu2.add_command(label="Paste",command=Paste)
submenu2.add_separator()
submenu2.add_command(label="Search",command=Search)

menu1.add_cascade(label="Edit",menu=submenu2)
#------------------------------------------------------------------------


#菜单3 Help
#------------------------------------------------------------------------
submenu3=tk.Menu(menu1,tearoff=0)

submenu3.add_command(label="About",command=About)

menu1.add_cascade(label="Help",menu=submenu3)
#------------------------------------------------------------------------

#----------------------------------------------------------------------------------------------------------




#------------------------------------------四、总体结构---------------------------------
#1.菜单栏
win.config(menu=menu1)

#2.滑动文本框
def keyPress(event):
    textChanged.set(1)

txtContent=tk.scrolledtext.ScrolledText(win,wrap=tk.WORD)
txtContent.pack(fill=tk.BOTH,expand=tkinter.YES)  #创建

txtContent.bind("<Key>",keyPress)#绑定按键识别器

win.mainloop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值