Python从入门到实战学习笔记(一)

发布于:2025-06-22 ⋅ 阅读:(12) ⋅ 点赞:(0)

Python版本:3.8.8

文本编辑器:Pycharm

1.起步

(1)安装Python以及文本编辑器

(2)从终端运行Python程序,输出  hello world!!

在命令窗口中,可以使用终端命令cd (表示change directory,即切换目录 )在文件系统中导航。使用命令dir (表示directory,即目录 )可以显示当前目录中的所有文件。

为运行程序hello_world.py,请打开一个新的终端窗口,并执行下面的命令(我的.py文件放在了D:\rural_courtyard):

C:\Users\22445>D:

D:\>cd rural_courtyard

D:\rural_courtyard>python Hello_world.py
hello world!!

D:\rural_courtyard>

2.变量和简单数据类型

修改初始代码,加一个变量:原始结果不变。

message = "Hello Python world!"
print(message)

2.2.1 变量的命名和使用

请务必牢记下述有关变量的规则。

  • 变量名只能包含字母、数字和下划线。变量名能以字母或下划线打头,但不能以数字打头。例如,可将变量命名为message_1 ,但不能将其命名为1_message 。
  • 变量名不能包含空格,但能使用下划线来分隔其中的单词。例如,变量名greeting_message 可行,但变量名greeting message 会引发错误。
  • 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print (请参见附录A.4)。
  • 变量名应既简短又具有描述性。例如,name 比n 好,student_name 比s_n 好,name_length 比length_of_persons_name 好。
  • 慎用小写字母l 和大写字母O ,因为它们可能被人错看成数字1 和0 。

变量常被描述为可用于存储值的盒子。一种好得多的定义是,变量是可以赋给值的标签,也可以说变量指向特定的值。

字符串 就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号.

(1)使用方法修改字符串的大小写

在函数调用print() 中,方法title() 出现在这个变量的后面。方法 是Python可对数据执行的操作。在name.title() 中,name 后面的句点(. )让Python对变量name 执行方法title() 指定的操作。每个方法后面都跟着一对圆括号,这是因为方法通常需要额外的信息来完成其工作。这种信息是在圆括号内提供的。函数title() 不需要额外的信息,因此它后面的圆括号是空的。

方法title() 以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。这很有用,因为你经常需要将名字视为信息。还有其他几个很有用的大小写处理方法。例如,要将字符串改为全部大写或全部小写.

message_1 = "hello python world"
print(message_1.title())   # 首字母大写
print(message_1.upper())   # 全部大写
print(message_1.lower())   # 全部小写

结果:
Hello Python World
HELLO PYTHON WORLD
hello python world

(2)在字符串中使用变量

要在字符串中插入变量的值,可在前引号前加上字母f ,再将要插入的变量放在花括号内。这样,当Python显示字符串时,将把每个变量都替换为其值。这种字符串名为f字符串 。f是format(设置格式)的简写,因为Python通过把花括号内的变量替换为其值来设置字符串的格式。

message_1 = "hello "
message_2 = "world"
message_3 = f"{message_1}{message_2}"
print(message_3)

结果 :
hello world

(3)使用制表符或换行符来添加空白

在编程中,空白 泛指任何非打印字符,如空格、制表符和换行符。

① 要在字符串中添加制表符,可使用字符组合\t 

  >>> print("Python")
  Python
❶ >>> print("\tPython")
      Python

② 要在字符串中添加换行符,可使用字符组合\n :

>>> print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript

③删除空白

在程序中,额外的空白可能令人迷惑。对程序员来说,'python' 和'python ' 看起来几乎没什么两样,但对程序来说,它们却是两个不同的字符串。Python能够发现'python ' 中额外的空白,并认为它意义重大——除非你告诉它不是这样的。Python能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip() 。

❶ >>> favorite_language = 'python '
❷ >>> favorite_language
  'python '
❸ >>> favorite_language.rstrip()
  'python'
❹ >>> favorite_language
  'python '

