Python从入门到精通——1. 1 Python介绍及语法元素基础知识(快速上手)

Dunm1e Lv3

前言

“人生苦短,快用Python”

本文是python语法的一套教程,主要目的是为了之后的AI学习,能够看懂代码,并且能够自己修改参数和优化算法。

看完本文能够让你对Python语法有一定了解,如果你是零基础的新手,能够让你入门python,但是本文可能不适合老油条进行学习。本套教程是一系列Python的基础语法以及一些基本算法的了解和动手联系。本套Python教程会持续较长一段时间的更新。请持续关注!!!

本套教材主要是通过conda虚拟环境和Jupyter Notebook进行配套学习,也可以使用PyCharm进行学习,Jupyter适合多段任务。

Python介绍

Python的设计哲学是“优雅”、“明确”、“简单”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。

对于一个特定的问题,只要有一种最好的方法来解决
这在由Tim Peters写的Python格言(称为The Zen of Python)里面表述为:There should be one-and preferably only one-obvious way to do it。

Python是一门相较于其他语言比较好入门的语言,并且也是当前人工智能相关领域的主流语言。Python是一门面向对象编程 的语言,Python在各个编程语言中比较适合新手学习,Python解释器易于扩展,可以使用C、C++或其他可以通过C调用的语言扩展新的功能和数据类型。 Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

Python秉承着开源精神,一个显著的特征就是有很多包、库可以进行导入并且调用,也可以导入自己写的程序包进行调用,出名的包不仅能让代码更加规范,也让进行一些训练任务更加简洁方便。

