菜鸡自学 Python 笔记(二)

五,结构与语句

1.选择结构—— if 语句

( 1 )格式:

if 表达式:
  语句1
elif 表达式2:
  语句2
……
else:
  语句n

!这里注意

  • 每个条件后面的 冒号 : 不能忘记。
  • Python 用缩进划分语句块,相同缩进为一块,所以这里要严格规范。
  • 在Python中没有switch…case 语句。

下面举个例子:
(表达式是一个布尔值)

# 条件语句
is_hot = False
is_clod = True
if is_hot:  # 注意if的格式
    print("It's a hot day!")
    print("Drink some water.")
# 前面有空格才说明是if下的语句
elif is_clod:
    print("It's a cold day!")
    print("Wear warm clothes.")
else:
    print("It's a lovely day!")
print("Enjoy your day!")  # 这里注意缩进划分语句块

结果
(表达式是一个比较)

age = 19
if age > 18:
    print("You will stay young.")
else:
    print("Hi,girl.")

运行结果
( 2 )if 的嵌套

age = 45
if age > 18:
    if age < 40:
        print("You will stay young.")
    else:
        print('Your mature temperament is fascinating.')
else:
    print("Hi,girl.")

运行结果

2.循环控制语句

(1)while 语句

格式:

while 判断条件:
   语句

(这里同样要注意,冒号和缩进。)

举个例子:

# while循环
i = 1
while i <= 5:
    print(i, end=' ')
    print('*' * i)
    i = i+1
print("Done")

运行结果

while True:  # 表示永远循环
  • 当然,while 还可以和 else 配合使用:
    表示当while语句的条件表达式为False时,执行 else 的语句块。
i = 1
while i < 4:
    print(i, "<4")
    i = i+1
else:
    print(i, "=4")

在这里插入图片描述

(2)for 语句

格式:

for 变量 in 列表或范围 :
  语句

跟 while 一样,for 也可以和 else 结合

for 变量 in 列表或范围 :
  语句
else:
  语句

应用举例:

# for 循环
for item in 'Asu':  # 它会遍历字符串中的每个字符
    print(item, end=' ')
print()
for item in ['Asu', 'Dodo', 'Hi']:  # 遍历列表中的每个字符串
    print(item, end=' ')
print()
for item in [1, 2, 3, 4]:  # 遍历列表中每个数字
    print(item, end=' ') 

在这里插入图片描述
应用range()范围函数

# range()范围函数
for item in range(10):  # 它不是一个列表,它只是一个特殊的类
    print(item, end=' ')  # 输出结果不包括10.(0-9)
    
print()

for item in range(5, 10):
    print(item, end=' ')  # 输出5-9范围
    
print()

for item in range(5, 10, 2):
    print(item, end=' ')  # 输出(5-9)内相隔2的数

    

运行结果

(3)continue 语句与break 语句

continue语句,Python将跳过当前循环块中的剩余语句,继续进行下一轮循环

i = 0
while i <= 5:
    i = i + 1
    if i == 3:
        continue
    print('*' * i)
print("Done")

在这里插入图片描述

而 break 语句是直接跳出循环

i = 0
while i <= 5:
    i = i + 1
    if i == 3:
        break
    print('*' * i)
print("Done")

在这里插入图片描述

六.列表

在Python 中,我们用方括号[ ]来表示列表,用逗号 , 来分割列表的各个元素。

1.列表的定义
  • 列表对象中的元素可以是不同的类型
list = [1, "Asu", 1.11, True]
  • 列表列表对象中的元素可以是另一个列表
list = [1, "Asu", 1.11, True, ["Dodo", 3, 5+3j]]

(索引列表元素:

list = [1, "Asu", 1.11, True, ["Dodo", 3, 5+3j]]
# 元素的索引
print(list[1])
print(list[4][0])

在这里插入图片描述

  • 二维列表
# 二维列表
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[0][1])
for row in matrix:  # 遍历取出二维列表中的元素
    for item in row:
        print(item, end=' ')

在这里插入图片描述

2.列表相关操作(函数)

内置函数

  • len() 函数返回列表的长度
  • max() 函数返回列表中的最大值
  • min() 函数返回列表中的最小值
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(len(numbers))
print(max(numbers))
print(min(numbers))

在这里插入图片描述

方法

  • append( ) 在列表最后加入一个元素
numbers = [5, 4, 6, 1, 9]
numbers.append(20)  # 在列表中加入一个数
print(numbers)

在这里插入图片描述

  • insert( ) 在列表中插入一个元素
numbers = [5, 4, 6, 1, 9]
numbers.insert(1, 10)  # 前为要插入的位子,后是插入的值
print(numbers)

在这里插入图片描述

  • remove() 在列表中消除一个元素
numbers = [5, 4, 6, 1, 9]
numbers.remove(5)  # 消除一个数
print(numbers)

