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编码成gbk print("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-8 print("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 = 9
nine_weight = 9
#行的数量
for line in range(1, nine_lines+1):
#列的数量,由于列的数量跟行数量一致,所以是line+1
for 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 12800
2、Book 100
3、Computer 5000
4、Flower 99
5、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_price
print("已加入 %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] += 1
break
#当循环完成后如果还是没有找到相同的商品,则额外添加商品,数量默认为1
else:
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)) break
else:
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:continue
current_menu = menu_list.pop()
elif choice_menu == 'q':
flag = False
else:
print("输入有误!")

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

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

  1. Python全栈开发记录_第二篇(文件操作及三级菜单栏增删改查)

    python3文件读写操作(本篇代码大约100行) f = open(xxx.txt, "r", encoding="utf-8") 不写“r”(只读)默认是只 ...

  2. Python全栈开发记录_第九篇(面向对象(类)的学习)

    有点时间没更新博客了,今天就开始学习类了,今天主要是面向对象(类),我们知道面向对象的三大特性,那就是封装,继承和多态.内容参考该博客https://www.cnblogs.com/wupeiqi/p ...

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

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

  4. Python全栈开发记录_第八篇(模块收尾工作 json &amp; pickle &amp; shelve &amp; xml)

    由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle. 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过, ...

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

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

  6. Python全栈开发记录_第五篇(装饰器)

    单独记录装饰器这个知识点是因为这个知识点是非常重要的,必须掌握的(代码大约150行). 了解装饰器之前要知道三个知识点 作用域,上一篇讲到过顺序是L->E->G->B 高阶函数: 满 ...

  7. Python全栈开发记录_第四篇(集合、函数等知识点)

    知识点1:深拷贝和浅拷贝 非拷贝(=赋值:数据完全共享,内存地址一样,修改一个另一个也变化) 浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层)像[[1,2],3,4]如果修改列表中列 ...

  8. Python全栈开发记录_第十篇(反射及选课系统练习)

    反射机制:反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块中寻找指定函数,对其进行操作.也就是利用字符串的形式去对象(模块)中操作(查找or获取or删除or添加)成员,一种基于字符串的事件 ...

  9. Python全栈开发记录_第六篇(生成器和迭代器)

    说生成器之前先说一个列表生成式:[x for x in range(10)]   ->[0,1,2....,9]这里x可以为函数(因为对python而言就是一个对象而已),range(10)也可 ...

随机推荐

  1. 第14章 Linux启动管理(1)_系统运行级别

    1. CentOS 6.x 启动管理 (1)系统运行级别 ①运行级别 运行级别 含义 0 关机 1 单用户模式,可以想象为Windows的安全模式,主要用于系统修复.(但不是Linux的安全模式) 2 ...

  2. 【转】Nginx中upstream有以下几种方式:

    1.轮询(weight=1) 默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.upstream bak ...

  3. 小记初试tornado与ajax,一些注意点

    一. 在 tornado模板中使用自定义方法 在tornado中可以使用两种方式,达到在模板中调用自定义方法的效果,第一种是使用UIMethod 和UIModule. 1.UIMethod使用方法示例 ...

  4. 线性函数拟合R语言示例

    线性函数拟合(y=a+bx) 1.       R运行实例 R语言运行代码如下:绿色为要提供的数据,黄色标识信息为需要保存的. x<-c(0.10,0.11, 0.12, 0.13, 0.14, ...

  5. UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)

     Stacking Boxes  Background Some concepts in Mathematics and Computer Science are simple in one or t ...

  6. 常用的html标签大全

    html标签大全 一.文字 1.标题文字 <h#>..........</h#> #=1~6:h1为最大字,h6为最小字 2.字体变化 <font>........ ...

  7. C++/C常量

    简介 1. 易忽略的常量:函数地址(函数名).静态数组的名字.字符串常量的地址. 2. 常量分类:字面常量.符号常量.契约性常量.布尔常量.枚举常量. 常量认知 1. 字面常量 包括:各种进制的数字. ...

  8. 一次开放接口从需求分析到发布sdk线上包

    新年开场篇,欢迎来点赞:本篇和大家分享的是使用webapi做得接口服务验证框架,需求来源是我打算把上篇提到的图片验证码做成一种服务提供给大家,尽管我在上篇已经把代码打包开源了,但是如果有一种快速对接成 ...

  9. 鸟哥Linux私房菜基础学习篇学习笔记1

    鸟哥Linux私房菜基础学习篇学习笔记1 第三章 主导分区(MBR),当系统在开机的时候会主动去读取这个区块的内容,必须对硬盘进行分区,这样硬盘才能被有效地使用. 所谓的分区只是针对64Bytes的分 ...

  10. vue form表单验证

    <el-select v-model="ruleForm.region" placeholder="请选择活动区域"> <el-option ...