博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python基础,day2
阅读量:6687 次
发布时间:2019-06-25

本文共 7447 字,大约阅读时间需要 24 分钟。

程序练习

程序:购物车程序

需求:

  1. 启动程序后,让用户输入工资,然后打印商品列表
  2. 允许用户根据商品编号购买商品
  3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 
  4. 可随时退出,退出时,打印已购买商品和余额
menu = [['Iphone',4288],['Mac pro',1200],['Book',80]]buy_menu = []salay = input("Pls input your salay:")if salay.isdigit():    salay = int(salay)    while True:        for index,item in enumerate(menu):            #print(menu.index(item),item)            print(index,item)        user_choice = input("Pls input your choose:")        if user_choice.isdigit():            user_choice = int(user_choice)            if user_choice < len(menu) and user_choice >= 0:                p_list = menu[user_choice]                if p_list[1] <= salay:                    buy_menu.append(p_list)                    print("Added %s to the shopping list" % (p_list))                    salay -= p_list[1]                    print("The balance is %s" % (salay))                else:                    print("Your money is no enough,the balance is %s" % (salay))                    print("Your shopping list is",buy_menu)                    exit()            else:                print("Sorry,the number of %s is not in the meun list." % (user_choice))        else:            print("Pls input the correct number:")        status = input("Do you want choose another[c/q]:")        if status == "q":            print("Your list of buy is", buy_menu)            print("Your balance is", salay)            exit(0)else:   print("Pls input the number of your salay.")
View Code

 

程序: 三级菜单

要求: 

  1. 打印省、市、县三级菜单
  2. 可返回上一级
  3. 可随时退出程序
menu = {    "jiangxi": {        "nanchang": {            "xinjianxian": ["ncu", "bank"],            "nanchangxian": ["caijingdaxue", "jishuxueyuan"]        },        "jiujiang": {            "xiushuixian": "修水县地图",            "jiujiangxian": "九江县地图"        }    },    "guangdong": {        "shenzhen": {            "longhuaqu": "龙华区地图",            "luohuqu": "罗湖区地图"        }    }}menu["jiangxi"]["nanchang"]["xinjianxian"][0] += " univercity"exit_flag = Falsewhile not exit_flag:    for i in menu:        print(i)    choice = input("1>>:")    if choice in menu:        while not exit_flag:            for i2 in menu[choice]:                print("\t", i2)            choice2 = input("2>>:")            if choice2 in menu[choice]:                while not exit_flag:                    for i3 in menu[choice][choice2]:                        print("\t\t", i3)                    choice3 = input("3>>:")                    if choice3 in menu[choice][choice2]:                        for i4 in menu[choice][choice2][choice3]:                            print("\t\t\t",i4)                        choice4 = input("4按b返回上层>>:")                        if choice4 == "b":                            pass                        elif choice4 == "q":                            exit_flag = True                    if choice3 == "b":                        break                    elif choice3 == "q":                        exit_flag = True            if choice2 == "b":                break            elif choice2 == "q":                exit_flag = True
多级菜单

 

5. 文件操作

对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件
风吹雨成花时间追不上白马你年少掌心的梦话依然紧握着吗云翻涌成夏眼泪被岁月蒸发这条路上的你我她有谁迷路了吗我们说好不分离要一直一直在一起就算与时间为敌就算与全世界背离风吹亮雪花吹白我们的头发当初说一起闯天下你们还记得吗那一年盛夏心愿许的无限大我们手拉手也成舟划过悲伤河流你曾说过不分离要一直一直在一起现在我想问问你是否只是童言无忌天真岁月不忍欺青春荒唐我不负你大雪求你别抹去我们在一起的痕迹大雪也无法抹去我们给彼此的印记今夕何夕青草离离明月夜送君千里等来年 秋风起
打开的music.py文件内容
#文件句柄f = open("music.py","r",encoding="utf-8")    #读取文件内容,不可写print(f.read())    #读取所有print(f.readlines())                         #读取所有行,输出成列表print(f.readline())                          #读取一行#low methon'''for index,line in enumerate(f.readlines()):    if index == 4:        print("line pass".center(50,"-"))        continue    print(line.strip())                     #strip()取消空格和\n换行'''#higher methon'''count = 0for line in f:          #一行一行读取,内存内只保留一行,迭代器    if count == 4:        print("line pass".center(50, "-"))        count += 1        continue    print(line.strip())    count += 1'''#f = open("music.py","w",encoding="utf-8")    #文件存在会覆盖写入,不存在会新建写入,不可读#f.write("test write")#f = open("music.py","a",encoding="utf-8")  #追加不会覆盖原有,但不可读#f.write("\ntest append\n")#print(f.read(5))  #读取几个字#print(f.tell())    #把文件句柄所在的指针指向的位置打印出来,按字符计数#f.seek(0)    #移动光标,回到某个位置##print(f.seekable())  #是否可以光标移动#print(f.read(5))#print(f.encoding)    #打印文件编码#print(f.name)    #打印文件名#print(f.isatty())  #是否是终端设备,例如:打印机#f.flush()    #把文件从内存刷新到磁盘中#f.close()    #关闭文件#print(f.closed)    #判断文件是否关闭#f.truncate(10)    #截断,从头开始截取#f = open("music.py","r+",encoding="utf-8")  #文件句柄,读写,当指针指向为0的时候,替换写在最前面,当指针指向非零的时候,以追加的模式最加到最后#f = open("music.py","w+",encoding="utf-8")  #文件句柄,写读,很少用#f = open("music.py","a+",encoding="utf-8")  #文件句柄,追加读写,文件打开指针就跳到结尾,读需要把指针移动到前面位置#f = open("music.py","rb")  #文件句柄,二进制文件#f = open("music.py","wb")f = open("music.py","ab")f.write("hello world\n".encode())