在这里插入图片描述

  • pop( ) 从列表末尾删除元素
numbers = [5, 4, 6, 1, 9]
numbers.pop() 
print(numbers)

在这里插入图片描述

  • index( ) 输出元素所在的位置
numbers = [5, 4, 6, 1, 9]
print(numbers.index(1)) 
#  3
  • clear( ) 删除列表中所有的元素
# 列表操作
numbers = [5, 4, 6, 1, 9]
numbers.clear()  
print(numbers)

在这里插入图片描述

  • count() 计算列表中该元素出现的次数
numbers = [5, 4, 6, 5, 1, 9]
print(numbers.count(5))  # 计算列表中5的个数
# 结果:2
  • sort( )reverse( ) 排序
# 列表操作
numbers = [5, 4, 6, 5, 1, 9]
numbers.sort()  # 排序(升序)
print(numbers)
numbers.reverse()  # 排序(降序)
print(numbers)

在这里插入图片描述

  • copy( ) 复制
    复制出的列表如何改变,原列表始终不发生变化
numbers = [5, 4, 6, 5, 1, 9]
numbers2 = numbers.copy()
numbers2.append(10)
print(numbers)
print(numbers2)

在这里插入图片描述

3.列表操作符 + 和 *

+号用于组合列表
*号用于重复列表

numbers = [1, 2, 3]
numbers2 = [1, 2, 3] + [1, 2, 3]
numbers3 = [1, 2, 3] * 3
print(numbers2)
print(numbers3)

在这里插入图片描述

七.元组

与列表相比,元组的对象不能修改,并且用小括号 ( )来表示元组。一旦修改系统就会报错。

1.元组的创建
numbers = (1, 2, 3)  
num = (1,)

元组的创建非常简单,只需在圆括号内用逗号将元素隔开。

但是,如果创建的元组对象只有一个元素,就必须在元素之后加上逗号,否则Python 会认为这个是赋值操作。

numbers = (1, 2, 3)  
# 元组是不可变的,你改变它就会报错
print(numbers[0])  # 索引
# 但它可以将值存入变量中进行使用
x, y, z = numbers  # 赋值的简便操作

2.元组的相关操作
numbers = (1, 2, 3)  
print(numbers[0])  # 索引
# 结果:1
numbers = (1, 2, 3)
x, y, z = numbers  # 赋值的简便操作
print(x, y, z)
# 结果:1 2 3

虽然元组内的元素值不能被修改,但是可以删除

numbers = (1, 2, 3)
numbers = numbers[0], numbers[2]
print(numbers)
# 结果: (1, 3)

元组的组合

num = (1, 2)
num1 =(4, 5)
print(num + num1)
# 结果: (1, 2, 4, 5)

删除整个元组

num = (1, 2, 3)
del num  # 删除元组
print(num)  # 再次访问时,会报错:未定义num
3.元组的内置函数

元组的 len()函数,max()函数,min()函数都跟列表相似。

  • sum( ) 函数返回元组中所有元素的和
num = (1, 2, 3)
print(sum(num))
# 结果: 6

八.字典

字典是一种可变容器模型,可以储存任意类型的对象。
字典的对象使用大括号{}将元素列出。字典的元素排列并没有一定的顺序,因为可以使用键值来取得元素。

1.定义字典键值

注意点:
(1)同一个键值不能多次出现。
创建时如果同一个键值被赋值多次,那么只有最后一个有效,前面重复的会被删除。

people = {
    "name": 'Asu',
    "age": 19,  # 字典中的键值是唯一的
    "is_beautiful": False,
    "age": 18
}
print(people)

结果
(2)字典的键值不可变,所有可以用数字,字符串或元组充当,列表不可以。否则,会报错。

2.字典的相关操作

访问:

# 字典存储键值
people = {
    "name": 'Asu',
    "age": 19,  # 字典中的键值是唯一的
    "is_beautiful": False
}
print(people["name"])
# 输出:Asu

# 访问字典中不存在的键值时,系统会报错
print(people.get("Name"))  # 但该方法在我们输入字典中不存在的值时,不会报错
# 输出: None

print(people.get("birthdate", "9 23"))  # 也可以这样访问不存在的键值,并输出后半部分内容
# 输出: 9 23

键值的更新:

# 字典存储键值
people = {
    "name": 'Asu',
    "age": 19,  # 字典中的键值是唯一的
    "is_beautiful": False
}

#  键值也可以进行更新
people["name"] = "Dodo"  # 改动
print(people["name"])
people["birthdate"] = "9 23"  # 新建
print(people["birthdate"])

在这里插入图片描述

接下来搞个有趣的实例:

# 字典实列(映射)
message = input(">")
words = message.split(' ')  # 将输入的句子拆分成一个个单词
emojis = {
    ":)": "😊",
    ":(": "😢"
}
output =""
for word in words:
    output += emojis.get(word, word) + " "  # 用get()来输出默认值
