Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看。(该篇代码行数大约:300行)

知识点1:优先级:not>and

    短路原则:and:如果第一个条件的结论为假,那么 and 前后两个条件组成的表达式计算结果一定为假,后面的条件计算机不会进行计算

         or:如果第一个条件的结论为真,那么or 前后两个条件组成的表达式计算结果一定为真,后面的条件计算机不会进行计算

知识点2:python区分大小写,常量需全部字母大写(默认这样写)

    python换行符说明:Windows是'\r\n',Linux是'\n',在Python 3,可以通过open函数的newline参数来控制Universal new line mode:读取时候,不指定newline,则默认开启Universal new line mode,所有\n, \r, or \r\n被默认转换为\n ;写入时,不指定newline,则换行符为各系统默认的换行符(\n, \r, or \r\n, ),指定为newline='\n',则都替换为\n(相当于Universal new line mode);不论读或者写时,newline=''都表示不转换。

知识点3:while...else...和for...else....:while循环中,只要循环正常完成,即中途没有break,那么就会 执行else语句,否则就不会,for循环跟while原理一样。

知识点4:exit("退出啦")->程序退出,并提示“退出啦”。

知识点5:python3已经不区分长整型和整型,python2区分,主要是长度(linux和windows也不一样,可以自己试一下)。

知识点6:python3列表切片:a=[1,2,3],a[1:10]就等同于a[1:]也就是说索引2之后本身就不存在了也不管了直接取到最后就行,但是不能a[10],会出现索引错误。

    a,b = [1,2] -> a=1,b=2

知识点7:enumerate(sequence, [start=0]), 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

知识点8:字典的键只能为不可变类型,值可以为任意值,字典键唯一,重复的键,取字典最后一个。

      不可变类型:整型、字符串、元组

      可变类型:列表、字典

知识点9:字符串:a="12",b="tt",c="hh" -> '-'.join([a,b,c]) 结果就是"12-tt-hh",字符串通过join实现拼接,效率比+更快(试了简单的拼接,join快几百倍)。

   format格式化输出:a="hello world {name} {age}"  -> a.format(name="liu", age=18)或者a.format_map({"name":"liu", "age":18}),然后结果就是hello world liu 18。

知识点10:关于python中编码的问题,先说python2的编码:

python2文本字符默认编码是ASCII,python3中文本字符默认为unicode(py3在编码的同时会把数据变成byte类型,在解码的同时会把byte类型转成字符串),下图是从金角大王那里借鉴的,decode是解码,encode是编码,unicode是他们共同的联系(unicode向下兼容gbk),

#coding=utf-8
a = "我是中国人"
#utf-8转换成gbk,正确写法,下面都是py2的写法
utf8_to_unicode = a.decode("utf-8")  #将utf-8解码成unicode
unicode_to_gbk = utf8_to_unicode.encode("gbk")  #将unicode编码成gbkprint("unicode", utf8_to_unicode)
print("gbk", unicode_to_gbk)#如果gbk装换成utf8,错误写法如下
gbk_to_utf8 = unicode_to_gbk.encode("utf-8")
#实际上python2自动帮你换成了,decode()不写表示默认用ASICC帮你解码
unicode_to_gbk.decode().encode("utf-8")#gbk转换成utf-8,正确写法如下,必须先转成unicode先
gbk_to_unicode = unicode_to_gbk.decode("gbk")   #将gbk解码成unicode
unicode_to_utf8 = gbk_to_unicode.encode("utf-8")  #将unicode编码成utf-8print("unicode", gbk_to_unicode)
print("utf-8", unicode_to_utf8)

题目一:用户输入三个数字,输出三个数字中的最大值/最小值