参考资料:

  1. 《Python编程:从入门到实践》(通俗易懂,电子书下载
  2. ***Python - 100天从新手到大师 ***(github上的王中王)
  3. Python官方文档(适合入门和精进)

*首先需要了解一个概念:Python中代码的层级是通过缩进来确定的,比如你利用一个for循环,那么for循环里面的代码相对于for循环的标志是要多一个tab缩进的,也就是多四个空格

本节的核心:如何输出Hello World!

准备好了,我们正式开始教程

1
print"Hello World!"

1. 变量

1.1 变量的介绍

首先我们先看看变量的好处
比如我们要记录一个值:

1
num = 888

我们要将一个整数888进行运算,但是如果每次都使用888,那么会降低代码的复用性,而我们用一个变量来保存这个数字,那么就可以重复利用,也可以方便改变变量的值来进行计算。这样就可以让代码之间进行联系。
当然变量可以保存各种类型的数据,包括字符串和浮点数(可以先理解为小数,后面会详细解释)等。

1.2 变量的规则

但是变量的命名是有一定规则的,我们先列出所有规则,然后一一举例:

  • 变量名只能包含字⺟、数字和下划线 。变量名能以字⺟或下划线打 头,但不能以数字打头。例如,可将变量命名为 message_1,但不能 将其命名为 1_message。
  • 变量名不能包含空格,但能使⽤下划线来分隔其中的单词。例如,变 量名 greeting_message 可⾏,但变量名 greeting message 会 引发错误。
  • 不要将 Python 关键字和函数名⽤作变量名。例如,不要将 print ⽤作 变量名,因为它被 Python 留作特殊⽤途(请参⻅附录 A.4)。
  • 变量名应既简短⼜具有描述性。例如,name ⽐ n 好, student_name ⽐ s_n 好,name_length ⽐ length_of_persons_name 好。
  • 慎⽤⼩写字⺟ l 和⼤写字⺟ O,因为它们可能被⼈错看成数字 1 和 0。
    ps:在Python3中,变量名甚至可以用中文,但是不推荐这样做,应该创建通俗易懂的变量名,比如利用英文翻译你的中文来作为变量名。

    以上参考《Python编程:从入门到实践》

变量可以理解为一个数据或内容的标签,你可以通过标签找到存在里面的内容,并且你可以修改内容的标签,以便人类来进行理解。

下面举两个例子

1
2
message = "I Love Python"
print(message)

image.png

1
2
3
4
5
6
7
8
9
10
11
a = 123
b = 321
c = 7
d = 88
print(a+b)
print(c*d)
c = 77
print(c*d)
print(b-d)
print(c)
print(c/7)

image.png

2. 字符串

2.1 字符串的介绍

字符串是一系列用单引号或者双引号引起来的字符组成的,但是个人建议字符串用双引号,单个字符用单引号。比如'h'"hello".(ps:但是在Python中是不支持单字符的,这里只是为了看起来方便,Python中单个字符也是看成一个字符串
我们来看一下字符串的输出方式,首先字符串可以利用变量储存起来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
str1 = "Hello"

str2 = "Python"

str3 = "World"

num1 = 666

print(str1,str2,str3)

print(str1 + " " + str2 + " " + str3)

print(str1+"666"+str2+"777"+str3)

print(str1 + str2 + str3)

print(str1+str2+str3)

print(f"{str2}{num1}")

print(f"Hello {str2.upper()}")

image.png

2.2 关于字符串的函数

以下提前介绍几个关于字符串的函数,这里只是提前了解,具体函数的讲解在之后的文章。
(1)title()函数
这个函数就是让字符串的每个单词首字母大写。
举例如下:

1
2
3
str = "hello python"

print(str.title())

image.png
(2)upper()lower()函数
这两个函数是相反的作用,upper()是让所有字母大写,lower()是让所有字母小写
举例如下:

1
2
3
4
5
6
7
str1 = "hello"

str2 = "PYTHON"

print(str1.upper())

print(str2.lower())

image.png

2.3 字符串的输出

可以看到如上几种输出方式,一般字符串变量之间利用,连接,然后之间也可以自己穿插字符串,如果利用+连接,那么字符串之间是没有空格的,需要自己加上" "作为空格。f""为Python的标准化输出,如果要引用变量需要用{}大括号括起来,表示里面是变量名,{}里面还可以将数字来进行计算然后作为输出

ps: 这里的反斜杠"\"是转义字符,加上后面跟着的符号会转义为一个操作,或者在标准化输出中,会直接进行输出,否则会报错。比如想输出一个双引号",但是由于输出字符外面也是用的双引号,当你这样运行时系统会报错:你的双引号没有闭上,就是只有前引号而没有后引号,所以需要加上转义字符,代表你想单独输出这个符号。
具体的例子可以自己在编辑器试一下,这里不详细给出

下面是转义字符的表格

转义字符 描述
\(在行尾时) 续行符
\ 反斜杠符号
\` 单引号
\“ 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,y 代表 0~7 的字符,例如:\012 代表换行
\xyy 十六进制数,以 \x 开头,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

我们可以利用制表符"\t"和换行符符"\n"来制造空白(制表可用)和换行
比如:

1
2
3
print("Hello\nPython")
print("\n")
print("Hello\tPython")

image.png
image.png

2.3 字符串的练习

以下题目可以进行练习,后面会给出答案:

题目来源:《Python编程:从入门到实践》

练习1.1. 个性化消息 ⽤变量表⽰⼀个⼈的名字,并向其显⽰⼀条消息。显⽰的消息应⾮常简单,如下所⽰。
Hello Eric, would you like to learn some Python today?

练习1.2. 调整名字的⼤⼩写 ⽤变量表⽰⼀个⼈的名字,再分别以全⼩写、全⼤写和⾸字⺟⼤写的⽅式显⽰这个⼈名。

练习1.3. 名⾔ 1 找到你钦佩的名⼈说的⼀句名⾔,将这个名⼈的姓名和名⾔打印出来。输出应类似于下⾯这样(包括引号)。
Albert Einstein once said, “A person who never made a mistake never tried anything new.”

练习1.4. 名⾔ 2 重复练习 1.3,但⽤变量 famous_person 表⽰名⼈的姓名,再创建要显⽰的消息并将其赋给变量 message,然后打印这条消息。

答案如下:
练习1.1

1
2
3
name = "Eric"

print(f"Hello {name}, would you like to learn some Python today?")

练习1.2

1
2
3
4
5
6
7
name = "Eric"

print(name.lower())

print(name.upper())

print(name.title())

练习1.3

1
print("Albert Einstein once said, A person who never made a mistake never tried anything new")

练习1.4

1
2
3
4
5
name = "Albert Einstein"

message = "A person who never made a mistake never tried anything new."

print(f"{name} once said, \"{message}\"")

3. 数

3.0 运算符

算术运算符

运算符 描述
[] [:] 下标,切片
** 指数
~ + - 按位取反, 正负号
* / % // 乘,除,模,整除
+ - 加,减
>> << 右移,左移
& 按位与
^ | 按位异或,按位或`
<= < > >= 小于等于,小于,大于,大于等于
== != 等于,不等于
is is not 身份运算符
in not in 成员运算符
not or and 逻辑运算符
= += -= *= /= %= //= **= &= ` = ^= >>= <<=`

ps:实际开发中,一般用括号来确定运算优先级

赋值运算符

赋值运算符时最常见的运算符,无论是前面的变量赋值还是后面的运算赋值,都是必不可少的运算符。
赋值运算符中有一类叫复合赋值运算符,可以理解为在赋值前进行一次运算

1
2
3
4
5
a = 10
b = 3
a += b # 相当于:a = a + b
a *= a + 2 # 相当于:a = a * (a + 2)
print(a) # 算一下这里会输出什么

比较运算符和逻辑运算符

比较运算符也称为关系运算符,包括==!=<><=>=,就是用来比较符号两边的关系。注意其中的==,这是两个等号,用来比较两者是否相等,请与赋值运算符区别。比较运算符的返回结果是一个布尔值,True或者False

逻辑运算符有三个,分别为and,or,not。相信学过其他语言的同学都会知道是什么意思,and需要两边的结果的布尔值都是True结果才为True,否则就是Falseor则只需有一个布尔值为True结果就为True,否则就是False。而not则是取反,也就是说,后面的布尔值如果是True运算结果就是False,而后面的布尔值如果是False则运算结果就是True

ps:当and的左边布尔值为False,不管右边的值,将会直接返回False,跳过处理右边。(这叫短路处理)。同理or也是有短路处理的功能的,当左边为True时,会直接跳过右边的表达式。

1
2
3
4
5
6
7
8
9
10
11
12
flag0 = 1 == 1
flag1 = 3 > 2
flag2 = 2 < 1
flag3 = flag1 and flag2
flag4 = flag1 or flag2
flag5 = not (1 != 2)
print('flag0 =', flag0) # flag0 = True
print('flag1 =', flag1) # flag1 = True
print('flag2 =', flag2) # flag2 = False
print('flag3 =', flag3) # flag3 = False
print('flag4 =', flag4) # flag4 = True
print('flag5 =', flag5) # flag5 = False

3.1 整数

在Python中,可以对整数执行加减乘除的运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = 5

b = 6

c = 7

d = 8

print(a+b)

print(c*d)

print(b-d)

print(d/c)

image.png

并且可以使用两个乘号**来表示乘方运算

1
2
3
4
5
a = 2

b = 3

print(a**b)

image.png

可以利用括来改变运算顺序

1
2
3
4
5
6
7
8
9
a = 2

b = 3

c = 4

print(a+b*c)

print((a+b)*c)

image.png

ps:当你需要参与的整数过大时,可以采取下划线的方式,每三个分段,来让你的数更清晰易读,并且当你打印输出时,Python不会打印其中的下划线。
image.png

3.2 浮点数

Python中浮点数就是带小数点的数,小数点可以出现在数的任何位置上,以表示任何数。
当你使用浮点数时,你可以不用考虑其他行为,python通常会按照你的预期的方式进行处理,所以Python是世界上最好的语言!!!(/doge)

如下图,可以看到当你把一个整数加上小数点,就变成了一个浮点数,这就是**小数点可以出现在任何位置上的原因。
image.png

但是需要注意的是,当浮点数参与运算时,小数位数可能是不确定的,可以理解为浮点数其实是计算机给你的一个精确值,但不是绝对和运算结果相等的,可以参考下图。
这是所有编程语言都存在的问题,说白了这是计算机硬件处理和储存的问题,具体可参考计算机组成原理,这里不详细解释,所以计算机会忽略多余的小数位数来尽力精确的表示结果。
image.png

来源: 《Python编程:从入门到实践》

ps:

  • 两个整数相除,结果也是一个浮点数,即使这两个数可以整除。
  • 在一系列运算中,若存在一个浮点数,那么结果也是浮点数。

3.3 常量

常量就是在程序的整个生命周期内都保持不变的变量。Python没有内置的常量类型,但是一般会使用全大写字母的变量名来指出某个变量为常量,其值应始终保持不变
image.png

4. 注释

注释是让代码逻辑清晰的一个很有用的功能,注释是不会被程序执行的。随着程序越来越大,增加注释来对代码进行大致阐述,可以让别人看你代码时更加容易理解。

编写方式:井号#来标识。#后的内容都会被Python解释器忽略
image.png
编写注释的主要⽬的是阐述代码要做什么,以及是如何做的。在开发项⽬ 期间,你对各个部分如何协同⼯作了如指掌,但是⼀段时间过后,你可能会忘记⼀些细节。当然,你总是可以通过研究代码来确定各个部分的⼯作 原理,但通过编写注释以清晰的⾃然语⾔对解决⽅案进⾏概述,可以节省很多时间。
要成为专业程序员或与其他程序员合作,就必须编写有意义的注释。当前,⼤多数软件是合作编写⽽成的,编写者既可能是同⼀家公司的多名员⼯,也可能是众多致⼒于同⼀个开源项⽬的⼈。训练有素的程序员都希望代码中包含注释,因此你最好从现在开始就在程序中添加描述性注释。新⼿程序员最值得养成的习惯之⼀就是,在代码中编写清晰、简洁的注释。 如果不确定是否要编写注释,就问问⾃⼰:在找到合理的解决⽅案之前, 考虑了多个解决⽅案吗?如果答案是肯定的,就编写注释,对你的解决⽅案进⾏说明吧。相⽐以后再回头添加注释,删除多余的注释要容易得多。 从现在开始,本书的⽰例都将使⽤注释来阐述代码的⼯作原理。

如果你想写shi山代码除外,网上很多说不写注释加上乱七八糟的变量名可以增加自己的不可替代性。这边建议不如多学学高门槛的知识,来增加自己的不可代替性。

结束语

以上是Python基础入门第一课,真的很基础,后面会慢慢上升难度,作者决定跳过小问题,主要面向之后的AI学习来编写教程。有任何问题包括排版或者学习顺序的问题都可以评论或者邮箱私我。


[!NOTE] 本文用到的代码集合
blog_code/Python_course_code/1.ipynb at main · dunm1e/blog_code (github.com)

这里留下三道练习题,可以查缺补漏

来源:Python-100-Days

[!NOTE] 练习1: 输入一个华氏温度,将华氏温度转化为摄氏温度
提示:华氏温度到摄氏温度的转换公式为:$C=(F - 32) \div 1.8$

1
2
3
f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print('%.1f华氏度 = %.1f摄氏度' % (f, c))

说明:在使用print函数输出时,也可以对字符串内容进行格式化处理,上面print函数中的字符串%.1f是一个占位符,稍后会由一个float类型的变量值替换掉它。同理,如果字符串中有%d,后面可以用一个int类型的变量值替换掉它,而%s会被字符串的值替换掉。除了这种格式化字符串的方式外,还可以用下面的方式来格式化字符串,其中{f:.1f}{c:.1f}可以先看成是{f}{c},表示输出时会用变量f和变量c的值替换掉这两个占位符,后面的:.1f表示这是一个浮点数,小数点后保留1位有效数字。

[!NOTE] 练习2:输入圆的半径计算周长和面积

1
2
3
4
5
radius = float(input('请输入圆的半径: '))
perimeter = 2 * 3.1416 * radius
area = 3.1416 * radius * radius
print('周长: %.2f' % perimeter)
print('面积: %.2f' % area)

[!NOTE] 练习3:输入年份判断是不是闰年

1
2
3
4
5
year = int(input('请输入年份: '))
# 如果代码太长写成一行不便于阅读 可以使用\对代码进行折行
is_leap = year % 4 == 0 and year % 100 != 0 or \
year % 400 == 0
print(is_leap)

说明:比较运算符会产生布尔值,而逻辑运算符andor会对这些布尔值进行组合,最终也是得到一个布尔值,闰年输出True,平年输出False

  • Title: Python从入门到精通——1. 1 Python介绍及语法元素基础知识(快速上手)
  • Author: Dunm1e
  • Created at : 2024-09-23 17:00:00
  • Updated at : 2024-09-28 10:52:46
  • Link: https://dunm1e.github.io/2024/09/23/be45ce62df6c/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments