下面是学习的网址:
目录
9、for循环、dictionary字典和format格式结合的一些问题
6、if...elif...else条件语句的一些问题
下面是练习的代码:
# 考试成绩及等级查询_条件语句
user_firstname = input("请问您贵姓?")
user_name = input("我是应该叫您"+user_firstname+"先生"+"还是"+user_firstname+"女士?")
print("好的," + user_name + "!")
user_first_score = float(input(user_name+"请输入您的初试成绩(100分制):"))
user_second_score = float(input("请继续输入您的复试成绩(100分制):"))
user_score = user_first_score * 0.75 + user_second_score * 0.25
if 90 < user_score <= 100:
user_score_level = "优秀"
elif 70 < user_score <= 90:
user_score_level = "良好"
elif 60 < user_score <= 70:
user_score_level = "合格"
else:
user_score_level = "不合格"
print("非常感谢您参加此次考试," + user_name + "!\n"
"您此次的考试综合成绩为" + str(user_score) + ",\n”"
"考试等级为" + user_score_level + "。")
1)条件语句需要注意的地方
1.elif前面不能有任何缩进;
2.判断条件后要有冒号。
2)换行需要注意的地方
如果你第二行前面没有缩进,没有对齐,会有如下报错信息显示:
PEP 8: E128 continuation line under-indented for visual indent
7、list列表的一些问题
1)列表里数据类型、打印、append方法的问题
运行下面这一段程序:
test = [None, True, 1.23, 1, "可乐"]
print(test) # 列表里面可以存储空值类型、布尔量、浮点数、整数、字符串
product = ["可乐", "雪碧", "芬达"]
print(product) # 打印出来的列表是带方括号、引号、逗号的
print(product[1]) # 用索引就只打印对应的数据
product.append("奥利奥")
product.append("乐士1"+"翻天娃1")
print(product)
product.append(["乐士2", "翻天娃2"]) # 方法append只能添加一个元素,既不是用+号或者方括号[]就可以添加多个元素的
print(product)
product.extend(["乐士3", "翻天娃3"]) # 用extend就可以在原有列表的基础上添加多个元素
print(product)
运行结果如下:
[None, True, 1.23, 1, '可乐']
['可乐', '雪碧', '芬达']
雪碧
['可乐', '雪碧', '芬达', '奥利奥', '乐士1翻天娃1']
['可乐', '雪碧', '芬达', '奥利奥', '乐士1翻天娃1', ['乐士2', '翻天娃2']]
['可乐', '雪碧', '芬达', '奥利奥', '乐士1翻天娃1', ['乐士2', '翻天娃2'], '乐士3', '翻天娃3']
由此我们可知:
1.列表里面可以存储空值类型、布尔量、浮点数、整数、字符串;
2.打印出来的列表是带方括号、引号、逗号的,用索引就只打印对应的数据;
3.方法append只能添加一个元素,既不是用+号或者方括号[]就可以添加多个元素的,用extend就可以在原有列表的基础上添加多个。
2)max、min、sorted方法的问题
运行下面代码:
num_list = [1, 1.5, 100.0, 3.06]
print(max(num_list))
print(type(max(num_list)))
print(min(num_list))
print(type(min(num_list)))
print(sorted(num_list))
print(type(sorted(num_list)))
test_list1 = [1, 1.5, 100.0, 3.06, "test"]
print(max(test_list1))
print(type(max(test_list1)))
test_list2 = [1, 1.5, 100.0, 3.06, None]
print(max(test_list2))
print(type(max(test_list2)))
运行结果如下,倒数六行有两个报错:
100.0
<class 'float'>
1
<class 'int'>
[1, 1.5, 3.06, 100.0]
<class 'list'>
TypeError: '>' not supported between instances of 'str' and 'float'
TypeError: '>' not supported between instances of 'NoneType' and 'float'
由此我们可知:
1.max、min、sorted方法求取的列表数值类型只能是整数或是浮点数,不能是字符串、空值、布尔;
2.sorted(...)求取的数据类型还是list列表。
3)布尔量True和整数1的一些问题
在进行列表remove操作时,由于列表中既有布尔量True又有整型1,想消除掉1,却输出结果消除了True,要想消除整形1,只能再加一行remove(1)代码。完整代码如下:
test = [None, True, 1.23, 1, "可乐"]
test[0] = False # 更改列表第0个索引数据为False
test.remove(1) # 去除掉了数据True,因为其布尔类型0/1,True就代表1,而remove方法和append方法一样,一次只能去除一个数据
test.remove(1) # 再次去除掉了数据1
print(test)
其结果才为:
[False, 1.23, '可乐']
要是我想保留布尔量True,只想要remove整形1怎么办?我想到了用索引的方法,但是索引好像也不管用咧,无论是正向索引还是反向索引都不管用,照样先remove掉布尔True。
test.remove(test[3]) # 正向索引
test.remove(test[-2]) # 反向索引
结果还是有整形1:
[False, 1.23, 1, '可乐']
所以,最好不要让布尔量True和整型1在一起。
8、dictionary字典的一些问题
1)无法输出所有“张伟”但是不同“年龄”的联系方式
我做的是一个KFC菜单程序。代码如下:
# KFC菜品和价格菜单
KFC_memu = {("b原味吮指鸡", "5块"): "29.9元",
("a原味吮指鸡", "3块"): "19.9元",
("香骨鸡", "15块"): "19.9元",
("香骨鸡", "8块"): "9.9元",
"黄金小酥肉": "9.9元",
("鸡米花", "小份"): "9.9元",
("鸡米花", "大份"): "18.8元",
("黄金鸡块", "20块"): "19.9元",
("黄金鸡块", "10块"): "18.8元",
("葡式蛋挞", "8只"): "29.0元",
"爆汁柠桔茶": "9.9元",
"纯香燕麦雪顶咖啡": "9.9元"}
length_1 = len(KFC_memu)
print("一共包含"+str(length_1)+"个菜品,其菜单如下:\n"+str(KFC_memu))
print("b原味吮指鸡5块的价格为:"+KFC_memu[("b原味吮指鸡", "5块")])
# print(KFC_memu["黄金鸡块"]) # 报错,没有这个,不能找出所有黄金鸡块的价格
KFC_memu[("黄金脆皮鸡", "3块")] = "28.8元" # 往字典里面添加新的键值对
length_2 = len(KFC_memu)
print("一共包含"+str(length_2)+"个菜品,其菜单如下:\n"+str(KFC_memu))
# print("雪顶咖啡" in KFC_memu) # 这里计算出来的结果时False
condition_1 = "雪顶咖啡" in KFC_memu # 判断"雪顶咖啡"是否在KFC菜单里面,condition只会得出True/False,也就对应1/0,这里输出为False,也就是0
if condition_1 == 1:
del KFC_memu["雪顶咖啡"] # 从字典里面删除键值对(必须在里面有)
else:
print("雪顶咖啡不在KFC菜单中")
condition_2 = "纯香燕麦雪顶咖啡" in KFC_memu # 判断"纯香燕麦雪顶咖啡"是否在KFC菜单里面,condition只会得出True/False,也就对应1/0,这里输出为True,也就是1
if condition_2 == 1:
del KFC_memu["纯香燕麦雪顶咖啡"] # 从字典里面删除键值对(必须在里面有)
else:
print("纯香燕麦雪顶咖啡不在KFC菜单中")
length_3 = len(KFC_memu)
print("一共包含"+str(length_3)+"个菜品,其菜单如下:\n"+str(KFC_memu))
如第17行注释所说,不能找出所有黄金鸡块的价格。这个问题目前还不知道怎么解决!
输出结果为:
一共包含12个菜品,其菜单如下:
{('b原味吮指鸡', '5块'): '29.9元', ('a原味吮指鸡', '3块'): '19.9元', ('香骨鸡', '15块'): '19.9元', ('香骨鸡', '8块'): '9.9元', '黄金小酥肉': '9.9元', ('鸡米花', '小份'): '9.9元', ('鸡米花', '大份'): '18.8元', ('黄金鸡块', '20块'): '19.9元', ('黄金鸡块', '10块'): '18.8元', ('葡式蛋挞', '8只'): '29.0元', '爆汁柠桔茶': '9.9元', '纯香燕麦雪顶咖啡': '9.9元'}
b原味吮指鸡5块的价格为:29.9元
一共包含13个菜品,其菜单如下:
{('b原味吮指鸡', '5块'): '29.9元', ('a原味吮指鸡', '3块'): '19.9元', ('香骨鸡', '15块'): '19.9元', ('香骨鸡', '8块'): '9.9元', '黄金小酥肉': '9.9元', ('鸡米花', '小份'): '9.9元', ('鸡米花', '大份'): '18.8元', ('黄金鸡块', '20块'): '19.9元', ('黄金鸡块', '10块'): '18.8元', ('葡式蛋挞', '8只'): '29.0元', '爆汁柠桔茶': '9.9元', '纯香燕麦雪顶咖啡': '9.9元', ('黄金脆皮鸡', '3块'): '28.8元'}
雪顶咖啡不在KFC菜单中
一共包含12个菜品,其菜单如下:
{('b原味吮指鸡', '5块'): '29.9元', ('a原味吮指鸡', '3块'): '19.9元', ('香骨鸡', '15块'): '19.9元', ('香骨鸡', '8块'): '9.9元', '黄金小酥肉': '9.9元', ('鸡米花', '小份'): '9.9元', ('鸡米花', '大份'): '18.8元', ('黄金鸡块', '20块'): '19.9元', ('黄金鸡块', '10块'): '18.8元', ('葡式蛋挞', '8只'): '29.0元', '爆汁柠桔茶': '9.9元', ('黄金脆皮鸡', '3块'): '28.8元'}
输出结果有点长,但是基本实现往字典里添加/删除数据操作,还有一个缺点是字典打印出来连续一长串不怎么美观。
2)字典换行输出
看了这一篇CSDN文章:在 Python 中逐行打印字典的项目,文章中给出了三种方法。
方法一:for循环遍历字典换行输出菜单,最开始和最后面没有花括号
for key, value in KFC_memu.items():
print(key, value)
方法二:pprint换行输出菜单,最开始和最后面还是有花括号
import pprint
pprint.pprint(KFC_memu, width=1, sort_dicts=True)
#sort_dicts=True(默认)表示按照字母表顺序排列,False是则不按照字母表顺序排列
方法三:json.dumps()换行输出菜单,最开始和最后面还是有花括号,且不能输出元组(这个目前还不知道怎么解决)
具体json.dumps()用法参考啦这篇文章:详解Python中对JSON对象的函数操作
import json
print(json.dumps(KFC_memu, skipkeys=True, ensure_ascii=False, indent=4))
# skipkeys=True表示跳过并且不会存储这类key对应的键值对;ensure_ascii=False表示输出不转义成ASCII字符;indent=4就是换行,然后每行缩进4个字符
9、for循环、dictionary字典和format格式结合的一些问题
1)dict字典记录的也就是键值对,第二个必须为值。当时在写的时候下意识地就用双引号括起来了;
# student_grade_point_dict = {"小明": "3.0", "小美": "3.4", "小龙": "3.1"} 这一行是错的
student_grade_point_dict = {"小明": 3.034, "小美": 3.423, "小龙": 3.112} # 这一行才是对的
2)计算dict字典的keys、values、items都是用到的方法,和format类似,都是在结尾加 . 方法 ,千万不要忘记了前面的那个点(我是把点换成了下划线,提示报错);
3)换成在print前面添加 f 的format格式,花括号里面的数据名字不能用索引编号代替。
student_grade_point_dict = {"小明": 3.034, "小美": 3.423, "小龙": 3.112}
for name, point in student_grade_point_dict.items():
print("{0}同学你好,你的学习成绩绩点是{1:.2f}".format(name, point))
# for name, point in student_grade_point_dict.items(): # 这两行是会报错的
# print(f"{0}同学你好,你的学习成绩绩点是{1:.2f}")
for name, point in student_grade_point_dict.items():
print(f"{name}同学你好,你的学习成绩绩点是{point:.2f}")
10、function函数定义def章节的小技巧
1)f + "字符串{ 需要计算的部分 }" 这种格式就可以直接求花括号里面的值,而不用其他函数命令把数据类型变来变去的(str、float、int、none、bool)
2)function函数定义def的内容为函数域的局部变量,出了这个def的缩进定义部分,外部就不能调用其中的变量了,但是在函数def定义的结尾加 return + 需要的局部变量,就可以在外部使用了。