程序练习

程序:购物车程序

需求:

  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 = False
while 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":passelif choice4 == "q":exit_flag = Trueif choice3 == "b":breakelif choice3 == "q":exit_flag = Trueif choice2 == "b":breakelif 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,"-"))continueprint(line.strip())                     #strip()取消空格和\n换行
'''
#higher methon
'''
count = 0
for line in f:          #一行一行读取,内存内只保留一行,迭代器if count == 4:print("line pass".center(50, "-"))count += 1continueprint(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 sys
find_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 sys
print(sys.getdefaultencoding())    #python3 默认编码格式是utf-8
s = "你好"    #unicode格式,Python3里所有的数据类型都是unicode
s_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 = 0
f = 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 += 1f_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 = 0
with 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 += 1f_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

Python基础,day2相关推荐

  1. python基础day2作业:购物车

    #功能: 1.可注册账号 2.登录买家账号 3.可查询编辑购物车里商品 4.可以余额充值 5.可提示余额不足 6.购物车结算 #使用: 1.第一次使用先注册账号填写账号金额 2.账号金额信息保存在bu ...

  2. Python基础—Day2

    """字符串的魔法""" # 用制表符和换行符制作表格,上下对齐 info = "username\temail\tpasswor ...

  3. Day2 - Python基础2 列表、字典、集合

    Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过 ...

  4. Day2 - Python基础2 列表、字典、集合 --转自金角大王

    Day2 - Python基础2 列表.字典.集合 --转自金角大王 Posted on 2018-01-24 13:23 Byd_lei 阅读(41) 评论(0)  编辑 收藏 本节内容 列表.元组 ...

  5. python怎么计算总值_python小白系列Day2—python基础以及pandas基础

    最近恰逢过年期间,聚会太多,还有论文以及笔者年后的实习培训,时隔几天,笔者终于在第一天更文之后,继续写第二篇了. 打算写这个,主要是想记录自己从0到1的过程,欢迎拍砖. part one 思考部分 笔 ...

  6. 【零基础学Python】Day2 Python基本语法

    昨天大家都已经装好了Python环境,没装的兄弟姐妹们看这里[零基础学Python]Day1 Python简介与环境安装,今天让我们开始学习Python基础语法吧.        需注意的是,[零基础 ...

  7. 两天入门Python基础(附代码实现)

    这是光城同学写的一篇python基础长文,对python的基础语法用了简单的例子进行讲解,非常适合初学者入门,初学者用两天时间看懂并实现代码后,可以对python有初步的理解,强烈建议初学者学习.(建 ...

  8. 【Day1】一小时入门 python 基础,从安装到入门

    文章目录 python 安装 安装python 安装 pycharm python基础 输出 注释 变量 输入 类型转换 运算符 自增 字符串相关操作 比较运算符 逻辑运算符 条件控制 while循环 ...

  9. f是一个python内部变量类型,Python基础变量类型——List浅析

    Python使用list 一.list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示 ...

  10. python 等号报错_Python学习----Python基础

    Python基础 一.数据类型和变量 1.在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量. 例如: a =520# a是整数prin ...

最新文章

  1. RTP(Robi改造计划)--- 觉得还是搞风火轮(leg-wheel)好
  2. 闻声识人时代将至?多家企业争相布局
  3. java选填,java选择填空 - osc_ug2wy0bi的个人空间 - OSCHINA - 中文开源技术交流社区
  4. Apache ZooKeeper -从初始化到对外提供服务的过程解析( 集群模式 )
  5. mysql 禁用密码规则校验
  6. Java笔试题库之编程题库 总共30道编程题,掌握了就可以应付中级以内Java面试题
  7. linux之lsof查看端口占用情况
  8. 接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架
  9. kotlin中判断字符串_Kotlin程序查找字符串中字符的频率
  10. 一、经含氟防水剂整理的织物主要存在的不足?
  11. 重装linux之后gcc等下载不了,Redhat linux下安装gcc
  12. 学习Enroll例程
  13. Day8_误差反向传播
  14. typora插入代码设置_五分钟快速上手神器Typora
  15. 软件测试--缺陷报告常见问题03
  16. IOS 学习笔记(2) 视图UINavigationController
  17. 暑假集训-7.31总结
  18. div覆盖在dropdownlist之上的方法
  19. 计算机原理考研题库,东北大学计算机组成原理题库(9)
  20. 南航考研计算机学院学硕分数,2019南航计算机学硕经验贴

热门文章

  1. mysql查询结果百分比表示_MySQL 查询结果以百分比显示简单实现
  2. PNG免抠素材网,免费商用,设计师赶紧马住。
  3. Arduino自制打地鼠游戏机详细教程
  4. snowStorm.js下雪效果
  5. net::ERR_INCOMPLETE_CHUNKED_ENCODING 200
  6. StbM 和 Time Synchronization Over CAN and Ethernet(二) 以EthTSyn和StbM为例
  7. Springboot拦截器实现IP黑名单
  8. 机器学习各种算法以及开发具体流程+API具体实例+案例的实现
  9. 青龙+WxPusher实现资产推送
  10. 图灵完备 java_图灵完备是什么?