今天学习了以下几个方面的内容,虽然部分内容不能理解,跟着老师写出了代码。

  1. 列表、元组操作
  2. 字符串操作
  3. 字典操作
  4. 集合操作
  5. 文件操作
  6. 字符编码与转码

程序练习1:购物车程序

请闭眼写出以下程序。

程序:购物车程序

需求:

  1. 启动程序后,让用户输入工资,然后打印商品列表
  2. 允许用户根据商品编号购买商品
  3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
  4. 可随时退出,退出时,打印已购买商品和余额

我的实现思路

1、先做一个商品列表product_list将商品存下来
2、新建一个空列表,作为购物列表shouping_list
3、新建一个工资列表,让用户输入工资,为了避免用户输入的不是数字,用int强转时报错做两件事情
3.1 判断用户输入的是不是数字
3.2 将用户输入的值强转成数字,因为列表的下标时数字,有序用于判断。

创建一个死循环做一下事情:
1、将商品列表遍历后显示给用户,要求有序号,我们可以把下标作为序号
2、让用户输入一个数字,选择购买的商品
2.1判断用户输入的是不是数字,如果时数字,就把它强转成数字类型,存到变量user_choice中。
2.2可以留下来后面再做:进一步判断用户输入的数目是否超过商品数目,如果超了就提示,不超就继续
3、判断用户是否买得起该商品
3.1根据用户输入的数字,把商品从列表里取下来
3.2判断是否可以买得起
3.3如果买得起就将列表添加到购物列表shouping_list取
3.4扣钱
如果买不起:
提示XX商品买不起,你的钱不够xxx
2.3可以留下来后面再做:用户输入的值超过了商品数量,就提示:没有这个商品
4、判断用户是否输入q
4.1 如果用户输入的Q
4.2 显示购物列表
4.3 显示余额
4.4 退出程序
4.5 如果用户输入的时其他字符,显示错误

代码部分

# -*- coding:utf-8 -*-
# Author:Dwdar product_list = [ # 商品用列表存下来
('Iphoe', 5800),
('Mac Pro', 9800),
('Bike', 9800),
('Watch', 10600),
('Coffe', 31),
('Alex Python', 120),
] shouping_list = [] # 一个空列表,他是购物车,用户购买的商品要放到这里 salary = input("请输入工资:") # 用户输入工资
if salary.isdigit(): # 判断用户输入的是不是数字
salary = int(salary) # 如果是数字,就int 强转成数字 while True: # 进入死循环
for index, item in enumerate(product_list): # 遍历商品列表,
# print(product_list.index(item),item) #效率低
print(index, item)
user_choice = input("选择商品>>>:") # 让用户选择商品
if user_choice.isdigit(): # 如果用户输入的是数字
user_choice = int(user_choice) # 如果是数字,就int 强转成数字
# 判断 用户输入的数字是否超过商品的学号,数量
if user_choice < len(product_list) and user_choice >= 0:
p_item = product_list[user_choice] # 通过下标把商品价格取出来
if p_item[1] <= salary: # 判断是否买得起
shouping_list.append(p_item) # 买得起就把商品存进,购物车里
salary -= p_item[1] # 扣钱
# 向用户提示购买了什么,余额是多少
print("商品 %s 已添加到购物车,你的余额是: \033[31;1m%s\033[0m" % (p_item, salary))
else: # 如果判断时发现买不起
print("\033[41;1m你的余额只剩[%s]啦,还买个毛线\033[0m" % salary) # 给用户反馈买不起
else:
# 还有一种情况是,用户选择后没有这个商品,向用户提示
print("\033[41;1m你的选择的商品%s不存在!\033[0m" % user_choice) elif user_choice == 'q': # 如果用户输入q,进入退出环节
print("----------------商品列表----------------") # 列表标题,为了好看一点
for p in shouping_list: # 遍历已购买商品列表
print(p) # 打印商品列表
print("\033[31;1m您的余额是:%s\033[0m" % salary) # 向用户提示余额情况
exit() # 退出程序
else:
print("选择错误") # 如果用户没有录入q,而录入了别的,我们向用户提示

