例1. ① 创建一个包含三个字符串元素的列表tech_list,元素分别为“Python,Java,Go”。
② 获取列表中第一个元素,并将其存储在变量first_tech中。
③ 向tech_list的末尾添加一个新的字符串元素“JavaScript”。
④ 修改tech_list中的第二个元素(索引为1),将其从“Java”更改为“Ruby”。
⑤ 移除列表中的元素“Go”。
⑥ 计算当前tech_list的长度,将结果存储在变量currtent_length中。
⑦ 最后,使用f-string分成三行打印出以下信息
第一个技术是:Python
当前列表长度:3
最终列表内容:['Python', 'Ruby', 'JavaScript']
#列表的创建
tech_list = ["Python","Java","Go"]
#列表元素的索引(类似于数组索引,切片也是)
first_tech = tech_list[0]
#列表tech_list中第1个元素使“Python”,是一个字符串,所以first_tech成了一个字符串
#列表元素的修改
#添加
tech_list.append("JavaScript")
#修改第二个元素
tech_list[1] = "Ruby"
#删除:remove(删除列表中第一个出现的指定元素)
tech_list.remove("Go")
#计算列表的长度
current_length = len(tech_list)
#使用f-string分三行格式化输出
#获取到的第一个技术名称
print(f"第一个技术是:{first_tech}")
#列表当前的长度
print(f"当前列表的长度:{current_length}")
#列表最终的内容
print(f"最终列表内容:{tech_list}")
第一个技术是:Python
当前列表的长度:3
最终列表内容:['Python', 'Ruby', 'JavaScript']
【注】(1)在 Python 里调用对象方法的基本形式是 对象名.方法名(参数列表) ,参数列表根据方法定义来确定是否需要以及需要哪些参数。
(2)上述tech_list.append("JavaScript")不能写成tech_list = tech_list.append("JavaScript"),不能理解为赋值,否则会错误,因为tech_list.append("JavaScript")返回值的是None
解释:在 Python 里,部分函数或方法可以直接对对象进行原地修改,无需重新赋值就能改变对象的状态
①需要重新赋值的操作
像数值、字符串、元组这类不可变对象,对它们进行修改时需要重新赋值,因为不可变对象一旦创建,其值就不能被改变,每次修改实际上是创建了一个新的对象。
s = "hello"
print(f"修改前 s 的值: {s},内存地址: {id(s)}")
s = s + " world" # 重新赋值
print(f"修改后 s 的值: {s},内存地址: {id(s)}")
修改前 s 的值: hello,内存地址: 2271489577072
修改后 s 的值: hello world,内存地址: 2271489522416
②原地修改的操作
my_list = [1, 2, 3]
print(f"修改前列表: {my_list},内存地址: {id(my_list)}")
my_list.append(4) # 原地修改,无需重新赋值
print(f"修改后列表: {my_list},内存地址: {id(my_list)}")
修改前列表: [1, 2, 3],内存地址: 2287626506944
修改后列表: [1, 2, 3, 4],内存地址: 2287626506944
#append() 方法直接在原列表末尾添加元素,列表的内存地址没有改变,说明是在原对象上进行修改。
例2. 计算1+2+...+100的和,用for循环来写
sum = 0
for i in range(1,101):
#range(1,101)是一个左闭右开的区间,包含1但不包含101
#不要漏掉冒号
sum += i
#等价于sum = sum + i 笔记P21
print(sum)
5050
例3. 红温预警系统:通过input()函数以提问的方式判断你的红温系数,在输出你可能的反应
1. 提问:①你是否被gank了?(1/0) ②是否被越塔?(1/0) ③我方打野是否是奇迹行者?(1/0) ④是否被队友骂了?(1/0) 输入均为1/0
2. input() 函数返回的是字符串类型的数据,转化为整形依次存储在num1—num4方便后续计算与比较
3. 计算红温系数=num1*20 + num2*20 + num3*20 + num4*30并存储在anger_level中
2. 用if-elif-else结构根据以下条件判断并打印红温信息:
- [90,+oo):打印“警告!警告(兰博声音)!彻底红温1喷4!”
- [70,90):打印“MD不想玩了(捶桌子),洗澡去了”
- [50,70): 打印“摆烂自己玩自己的”
-[30,50):打印“不是哥们儿(阴阳怪气),你在玩什么啊”
-[20,30):打印“心态发生变化”
-[0,20):打印“嘻嘻这游戏真好玩”
be_ganked_or_not = input("你是否被gank了?(1/0)")
bei_yue_ta = input("是否被越塔?(1/0)")
our_jug_qijixingzhe = input("我方打野是奇迹行者吗?(1/0)")
be_scolded_by_teammates = input("是否被队友骂了?(1/0)")
#input()返回的是字符串类型,需要进行类型转换
num1 = int(be_ganked_or_not)
num2 = int(bei_yue_ta)
num3 = int(our_jug_qijixingzhe)
num4 = int(be_scolded_by_teammates)
anger_level = num1*20 + num2*20 + num3*20 + num4*30
if anger_level >= 90:
print("警告!警告(兰博音)!彻底红温1喷4")
elif anger_level >= 70:
print("MD不想玩了(捶桌子),洗澡去了")
elif anger_level >= 50:
print("摆烂自己玩自己的")
elif anger_level >= 30:
print("不是哥们儿(阴阳怪气),你在玩什么啊")
elif anger_level >= 20:
print("心态发生变化")
else:
print("嘻嘻这游戏真好玩")
你是否被gank了?(1/0)1
是否被越塔?(1/0)1
我方打野是奇迹行者吗?(1/0)1
是否被队友骂了?(1/0)1
警告!警告(兰博音)!彻底红温1喷4
【注】关于input()函数
(1)不带提示
# 调用 input() 函数,程序会暂停等待用户输入
user_input = input()
print(f"你输入的内容是: {user_input}")
1
你输入的内容是: 1
(2)带提示
# 提供提示信息,引导用户输入姓名
name = input("请输入你的姓名: ")
print(f"你好,{name}! 欢迎使用本程序。")
请输入你的姓名: faker
你好,faker! 欢迎使用本程序。
(3)连续获得多个输入并将input()返回值转换为其他类型
# 连续获取用户输入的两个数字,并计算它们的和
num1_str = input("请输入第一个数字: ")
num2_str = input("请输入第二个数字: ")
try:
num1 = float(num1_str)
num2 = float(num2_str)
#笔记P13,数据类型转换
result = num1 + num2
print(f"{num1} + {num2} = {result}")
except ValueError:
print("输入无效,请输入有效的数字。")
# - try 块: age = int(age_str) 这行代码尝试把用户输入的字符串 age_str 转换为整数。但如果用户输入的不是有效的整数(比如输入字母、小数等), int() 函数就会抛出 ValueError 异常。
# - except ValueError 块:当 try 块中的 int(age_str) 抛出 ValueError 异常时,程序会跳过 try 块中剩余的代码,转而执行 except 块中的代码,也就是打印 "输入无效,请输入一个有效的整数。" ,这样程序就不会因为异常而崩溃,而是能给用户友好的提示。
请输入第一个数字: 2
请输入第二个数字: 3
2.0 + 3.0 = 5.0
例4. ①定义一个包含整数的列表score,赋值[85,92,78,65,95,88]
②初始化两个变量:excell_count用于记录分数大于等于90的个数,初始值为0;total_score用于累加所有分数,初始值为0。
③使用for循环遍历score列表中每一个分数。
④在训话内部:
a. 将当前分数累加到total_score变量上
b. 使用if语句判断当前分数是否大于等于90,如果是,则将excell_count变量+1.
⑤循环结束后,计算平均分average_score(打印是保留3位小数)
⑥ 使用f-string分三行打印出以下信息
优秀分数个数:2
分数总和:503
平均分数:83.833
score = [85,92,78,65,95,88]
excellent_count = 0
total_count = 0
for i in score:
total_count += i
if i >= 90:
excellent_count += 1
length = len(score)
average_score = total_count / length
print(f"优秀分数(>=90)的个数:{excellent_count}",f"分数总合:{total_count}",f"平均分数:{average_score:.3f}",sep='\n')
优秀分数(>=90)的个数:2
分数总合:503
平均分数:83.833
【注】注意缩进,if语句应该是包含在for循环结构内的,而后面3行又不应该包含在if语句内,不然会出错
@浙大疏锦行