B站python爬虫课程笔记(Q6-10)

下面是学习的网址:

​​​​​​【Python+爬虫】

目录

6、if...elif...else条件语句的一些问题

1)条件语句需要注意的地方

2)换行需要注意的地方

7、list列表的一些问题

1)列表里数据类型、打印、append方法的问题

 2)max、min、sorted方法的问题

3)布尔量True和整数1的一些问题

8、dictionary字典的一些问题

1)无法输出所有“张伟”但是不同“年龄”的联系方式

2)字典换行输出

 9、for循环、dictionary字典和format格式结合的一些问题

10、function函数定义def章节的小技巧


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 + 需要的局部变量,就可以在外部使用了。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值