# -*- coding:utf-8 -*-'''
需求1:用户输入三个数字,输出三个数字中的最大值/最小值思路:以num1,num2,num3三个数为例1、三个数比较的话,先比较两个数,然后再拿这两个数跟第三个数进行比较2、if num1 >= num2:if num2 >= num3:print("最大值是:",num1,",最小值是:",num3)elif num1 >= num3:print("最大值是:",num1,",最小值是:",num2)else:print("最大值是:",num3,",最小值是:",num2)else:if num1 >= num3:print("最大值是:",num2,",最小值是:",num3)elif num2 >= num3:print("最大值是:",num2,",最小值是:",num1)else:print("最大值是:",num3,",最小值是:",num1)
'''def compare_size():num1 = int(input("请输入第一个数字:"))num2 = int(input("请输入第二个数字:"))num3 = int(input("请输入第三个数字:"))if num1 >= num2:if num2 >= num3:print("最大值是:",num1,",最小值是:",num3)elif num1 >= num3:print("最大值是:",num1,",最小值是:",num2)else:print("最大值是:",num3,",最小值是:",num2)else:if num1 >= num3:print("最大值是:",num2,",最小值是:",num3)elif num2 >= num3:print("最大值是:",num2,",最小值是:",num1)else:print("最大值是:",num3,",最小值是:",num1)if __name__ == "__main__":compare_size()

题目二:使用#号输出长方形,用户可以指定宽和高,如果宽为4,高为5,则输出4个横#和5个竖#的长方形
# -*- coding:utf-8 -*-'''
需求2:使用#号输出长方形,用户可以指定宽和高,如果宽为4,高为5,则输出4个横#和5个竖#的长方形思路:1、一般横竖这种可以通过循环嵌套来处理2、外层循环代表横,内层循环代表竖'''def print_rectangle():#接收用户输入rec_width = int(input("请输入宽:"))rec_height = int(input("请输入高:"))#外层循环输出高for height in range(rec_height):#内层循环输出宽的数量for width in range(rec_width):print("#",end="")#每行打完换行print()if __name__ == "__main__":print_rectangle()

题目三:如何输出如下直角三角形,用户指定行数(上下反转试下)
'''
需求3:如何输出如下直角三角形,用户指定行数(上下反转试下)
*
**
***思路:1、外层循环代表横,内层循环代表竖(先确定这个框架)2、外层是行,那么也就是用户的输入,由于用户只输入了高,发现列是第一行一,第二行二,第N行N,所以可以不用内循环也可以3、上下反转的话,就是输出第一行是N,依次减一即可'''def print_triangle():# 接收用户输入tri_height = int(input("请输入三角形的高:"))# 外层循环输出高for height in range(1, tri_height+1):print("*"*height)def up_down_print_triangle():# 接收用户输入tri_height = int(input("请输入三角形的高:"))# 外层循环输出高for height in range(1, tri_height+1):print("*"*(tri_height+1-height))if __name__ == "__main__":#print_triangle()up_down_print_triangle()

题目四:输出九九乘法表
'''
需求4:输出九九乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
....思路:1、外层循环代表横,内层循环代表竖(先确定这个框架)2、然后找寻规律,发现总共九行,第一行一列,第N行N列3、x*y 左边x,x的值由1逐步增加至y  y的数值则为列的数值
'''def print_99_multiply():#99乘法表的行、列数用变量表示nine_lines = 9nine_weight = 9#行的数量for line in range(1, nine_lines+1):#列的数量,由于列的数量跟行数量一致,所以是line+1for weight in range(1, line+1):print("%d*%d=%d"%(weight, line, (weight*line)),end="\t") #\t制表符是为了对齐print()if __name__ == "__main__":print_99_multiply()

 