程序练习2:三级菜单

思路:
进入程序显示一级菜单:
向用户提示输入:
根据用户的输入进入二级菜单:
向用户提示输入:
根据选择进入三级菜单:
向用户提示输入:
根据用户输入显示三级菜下的内容

如果用户输入b 返回上一级菜单
如果用户输入q,退出程序

--------------------------------------------------------------------
为了实现向下选择和向上返回的目的,首先需要建立一个无限循环
把一级目录显示给用户
向用户提选择一级目录中的任意一个。
如果用户输入了某个一级目录,遍历和显示相关目录
一次类推,不断循环,通过嵌套循环和判断实现四级菜单和逐级打开效果。

代码

# -*- coding:utf-8 -*-
# Author:Dwdar menu = { #嵌套字典数据
"小学":{
"一年级":{
"一年级1班":{
"一1班学生1",
"一1班学生2",
"一1班学生3",
},
"一年级2班":{
"二1班学生1",
"二2班学生2",
"二3班学生3",
},
"一年级3班":{
"一3班学生1",
"一3班学生2",
"一3班学生3", },
},
"二年级":{
"二年级1班":{
"二1班学生1",
"二1班学生2",
"二1班学生3",
},
"二年级2班":{
"二2班学生1",
"二2班学生2",
"二2班学生3",
},
"二年级3班":{
"二3班学生1",
"二3班学生2",
"二3班学生3",
},
},
"三年级":{
"三年级1班":{
"三1班学生1",
"三1班学生2",
"三1班学生3",
},
"三年级2班":{
"三2班学生1",
"三2班学生2",
"三2班学生3",
},
"三年级3班":{
"三3班学生1",
"三3班学生2",
"三3班学生3",
},
"三年级4班":{
"三4班学生1",
"三4班学生2",
"三4班学生3",
},
"三年级5班":{
"三5班学生1-那尔太",
"三5班学生2",
"三5班学生3",
}
},
"四年级":{
"四年级1班":{
"四1班学生1",
"四1班学生2",
"四1班学生3",
},
"四年级2班":{
"四2班学生1",
"四2班学生2",
"四2班学生3",
},
"四年级3班":{
"四3班学生1",
"四3班学生2",
"四3班学生3",
},
"四年级4班":{
"四4班学生1",
"四4班学生2",
"四4班学生3",
},
"四年级5班":{
"四5班学生1-那尔太",
"四5班学生2",
"四5班学生3",
}
},
"五年级":{
"五年级1班":{
"五1班学生1",
"五1班学生2",
"五1班学生3",
},
"五年级2班":{
"五2班学生1",
"五2班学生2",
"五2班学生3",
},
"五年级3班":{
"五3班学生1",
"五3班学生2",
"五3班学生3",
},
"五年级4班":{
"五4班学生1",
"五4班学生2",
"五4班学生3",
},
"五年级5班":{
"五5班学生1-那尔太",
"五5班学生2",
"五5班学生3",
}
},
"六年级":{
"六年级1班":{
"六1班学生1",
"六1班学生2",
"六1班学生3",
},
"六年级2班":{
"六2班学生1",
"六2班学生2",
"六2班学生3",
},
"六年级3班":{
"六3班学生1",
"六3班学生2",
"六3班学生3",
},
"六年级4班":{
"六4班学生1",
"六4班学生2",
"六4班学生3",
},
"六年级5班":{
"六5班学生1-那尔太",
"六5班学生2",
"六5班学生3",
},
},
},
"初中":{
"初一": {
"初一1班": {
"初一1班学生1",
"初一1班学生2",
"初一1班学生3",
},
"初一2班": {
"初一1班学生1",
"初一2班学生2",
"初一3班学生3",
},
"初一3班": {
"初一3班学生1",
"初一3班学生2",
"初一3班学生3",
},
},
"初二": {
"初二1班": {
"初二1班学生1",
"初二1班学生2",
"初二1班学生3",
},
"初二2班": {
"初二1班学生1",
"初二2班学生2",
"初二3班学生3",
},
"初二3班": {
"初二3班学生1",
"初二3班学生2",
"初二3班学生3",
},
},
"初三": {
"初三1班": {
"初三1班学生1",
"初三1班学生2",
"初三1班学生3",
},
"初三2班": {
"初三1班学生1",
"初三2班学生2",
"初三3班学生3",
},
"初三3班": {
"初三3班学生1",
"初三3班学生2",
"初三3班学生3",
},
},
},
"高中":{
"高一": {
"高一1班": {
"高一1班学生1",
"高一1班学生2",
"高一1班学生3",
},
"高一2班": {
"高一2班学生1",
"高一2班学生2",
"高一2班学生3",
},
"高一3班": {
"高一3班学生1",
"高一3班学生2",
"高一3班学生3",
},
},
"高二": {
"高二1班": {
"高二1班学生1",
"高二1班学生2",
"高二1班学生3",
},
"高二2班": {
"高二2班学生1",
"高二2班学生2",
"高二2班学生3",
},
"高二3班": {
"高二3班学生1",
"高二3班学生2",
"高二3班学生3",
},
},
"高三": {
"高三1班": {
"高三1班学生1",
"高三1班学生2",
"高三1班学生3",
},
"高三2班": {
"高三2班学生1",
"高三2班学生2",
"高三2班学生3",
},
"高三3班": {
"高三3班学生1",
"高三3班学生2",
"高三3班学生3",
},
},
},
"大学":{
"大一": {
"大一python班": {
"大一python班学生1",
"大一python班学生2",
"大一python班学生3",
},
"大一C语言班": {
"大一C语言班学生1",
"大一C语言班学生2",
"大一C语言班学生3",
},
"大一网络工程班": {
"大一网络工程班学生1",
"大一网络工程班学生2",
"大一网络工程班学生3",
},
},
"大二": {
"大二python班": {
"大二python班学生1",
"大二python班学生2",
"大二python班学生3",
},
"大二C语言班": {
"大二python班学生1",
"大二C语言班学生2",
"大二网络工程班学生3",
},
"大二网络工程班": {
"大二网络工程班学生1",
"大二网络工程班学生2",
"大二网络工程班学生3",
},
},
"大三": {
"大三python班": {
"大三python班学生1",
"大三python班学生2",
"大三python班学生3",
},
"大三C语言班": {
"大三python班学生1",
"大三C语言班学生2",
"大三网络工程班学生3",
},
"大三网络工程班": {
"大三网络工程班学生1",
"大三网络工程班学生2",
"大三网络工程班学生3",
},
},
},
}
while True: #第一层无限循环
for i in menu: # 遍历字典一级目录
print(i) #一级目录显示给用户
chois = input("请输入选择:>>>") #让用户选择二级目录
if chois == 'b': #如果用户输入b,退出当前循环
break
while True: #第二层无限循环
for i2 in menu[chois]: #如果用户输入的二级目录存在,那么遍历二级目录
print('\t',i2) #将遍历后的二级目录显示给用户,'\t'是添加一个Tab键位置
chois2 = input("请输入选择:>>>") #让用户选择三级目录
if chois2 == 'b': #如果用户输入b,退出当前循环
break
while True:
for i3 in menu[chois][chois2]:#如果用户输入的三级目录存在,那么遍历三级目录
print('\t\t',i3) #将遍历后的三级目录显示给用户
chois3 = input("请输入选择:>>>") #让用户选择四级目录
if chois3 == 'b':
break
while True:
for i4 in menu[chois][chois2][chois3]: #将遍历后的四级目录显示给用户
print('\t\t\t', i4)
chois4 = input("按b返回上一层:>>>") #目录到了最底层,向用户提示返回
if chois4 == 'b': #如果用户输入了b
break #退出当前循环 #练习程序没有对无效输入进行判断,无效输入会报错