与变量favorite_language 相关联的字符串末尾有多余的空白(见❶)。你在终端会话中向Python询问这个变量的值时,可看到末尾的空格(见❷)。对变量favorite_language 调用方法rstrip() 后(见❸),这个多余的空格被删除了。然而,这种删除只是暂时的,接下来再次询问favorite_language 的值时,你会发现这个字符串与输入时一样,依然包含多余的空白(见❹)。

要永久删除这个字符串中的空白,必须将删除操作的结果关联到变量:

  >>> favorite_language = 'python '
❶ >>> favorite_language = favorite_language.rstrip()
  >>> favorite_language
  'python'
# 剔除字符串开头的空白,或者同时剔除字符串两边的空白。分别使用方法lstrip() 和strip() :
❶ >>> favorite_language = ' python '
❷ >>> favorite_language.rstrip()
  ' python'
❸ >>> favorite_language.lstrip()
  'python '
❹ >>> favorite_language.strip()
  'python'

(1)整数、浮点数

在Python中,可对整数执行加(+ )减(- )乘(* )除(/ )运算。

  1. 在终端会话中,Python直接返回运算结果。Python使用两个乘号表示乘方运算;
  2. Python将所有带小数点的数称为浮点数 。但需要注意的是,结果包含的小数位数可能是不确定的。
  3. 将任意两个数相除时,结果总是浮点数,即便这两个数都是整数且能整除。
  4. 在其他任何运算中,如果一个操作数是整数,另一个操作数是浮点数,结果也总是浮点数。
  5. 无论是哪种运算,只要有操作数是浮点数,Python默认得到的总是浮点数,即便结果原本为整数也是如此。
>>> 3**2
9
>>> 0.1+0.2
0.30000000000000004
>>> 1+0.1
1.1
>>> 4/2
2.0

(2)数中的下划线

书写很大的数时,可使用下划线将其中的数字分组,使其更清晰易读,当你打印这种使用下划线定义的数时,Python不会打印其中的下划线。这是因为存储这种数时,Python会忽略其中的下划线。将数字分组时,即便不是将每三位分成一组,也不会影响最终的值。在Python看来,1000 与1_000 没什么不同,1_000 与10_00 也没什么不同。

>>> count=123_321_000
>>> print(count)
123321000
>>>

(2)同时给多个变量赋值

可在一行代码中给多个变量赋值,这有助于缩短程序并提高其可读性。

>>> x, y, z = 0, 0, 0

(3)常量

常量 类似于变量,但其值在程序的整个生命周期内保持不变。Python没有内置的常量类型,但Python程序员会使用全大写来指出应将某个变量视为常量,其值应始终不变.

MAX_CONNECTIONS = 5000