文件修改

f = open("music.py","r",encoding="utf-8")f_new = open("music_new.py","w",encoding="utf-8")for line in f:    if "我们说好" in line:        line = line.replace("我们说好","我们一起说好")    f_new.write(line)f.close()f_new.close()

 

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,同a

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理。

import sysfind_str = sys.argv[1]replace_str = sys.argv[2]#with 语句with open("music.py","r",encoding="utf-8") as f, \        open("music_new.py", "w", encoding="utf-8") as f_new:    for line in f:        if find_str in line:            line = line.replace(find_str, replace_str)        f_new.write(line)

 

6. 字符编码与转码

说明:

1.在python2默认编码是ASCII, python3里默认是unicode

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

#-*- coding:utf-8 -*-    #声明文件编码格式import sysprint(sys.getdefaultencoding())    #python3 默认编码格式是utf-8s = "你好"    #unicode格式,Python3里所有的数据类型都是unicodes_to_gbk = s.encode("gbk")print(s_to_gbk)s_to_utf8 = s.encode()print(s_to_utf8)gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")print(gbk_to_utf8)print("分割线".center(50,"-"))print(s.encode("utf-8"))print(s.encode("gbk"))print(s.encode("gb2312"))print(s.encode("gb2312").decode("gb2312").encode("utf-8").decode("utf-8").encode("gbk"))

 

 

程序练习  

程序1: 实现简单的shell sed替换功能

sed_before = input("Pls input the old word that you want sed:")sed_after = input("Pls input the  new word that you want sed:")count = 0f = open("music.py","r",encoding="utf -8")f_sed = open("music_sed.py","w",encoding="utf-8")for line in f:    if sed_before in line:        line = line.replace(sed_before,sed_after)        count += 1    f_sed.write(line)if count == 0:    print("The old word is not in the file,pls config")f.close()f_sed.close()
方法一
sed_before = input("Pls input the old word that you want sed:")sed_after = input("Pls input the  new word that you want sed:")count = 0with open("music.py","r",encoding="utf -8") as f,\        open("music_sed.py","w",encoding="utf-8") as f_sed:    for line in f:        if sed_before in line:            line = line.replace(sed_before, sed_after)            count += 1        f_sed.write(line)    if count == 0:        print("The old word is not in the file,pls config")
方法二:with语句优化版

程序2:修改haproxy配置文件

转载于:https://www.cnblogs.com/jmaly/p/6752165.html

你可能感兴趣的文章
基于Android ActionBar的SearchView实时搜索结果
查看>>
“2016中国大数据产业生态大会”将于7月精彩呈现
查看>>
Node.js 9 新特性整理
查看>>
spring boot +RabbitMQ +InfluxDB+Grafara监控实践
查看>>
VR和云服务,使出洪荒之力也难擦出火花
查看>>
向div添加圆角边框
查看>>
马斯克的另一番“威胁论”:人类将成为人工智能的“宠物”
查看>>
逸鹏说道:漫漫人生路
查看>>
Python 正则表达式(字符)详解
查看>>
微信小程序开发工具使用简介
查看>>
基于云计算的软件是否适合企业不同需求?
查看>>
大数据可能“说谎”,非结构化数据将呈现更丰富的世界
查看>>
10幅图解释机器学习中的基本概念
查看>>
上传图片到图片服务器上
查看>>
Linux 系统监控常用命令
查看>>
Slab,小对象也能搞出大事情
查看>>
VMWare14 安装Mac OS系统(图解)
查看>>
VR影视“万事俱备只欠东风”,它会成为下一个内容发展的风口吗?
查看>>
Kali Linux 网络扫描秘籍 第三章 端口扫描(一)
查看>>
6大历史遗留问题,将被区块链技术解决
查看>>