本想做三级菜单,为把儿子名字显示出来,一激动就做了四级菜单,呵呵,实现方法一样的。

02-python 学习第二天的更多相关文章

  1. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  2. python学习第二次笔记

    python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...

  3. Python学习-第二天-字符串和常用数据结构

    Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...

  4. python学习第二天 -----2019年4月17日

    第二周-第02章节-Python3.5-模块初识 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @author:chen ...

  5. python 学习第二天

    由于换了博客,第一篇没有在博客园写,写在了开源中国上,链接地址为http://my.oschina.net/u/254063/blog/719289,大家有兴趣可以看看 一, python 数据类型 ...

  6. python学习第二天第一部分

    备注:写程序不能写重复性的代码 学习内容:数据类型.for循环.while循环.字符编码.文件处理 一.for循环 1.简单的for循环 for i in range(10): # 此处意思为:循环r ...

  7. Python学习第二节——基础知识

    # !/usr/bin/edv python    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它.# -*- coding:UTF-8 -*-    标明编码注释 ...

  8. Python 学习第二章

    本章内容 数据类型 数据运算 表达式 if ...else 语句 表达式 for 循环 表达式 while 循环 一.数据类型 在内存中存储的数据可以有多种类型. 在 Python 有五个标准的数据类 ...

  9. Python 学习 第二篇:数据类型(字符串)

    字符串是一个字符的.有序的.不可变的序列,用于存储基于文本的信息.字符串所包含的字符存在从左至右的位置顺序,不可以在原处(in-place)修改.Python没有C语言的字符和字符串之分,只有字符串. ...

  10. python学习第二天-基本数据类型常用方法

    1.直入主题 python中基本的数据类型有 数字(整形,长整形,浮点型,复数) 字符串 字节串:在介绍字符编码时介绍字节bytes类型 列表 元组 字典 集合 下面我们直接将以下面几个点进行学习 # ...