在代码中,要指出应将特定的变量视为常量,可将其字母全部大写。

  1. 在Python中,注释用井号(# )标识。井号后面的内容都会被Python解释器忽略。

列表 由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。列表通常包含多个元素,因此给列表指定一个表示复数的名称(如letters 、digits 或names )是个不错的主意。

在Python中,用方括号([] )表示列表,并用逗号分隔其中的元素。下面是一个简单的列表示例,其中包含几种自行车,如果让Python将列表打印出来,Python将打印列表的内部表示,包括方括号:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

结果:
['trek', 'cannondale', 'redline', 'specialized']

(1)访问列表元素

列表是有序集合,因此要访问列表的任意元素,只需将该元素的位置(索引 )告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将后者放在方括号内。

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = f"My first bicycle was a {bicycles[0].title()}."  # 使用bicycles[0] 的值生成了一个句子,并将其赋给变量message
print(bicycles[0])     # 索引从0而不是1开始
print(bicycles[-1])    # 访问最后一个列表元素,索引-2 返回倒数第二个列表元素,索引-3 返回倒数第三个列表元素,依此类推
print(message)

结果:
trek
specialized
My first bicycle was a Trek.
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles[0] = 'ducati'
print(motorcycles)

(2)在列表中添加元素

在列表中添加新元素时,最简单的方式是将元素附加 (append)到列表。给列表附加元素时,它将添加到列表末尾。方法append() 将元素'ducati' 添加到列表末尾(见❶),而不影响列表中的其他所有元素.

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles.append('ducati')
print(motorcycles)

结果:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

方法append() 让动态地创建列表易如反掌。例如,你可以先创建一个空列表,再使用一系列函数调用append() 来添加元素。下面来创建一个空列表,再在其中添加元素'honda' 、'yamaha' 和'suzuki' :

motorcycles = []

motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')

print(motorcycles)

结果:
['honda', 'yamaha', 'suzuki']

(3)在列表中插入元素

使用方法insert() 可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值。方法insert() 在索引0 处添加空间,并将值'ducati' 存储到0位置。

motorcycles = []

motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')

motorcycles.insert(0, 'ducati')
print(motorcycles)
结果:
['ducati', 'honda', 'yamaha', 'suzuki']

使用del 语句删除元素

如果知道要删除的元素在列表中的位置,可使用del 语句。

②使用方法pop() 删除元素

术语弹出 (pop)源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

del motorcycles[0]
print(motorcycles)
motorcycles_pop=motorcycles.pop()
print(motorcycles_pop)

结果:
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
suzuki

③弹出列表中任何位置处的元素

实际上,可以使用pop() 来删除列表中任意位置的元素,只需在圆括号中指定要删除元素的索引即可。如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del 语句;如果你要在删除元素后还能继续使用它,就使用方法pop() 。

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles_pop=motorcycles.pop(0)
print(motorcycles_pop)

结果:
['honda', 'yamaha', 'suzuki']
honda

根据值删除元素

有时候,你不知道要从列表中删除的值所处的位置。如果只知道要删除的元素的值,可使用方法remove() 。

注意  方法remove() 只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来确保将每个值都删除。

motorcycles = ['honda', 'yamaha', 'suzuki','ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)

结果:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

(1)使用方法sort() 对列表永久排序

方法sort() 让你能够较为轻松地对列表进行排序。按字母顺序排列的,再也无法恢复到原来的排列顺序,还可以按与字母顺序相反的顺序排列列表元素,只需向sort() 方法传递参数reverse=True 即可。

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
cars.sort(reverse=True)
print(cars)

结果:
['audi', 'bmw', 'subaru', 'toyota']
['toyota', 'subaru', 'bmw', 'audi']

(2)使用函数sorted() 对列表临时排序

要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted() 。函数sorted() 让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
print(sorted(cars))
print(cars)

结果:
['bmw', 'audi', 'toyota', 'subaru']
['audi', 'bmw', 'subaru', 'toyota']
['bmw', 'audi', 'toyota', 'subaru']

注意  在并非所有的值都是小写时,按字母顺序排列列表要复杂些。决定排列顺序时,有多种解读大写字母的方式,要指定准确的排列顺序,可能比我们这里所做的要复杂。然而,大多数排序方式是以本节介绍的知识为基础的。

reverse() 不是按与字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序:

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)

结果:
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']

(4)确定列表的长度

使用函数len() 可快速获悉列表的长度。

magicians = ['alice', 'david', 'carolina']
for magician in magicians: #让Python获取列表magicians 中的第一个值'alice' ,并将其与变量magician 相关联
    print(magician)


结果:
alice
david
carolina

刚开始使用循环时请牢记,对列表中的每个元素,都将执行循环指定的步骤,而不管列表包含多少个元素。如果列表包含一百万个元素,Python就重复执行指定的步骤一百万次,且通常速度非常快。

(1)在for 循环结束后执行一些操作

开头两个函数调用print() 针对列表中的每位魔术师重复执行。然而,第三个函数调用print() 没有缩进,因此只执行一次

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(f"{magician.title()}, that was a great trick!")
    print(f"I can't wait to see your next trick, {magician.title()}.\n")

print("Thank you, everyone. That was a great magic show!")



结果:

Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

Thank you, everyone. That was a great magic show!

(1)忘记缩进

对于位于for 语句后面且属于循环组成部分的代码行,一定要缩进。

(2)忘记缩进额外的代码行

有时候,循环能够运行且不会报告错误,但结果可能出人意料。试图在循环中执行多项任务,却忘记缩进其中的一些代码行时,就会出现这种情况。

Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

Thank you, everyone. That was a great magic show!

这是一个逻辑错误 。从语法上看,这些Python代码是合法的,但由于存在逻辑错误,结果并不符合预期。如果你预期某项操作将针对每个列表元素都执行一次,但它总共只执行了一次,请确定需要将一行还是多行代码缩进。

(3)不必要的缩进

为避免意外缩进错误,请只缩进需要缩进的代码。在前面编写的程序中,只有要在for 循环中对每个元素执行的代码需要缩进。

(4)循环后不必要的缩进

如果不小心缩进了应在循环结束后执行的代码,这些代码将针对每个列表元素重复执行。

(5)遗漏了冒号

for 语句末尾的冒号告诉Python,下一行是循环的第一行。

(1)使用函数range()

Python函数range() 让你能够轻松地生成一系列数。

for value in range(1, 5):
    print(value)

结果:
1
2
3
4

在这个示例中,range() 只打印数1~4。这是编程语言中常见的差一行为的结果。函数range() 让Python从指定的第一个值开始数,并在到达你指定的第二个值时停止。因为它在第二个值处停止,所以输出不包含该值(这里为5)。

使用range() 时,如果输出不符合预期,请尝试将指定的值加1或减1。

调用函数range() 时,也可只指定一个参数,这样它将从0开始。例如,range(6) 返回数0~5。

    (2)使用range() 创建数字列表

    要创建数字列表,可使用函数list() 将range() 的结果直接转换为列表。如果将range() 作为list() 的参数,输出将是一个数字列表。

    numbers = list(range(1, 6))
    print(numbers)
    
    结果:
    [1, 2, 3, 4, 5]

    使用函数range() 时,还可指定步长。为此,可给这个函数指定第三个参数,Python将根据这个步长来生成数。

    even_numbers = list(range(2, 11, 2))
    #结果就是2~10的偶数

    如下代码是先创建了空列表,然后运算平方,再把平方后的数值附加到列表末尾,最后输出。

    squares = []
    for value in range(1, 11):
        square = value ** 2
        squares.append(square)
    print(squares)
    
    结果:
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    (3)对数字列表执行简单的统计计算

    有几个专门用于处理数字列表的Python函数。例如,你可以轻松地找出数字列表的最大值、最小值和总和:

    >>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    >>> min(digits)
    0
    >>> max(digits)
    9
    >>> sum(digits)
    45
    

    (4)列表解析

    前面介绍的生成列表squares 的方式包含三四行代码,而列表解析让你只需编写一行代码就能生成这样的列表。列表解析 将for 循环和创建新元素的代码合并成一行,并自动附加新元素。

    squares = [value**2 for value in range(1, 11)]
    print(squares)

    要使用这种语法,首先指定一个描述性的列表名,如squares 。然后,指定一个左方括号,并定义一个表达式,用于生成要存储到列表中的值。在这个示例中,表达式为value**2 ,它计算平方值。接下来,编写一个for 循环,用于给表达式提供值,再加上右方括号。在这个示例中,for 循环为for value in range(1,11) ,它将值1~10提供给表达式value**2 。请注意,这里的for 语句末尾没有冒号。

    在第3章中,学习了如何访问单个列表元素。在本章中,学习如何处理列表的所有元素。还可以处理列表的部分元素,Python称之为切片 。

    (1)切片

    要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达第二个索引之前的元素后停止。要输出列表中的前三个元素,需要指定索引0和3,这将返回索引为0、1和2的元素。

    players = ['charles', 'martina', 'michael', 'florence', 'eli']
    print(players[0:3])
    
    结果:
    ['charles', 'martina', 'michael']

    如果没有指定第一个索引,Python将自动从列表开头开始。

    要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第三个元素到列表末尾的所有元素,可将起始索引指定为2 ,并省略终止索引,Python将返回从第三个元素到列表末尾的所有元素,无论列表多长,这种语法都能够让你输出从特定位置到列表末尾的所有元素。

    players = ['charles', 'martina', 'michael', 'florence', 'eli']
    print(players[2:])
    
    结果:
    ['michael', 'florence', 'eli']

    上一章说过,负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任意切片。例如,如果要输出名单上的最后三名队员,可使用切片players[-3:] 。

    注意  可在表示切片的方括号内指定第三个值。这个值告诉Python在指定范围内每隔多少元素提取一个。(步长)

    (2)遍历切片

    如果要遍历列表的部分元素,可在for 循环中使用切片。

    players = ['charles', 'martina', 'michael', 'florence', 'eli']
    for player in players[:3]:
        print(player.title())
    
    结果:
    Charles
    Martina
    Michael

    (3)复制列表

    我们经常需要根据既有列表创建全新的列表。

    要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:] )。这让Python创建一个始于第一个元素、终止于最后一个元素的切片,即整个列表的副本

    players = ['charles', 'martina', 'michael', 'florence', 'eli']
    players_1=players[:]
    print(players_1)
    
    结果:
    ['charles', 'martina', 'michael', 'florence', 'eli']

    如果直接用players=players_1,这个行不通。

    列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组 。

    (1)定义元组

    元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可使用索引来访问其元素,就像访问列表元素一样。

    dimensions = (200, 50)
    print(dimensions[0])
    print(dimensions[1])
    
    结果:
    200
    50

    如果 dimensions[0] = 250,会出现错误,因为元组是不可变的列表

    注意  严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号(my_t = (3,)).创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。

    像列表一样,也可以使用for 循环来遍历元组中的所有值,就像遍历列表时一样,Python返回元组中所有的元素.

    dimensions = (200, 50)
    for dimension in dimensions:
        print(dimension)

    (3)修改元组变量

    虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组.

    首先定义一个元组,并将其存储的尺寸打印出来。接下来,将一个新元组关联到变量dimensions。然后,打印新的尺寸。这次,Python不会引发任何错误,因为给元组变量重新赋值是合法的。

    dimensions = (200, 50)
    for dimension in dimensions:
        print(dimension)
    dimensions=(20,10)
    for dimension in dimensions:
        print(dimension)
    
    结果:
    200
    50
    20
    10

    相比于列表,元组是更简单的数据结构。如果需要存储的一组值在程序的整个生命周期内都不变,就可以使用元组。

    随着你编写的程序越来越长,有必要了解一些代码格式设置约定。请花时间让你的代码尽可能易于阅读。这有助于你掌握程序是做什么的,也可以帮助他人理解你编写的代码。

    为确保所有人编写的代码结构都大致一致,Python程序员会遵循一些格式设置约定。学会编写整洁的Python后,就能明白他人编写的Python代码的整体结构——只要他们和你遵循相同的指南。要成为专业程序员,应从现在开始就遵循这些指南,以养成良好的习惯。

      要提出Python语言修改建议,需要编写Python改进提案 (Python Enhancement Proposal,PEP)。PEP 8 是最古老的PEP之一,向Python程序员提供了代码格式设置指南。PEP 8的篇幅很长,但基本上与复杂的编码结构相关。

      (1)缩进:PEP 8建议每级缩进都使用四个空格。这既可提高可读性,又留下了足够的多级缩进空间。

      (2)行长:很多Python程序员建议每行不超过80字符。

      (3)空行:要将程序的不同部分分开,可使用空行。你应该使用空行来组织程序文件,但也不能滥用。只要按本书的示例展示的那样做,就能掌握其中的平衡。例如,如果你有五行创建列表的代码,还有三行处理该列表的代码,那么用一个空行将这两部分隔开是合适的。然而,你不应使用三四个空行将其隔开空行不会影响代码的运行,但会影响代码的可读性。Python解释器根据水平缩进情况来解读代码,但不关心垂直间距。