题目五:购物车小程序
# -*- coding:utf-8 -*-
# @__author__ : Loris
# @Time : 2018/10/24 9:11'''
需求5:购物车程序(不用字典)'''#初版
def first_shopping_car():#商店的商品shops = ["iphoneX", "Book", "Computer", "Flower", "Tea"]#商品价格列表shop_prices = [12800, 100, 5000, 99, 35]#用户账户余额salary = 10000#用户购物车列表buy_shops = []while True:#欢迎用户进入购物页面,并且显示所有购物商品print('''商品列表:1、iphoneX    128002、Book    1003、Computer    50004、Flower    995、Tea    35''')shop_num = input("请您选择商品,退出请输入quit:")if shop_num == "quit":print("您已购买以下商品:")for shop in buy_shops:shop_price_index = shops.index(shop)print("%s   %d"%(shop, shop_prices[shop_price_index]))print("您的余额为:%d" %salary)print("欢迎下次光临!")break#当前商品的价格current_shop_price = shop_prices[int(shop_num)-1]#当前商品名称current_shop_name = shops[int(shop_num)-1]#用户选择后,用用户余额扣除商品的价格,当小于0时提示用户余额不足,并显示扣除之后的值if (salary-current_shop_price) >= 0:buy_shops.append(current_shop_name)salary = salary - current_shop_priceprint("已加入 %s 到您的购物车,当前你账户余额为%d"%(current_shop_name, salary))else:print("余额不足,%s"%(salary-current_shop_price))#第二个版本(优化版本)
def second_shopping_car():#商品列表,这里就将商品和价格用元组表示shops_list = [("iphoneX", 12800),("Book", 100),("Computer", 5000),("Flower", 99),("Tea", 35),]#用户账户余额salary = 10000#用户购物车列表buy_shops = []while True:#展示所有商品信息for num, shop in enumerate(shops_list, 1):if num == 1:print("序号".ljust(8)+"商品".ljust(10)+"价格".ljust(10))print(str(num).ljust(10)+shop[0].ljust(12)+str(shop[1]).ljust(10))#接收用户输入要购买的商品shop_num =  input("请您选择商品,退出请输入quit:")#判断输入是否合理if shop_num.isdigit():shop_num = int(shop_num)if shop_num>0 and shop_num<=len(shops_list):#当前商品current_shop = shops_list[shop_num-1]#判断余额是否大于当前商品的价格,大于则加入购物车,小于则提示余额不足if current_shop[1] <= salary:salary -= current_shop[1] #减去商品的价格#如果说购物车有商品则将商品拿出来依次判断if len(buy_shops) != 0:for buy_shop in buy_shops:if current_shop[0] == buy_shop[0]:#当发现有同样商品时,商品数量加1,然后退出循环buy_shop[1] += 1break#当循环完成后如果还是没有找到相同的商品,则额外添加商品,数量默认为1else:buy_shops.append([current_shop[0], 1])#如果没商品就直接添加第一个else:buy_shops.append([current_shop[0], 1])  #将商品加入到购物车print("您已将%s商品加入购物车,当前账户余额为%d"%(current_shop[0], salary))else:print("您当前余额不足,还剩%s元钱"%salary)else:print("你输入的商品序号不存在,请重新输入!")elif shop_num == "quit":#在退出前展示已购买列表print("--------已购买商品列表如下--------")print("商品".ljust(8)+"数量".ljust(10))for buy_shop in buy_shops:print(buy_shop[0].ljust(10)+str(buy_shop[1]).ljust(10))breakelse:print("你输入的内容有误,请重新输入!")if __name__ == "__main__":second_shopping_car()

效果图如下:

 题目六:三级菜单

# -*- coding:utf-8 -*-
'''
需求6:三级菜单
要求:1、打印省、市、县三级菜单2、可返回上一级3、可随时退出程序思路:1、有几级菜单就需要几个while循环,这样才能不断选择2、退出标识位用不同变量表示
'''#字典存放省、市、县
menu_dict = {"广东省":{"深圳市":{"罗湖区":{},"福田区":{},"南山区":{}},"广州市":{"白云区":{},"天河区":{},"越秀区":{},"番禺区":{}},"东莞市":{"虎门镇":{},"樟木头":{},"常平镇":{},"大岭山":{}}},"湖南省":{"长沙市":{"雨花区":{},"岳麓区":{},"芙蓉区":{}},"株洲市":{"天元区":{},"沪松区":{}},"邵阳市":{"新邵县":{},"大祥区":{},"武冈":{},"隆回县":{}}}
}#第一版(初级版本)
#定义退出标识位
# provice_flag = True   #一级菜单
# city_flag = True      #二级菜单
# area_flag = True      #三级菜单
#
# while provice_flag:
#     # 打印一级菜单
#     for provice in menu_dict:
#         print(provice)
#     #用户选择省
#     provice_menu = input("please choice,b返回上一层,q则退出:").strip()
#     #print(provice_menu)
#     if provice_menu in menu_dict:
#         # 用户选择后,就可以进入循环,用break就可以不用考虑
#         city_flag = True
#         while city_flag:
#             #打印二级菜单(市)
#             for city in menu_dict[provice_menu]:
#                 print(city)
#             #用户选择市
#             city_menu = input("please choice,b返回上一层,q则退出:").strip()
#             if city_menu in menu_dict[provice_menu]:
#                 # 用户选择后,就可以进入循环,用break就可以不用考虑
#                 area_flag = True
#                 while area_flag:
#                     #打印三级菜单(区)
#                     for area in menu_dict[provice_menu][city_menu]:
#                         print(area)
#                     # 用户选择区
#                     area_menu = input("please choice,b返回上一层,q则退出:").strip()
#                     if area_menu in menu_dict[provice_menu][city_menu]:
#                         print("已经是最后一层了,请返回!")
#                     elif area_menu == "q":
#                         area_flag = False
#                         city_flag = False
#                         provice_flag = False
#                     elif area_menu == "b":
#                         area_flag = False
#                     else:
#                         print("输入有误!")
#             elif city_menu == "q":
#                 city_flag = False
#                 provice_flag = False
#             elif city_menu == "b":
#                 city_flag = False
#             else:
#                 print("输入有误!")
#
#     elif provice_menu == "q":
#         provice_flag = False
#     elif provice_menu == "b":
#         provice_flag = False
#     else:
#         print("输入有误!")

#第二版(优化版本)
#退出的标识位
flag = True#通过变量存储变化的菜单栏
current_menu = menu_dict  #刚开始就是一级菜单栏#通过列表记录以往的父级菜单
menu_list = []while flag:#打印菜单栏内容,跟current_menu有关for menu in current_menu:print(menu)choice_menu = input("请选择,b返回上一层,q退出:")if choice_menu in current_menu:#将父级菜单加入列表
        menu_list.append(current_menu)#变量存储子级菜单current_menu = current_menu[choice_menu]if not current_menu:print("最后一层了")elif choice_menu == 'b':#如果列表记录无内容证明在第一层,所以就不需要执行返回上一层if len(menu_list) == 0:continuecurrent_menu = menu_list.pop()elif choice_menu == 'q':flag = Falseelse:print("输入有误!")

总结:第一篇主要用到的知识都是循环嵌套,虽然不难,但是这上面的题目都还是比较经典的,建议在做题的时候先看清楚需求然后明确思路,锻炼先理顺实现逻辑再去编程,这样会比较好,而且要写注释,变量名也需要有意义。

转载于:https://www.cnblogs.com/leixiaobai/p/9828294.html

Python全栈开发记录_第一篇(循环练习及杂碎的知识点)相关推荐

  1. Python全栈开发记录_第三篇(linux(ubuntu)的操作)

    该篇幅主要记录linux的操作,常见就不记录了,主要记录一些不太常用.难用或者自己忘记了的点. 看到https://www.cnblogs.com/resn/p/5800922.html这篇幅讲解的不 ...

  2. Python全栈开发记录_第七篇(模块_time_datetime_random_os_sys_hashlib_logging_configparser_re)...

    这一篇主要是学习python里面的模块,篇幅可能会比较长 模块的概念:在Python中,一个.py文件就称之为一个模块(Module). 模块一共三种: python标准库 第三方模块 应用程序自定义 ...

  3. python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...

    2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...

  4. python全栈开发下载_网易云课堂Python Flask框架全栈开发,全套视频教程学习资料通过百度云网盘下载...

    适用人群 1.想使用Python快速开发网站的. 2.前端开发者,想学习后端开发逻辑的. 3.有编程经验,想学习Flask的. 课程概述 本套课程的目标是从零基础开始,使用Flask框架开发企业级的项 ...

  5. 老男孩python全栈开发视频教程_老男孩Python全栈开发(92天全)视频教程 自学笔记06...

    day6课程内容: tuple(元祖) 创建元祖: tup0=() #没有元素的一个元祖 tup1=(20,)#只有一个元素的元祖 元祖可读,不可修改 Dictionary(字典)#Python里唯一 ...

  6. 老男孩python全栈开发视频教程_老男孩Python全栈开发(92天全)视频教程 自学笔记05...

    day5课程内容: 集成开发环境(IDE) VIM #经典的Linux下的文本编辑器 Eclipse #Java IDE Visual Studio #微软开发的IDE notepad++ subli ...

  7. 老男孩python全栈开发视频教程_老男孩Python全栈开发(92天全)视频教程 自学笔记16...

    day16课程内容: 装饰器: def outer(): x=10 def inner(): print(x) return inner outer()() #inner 是局部变量,10 闭包:如果 ...

  8. 老男孩python全栈开发视频教程_老男孩Python全栈开发(92天全)视频教程 自学笔记08...

    day8课程内容: 文件操作 f=open('小重山','r',encoding='utf8')   #以读的方式打开文件 data=f.read() print(data) f.close()  # ...

  9. 老男孩python全栈开发视频教程_老男孩Python全栈开发(92天全)视频教程 自学笔记18...

    day18课程内容: os模块 import os print(os.getcwd())#D:\untitled\练习题 获取当前工作目录 os.chdir(r'D:\untitled\练习题\16. ...

最新文章

  1. 别让用户发呆——设计中的防呆策略
  2. GAN对抗生成网络原始论文理解笔记
  3. vivado软件如何查看内部器件的仿真信号
  4. TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception v1,这里补充一个Windows下的,使用AForge库(www.aforgenet.com)操作
  5. 在线制作GIF图片项目愿景与范围
  6. 小程序源码:多功能图片处理器-多玩法安装简单
  7. [RK3288][Android6.0] USB UVC 协议简结
  8. [附源码]Java计算机毕业设计SSM宠物领养系统
  9. ibm服务器日志文件提取,IBM X3850 X5服务器搜集日志
  10. qqxml代码-班级作业xml卡片代码班级作业
  11. 按键精灵开发传奇手游教程-现在比较火的美杜莎传奇为例
  12. jieba / hanlp / ltp / standforCorenlp 分词器对比
  13. Java学习者论坛【申明:来源于网络】
  14. 2G通信项目-物联网小尺寸模组M26与M6315功耗测试对比分析
  15. 计算机系统遗传学,中国象棋计算机博弈系统评估函数自适应遗传算法[转]
  16. 强化学习-入门教程(完整版)
  17. 【Ubuntu】SMBus Host controller not enabled(虚拟机进入不了图形界面)
  18. 2021年安全员-B证试题及解析及安全员-B证证考试
  19. USB 设备驱动之设备接入梳理(六)
  20. 郭天祥单片机编程100例程序及随笔3——定时器编程

热门文章

  1. NeurIPS 2022 Oral | 摘下悬在神经网络上的达摩克利斯之剑:从模型层面获得对抗鲁棒性保证...
  2. pig的一些实例(我常用的语法)
  3. VS2015 解决msvcp120d.dll和msvcr120d.dll缺失异常问题
  4. 5G 全新网络时代,开发者的机会在哪里?
  5. 单片机C语言C51的函数
  6. Silverlight 实现类似win7任务栏缩略图
  7. 2019年过半,前端所有流行必学技能总结-下篇
  8. qq群聊机器人接入ChatGPT-简介和源码
  9. 为什么电容通高频阻低频?为什么又说小电容通高频,大电容通低频?
  10. java工资多少_java工资一般多少?为何人们都蜂拥而至?