鱼C论坛

 找回密码
 立即注册
查看: 1658|回复: 0

[作品展示] 给同学做的阶段考核(自我出题)程序案例

[复制链接]
发表于 2020-12-30 21:39:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Minecraft程序猿 于 2020-12-31 21:17 编辑
最近教同学Python,前几天给他做了一套阶段考核(p.s.只有一道综合题,命令行界面的(但有tkinter文件对话框)),今天自己做了一下,PyInstaller打包有9.3M,传不上来,源代码贴在下面,只有只读,只写,颜色切换,退出4个选项,有图标拖动阅读功能
代码量206行(包含注释和空行)
开发周期2小时
欢迎改进和提出建议
from os import system
from os import _exit as exitx
from time import sleep
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfilename
from tkinter import Tk
from sys import argv
import datetime

root = Tk()
root.withdraw() #GUI窗口隐藏

#初始化环境
system("title 记事本案例")
system("color a")

#预打开文件(图标拖动)
def preopen(name):
    system("cls")
    print("当前文件:"+name+"\t打开模式  MODE:0\n")
    curr_time = datetime.datetime.now()
    time_str = datetime.datetime.strftime(curr_time,'%Y年%m月%d日 %H:%M:%S')
    print(time_str,"\t[只读]")
    print('----------------------------------------\n')
    try:
        with open(name,'r') as f:
            i = 1
            for each_line in f:
                if i < 10:
                    print('0'+str(i)+'| ',end='')
                else:
                    print(str(i)+'| ',end='')
                print(each_line,end='')
                i += 1
    except:
        print("\n  出现错误,请检查该文件编码格式和程序运行权限然后重试\n")
    print("\n----------------------------------------\n")
    key = input("程序重获焦点后\n输入任意字符以返回> ")
    system("cls")

#主函数(配合循环错误处理)
def main():

    #嵌套"打开","写入","颜色修改"等功能函数
    def opens():
        system("cls")
        name = askopenfilename()
        print("当前文件:"+name+"\t打开模式  MODE:0\n")
        curr_time = datetime.datetime.now()
        time_str = datetime.datetime.strftime(curr_time,'%Y年%m月%d日 %H:%M:%S')
        print(time_str,"\t[只读]")
        print('----------------------------------------\n')
        try:
            with open(name,'r') as f:
                i = 1
                for each_line in f:
                    if i < 10:
                        print('0'+str(i)+'| ',end='')
                    else:
                        print(str(i)+'| ',end='')
                    print(each_line,end='')
                    i += 1
        except:
            print("\n  出现错误,请检查该文件编码格式和程序运行权限然后重试\n")
        print("\n----------------------------------------\n")
        key = input("程序重获焦点后\n输入任意字符以返回> ")
        system("cls")

    def writes():
        system("cls")
        print("写入模式  MODE:1\n\n输入":q! "\t退出\n输入":wq!"\t保存并退出\n")
        curr_time = datetime.datetime.now()
        time_str = datetime.datetime.strftime(curr_time,'%Y年%m月%d日 %H:%M:%S')
        print(time_str,'\t[只写]')
        print('----------------------------------------\n')
        listx = []
        i = 1
        while True:
            if i < 10:
                print('0'+str(i)+'| ',end='')
            else:
                print(str(i)+'| ',end='')
            lines = input('')
            if lines == ":q!":
                break
            elif lines == ":wq!":
                allx = ""
                for each in listx:
                    allx += (each+'\n')
                while True:
                    name = asksaveasfilename(initialfile= '新建文本文档', \
                                            defaultextension = '.txt',\
                                            filetypes = [(r'文本文档(*.txt)','.txt'),(r'Microsoft Word文档(*.doc)','.doc'), (r'所有文件(*.*)', '.*')])
                    if name == '':
                        continue
                    else:
                        with open(name,'w') as f:
                            try:
                                f.write(allx)
                            except PermissionError:
                                print("\n\n当前无法保存文件到该位置,请重新选择位置或以管理员身份运行此程序!")
                                sleep(2)
                                continue
                        break
                curr_time = datetime.datetime.now()
                time_str = datetime.datetime.strftime(curr_time,'%Y年%m月%d日 %H:%M:%S')
                print("已写入到"+name+'\n')
                print(time_str)
                sleep(2)
                system("cls")
                break
            else:
                listx.append(lines)
                i += 1

    def colors():
        system("cls")
        print("""颜色属性由两个十六进制数字指定 -- 第一个
对应于背景,第二个对应于前景。每个数字
可以为以下任何值:

    0 = 黑色       8 = 灰色
    1 = 蓝色       9 = 淡蓝色
    2 = 绿色       A = 淡绿色
    3 = 浅绿色     B = 淡浅绿色
    4 = 红色       C = 淡红色
    5 = 紫色       D = 淡紫色
    6 = 黄色       E = 淡黄色
    7 = 白色       F = 亮白色

如果尝试使用相同的
前景和背景颜色来执行
程序会将 ERRORLEVEL 设置为 1

示例: "fc" 在亮白色上产生淡红色
""")
        while True:
            c = input(r"输入对应颜色代码(不区分大小写)> ")
            if (c == '') or (c == ' ') or (c == '\t'):
                print("输入有误,不得使用空字符,请重新输入")
            else:
                system("color " + c)
                print("\n设置成功!")
                break
        key = input("输入任意字符以返回> ")
        system("cls")

    system("cls")
    print("""


           ##############################
           #                            #
           #    记事本--阶段考核案例    #
           #                            #
           # -------------------------- #
           #       [0] 打开模式         #
           #       [1] 写入模式         #
           # -------------------------- #
           #       [3] 退出程序         #
           ##############################

在初运行程序和关闭选择文件窗口后且程序运行窗口失去焦点时请使程序重新获得焦点(鼠标选择或键盘切换)

""")
    #循环模式接收判断
    while True:
        mode = input("请选择模式(0~3)> ")
        if mode == '0':
            opens()
            break
        elif mode == '1':
            writes()
            break
        elif mode == '2':
            colors()
            break
        elif mode == '3':
            exitx(0)
        else:
            continue

#预打开文件参数判断
try:
    if argv[1] == '':
        pass
    else:
        preopen(argv[1])
except:
    pass

#循环报错处理
while True:
    try:
        main()
    except:
        system("cls")
        print("\n\n\n         程序出错了哦\n         即将重启程序! 5",end='')
        times = 4
        while times != -1:
            sleep(1)
            print('\r         即将重启程序! '+str(times),end='')
            times -= 1
        main()

root.mainloop()

#2020.12.30 (Wed) 21:15
#Logic
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 19:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表