随机推荐

  1. PHP ftp_rmdir() 函数

    定义和用法 The ftp_rmdir() 函数删除 FTP 服务器上的一个目录. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_rmdir(ftp_connectio ...

  2. alert样式优化

    //alert样式优化 function alert(msg, mode) { //mode为空,即只有一个确认按钮,mode为1时有确认和取消两个按钮 msg = msg || ''; mode = ...

  3. 经典单调栈最大子矩形——牛客多校第二场H

    题目是求次大子矩形,那么在求最大子矩形的时候维护M1,M2即可 转移M2时比较的过程要注意一下 #include<bits/stdc++.h> using namespace std; # ...

  4. delphi里为程序任务栏右键菜单添加自定义菜单

    本文讲解的是为自身程序的任务栏右键菜单里添加自己定义的菜单的方法: delphi添加任务栏右键菜单 procedure TForm1.FormCreate(Sender: TObject); var ...

  5. Dll注入技术之远程线程注入

    DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...

  6. 拾遗:Perl 在 Shell 脚本编程中的应用

    Perl 对我用途,仅是作为 Shell 脚本中的文本处理器:在较大的软件工程里,更多的是使用 C.go 等编译型语言. Perl 是一种历史比较悠久的动态编程语言,在各种类 Unix 系统中得到了应 ...

  7. web开发者性能优化工具(一)

    web开发者性能优化工具 1   数据包嗅探器(在性能优化时,查看页面(包括页面中全部资源)的加载过程) HttpWatch (http://www.httpwatch.com/) 把网络流量用图形的 ...

  8. css样式高级技巧-选择器

    用<div>元素为网页 在编写样式表时,我们经常要用div元素来包装内容: <div> <p>Here are two paragraphs of content& ...

  9. 3.1_springboot2.x检索之elasticsearch安装&快速入门

    1.elasticsearch简介&安装 1.1.1.elasticsearch介绍 ​ 我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的首选.他可以快 ...

  10. luogu3384 /// 树链剖分+线段树模板

    题目大意: https://www.luogu.org/problemnew/show/P3384 树链剖分的讲解 两个dfs() 修改 查询 很详细很好理解 https://www.cnblogs. ...