print(output)

在这里插入图片描述

3.字典的内置函数和方法

内置函数
(1)len() 计算字典元素个数
(2)str() 将字典的元素转化为可打印的字符串形式
(3)type() 返回输入的变量类型

people = {
    "name": 'Asu',
    "age": 19,
    "is_beautiful": False
}
print(len(people))
print(str(people))

在这里插入图片描述
方法
(1)clear() 清除字典中的所有元素
(2)copy() 复制字典
(3) pop() 删除字典中的最后一个元素
与列表相似,可以参考列表。

(4)get(k,d) k是字典的索引值,d是索引值的默认值。如果k存在,就返回其值,否则返回d。

people = {
    "name": 'Asu',
    "age": 19,  # 字典中的键值是唯一的
    "is_beautiful": False
}


# 访问字典中不存在的键值时,系统会报错
print(people.get("Name"))  # 但该方法在我们输入字典中不存在的值时,不会报错
# 输出: None

print(people.get("birthdate", "9 23"))  # 也可以这样访问不存在的键值,并输出后半部分内容
# 输出: 9 23

(5)items() 使用字典中的元素创建一个由元组对象组成的列表。

people = {
    "name": 'Asu',
    "age": 19,
    "is_beautiful": False
}
print(people.items())

在这里插入图片描述
(6)keys() 使用字典中的键值创建一个列表对象

people = {
    "name": 'Asu',
    "age": 19,
    "is_beautiful": False
}
print(people.keys())

在这里插入图片描述
(7)values() 用字典中的键值的数值创建一个列表对象

people = {
    "name": 'Asu',
    "age": 19,
    "is_beautiful": False
}
print(people.values())

在这里插入图片描述

(8)setdefault(k,d) k是字典的键值,d是键值的默认值。如果k存在就返回其值;否则返回d,并将新的元素添加到字典中。

people = {
    "name": 'Asu',
    "age": 19,
    "is_beautiful": False
}
print(people.setdefault("name"))
print(people.setdefault("Name", "Dodo"))
print(people)

在这里插入图片描述
(9)update() 更新字典

people = {
    "name": 'Asu',
    "age": 19,
    "is_beautiful": False
}
people.update({"is_rich": "False"})
# 括号里的应该为一个对象
print(people)

在这里插入图片描述

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
这是一个经典的问题,也称为“狼、羊、菜和农夫过河问题”。在这个问题中,农夫需要带着一只狼、一只羊和一些菜过河,但是船只只能容纳农夫和另外一只物品。如果农夫不在场,狼会吃羊,羊会吃菜。因此,农夫需要找到一种方法,使得所有物品都能安全地过河。 以下是一个简单的Python实现,其中使用了深度优先搜索算法来解决问题: ``` # 定义初始状态和目标状态 start_state = ['left', 'left', 'left', 'left'] goal_state = ['right', 'right', 'right', 'right'] # 定义有效状态 def is_valid(state): if state[0] != state[1] and state[1] != state[2]: return True return False # 定义搜索函数 def dfs(state, path): if state == goal_state: return path for i in range(8): new_state = state.copy() if i == 0: new_state[3] = 'right' if new_state[3] == 'left' else 'left' elif i == 1: if new_state[3] == new_state[0]: new_state[1] = 'right' if new_state[1] == 'left' else 'left' new_state[3] = 'right' if new_state[3] == 'left' else 'left' elif i == 2: if new_state[3] == new_state[1]: new_state[0] = 'right' if new_state[0] == 'left' else 'left' new_state[3] = 'right' if new_state[3] == 'left' else 'left' elif i == 3: if new_state[3] == new_state[2]: new_state[2] = 'right' if new_state[2] == 'left' else 'left' new_state[3] = 'right' if new_state[3] == 'left' else 'left' elif i == 4: if new_state[3] == 'right': new_state[3] = 'left' elif i == 5: if new_state[3] == new_state[0]: new_state[1] = 'right' if new_state[1] == 'left' else 'left' new_state[3] = 'right' if new_state[3] == 'left' else 'left' elif i == 6: if new_state[3] == new_state[1]: new_state[0] = 'right' if new_state[0] == 'left' else 'left' new_state[3] = 'right' if new_state[3] == 'left' else 'left' elif i == 7: if new_state[3] == new_state[2]: new_state[2] = 'right' if new_state[2] == 'left' else 'left' new_state[3] = 'right' if new_state[3] == 'left' else 'left' if is_valid(new_state) and new_state not in path: new_path = dfs(new_state, path + [new_state]) if new_path: return new_path return None # 执行搜索并输出结果 result = dfs(start_state, [start_state]) if result: for state in result: print(state) else: print('No solution found.') ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值