01 python基础

一、编程语言

1.1、什么是编程语言

编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样)。就像我们中国人之间沟通需要汉语,英国人沟通需要英语一样,人与计算机之间进行沟通需要一门语言作为介质,即编程语言。

编程语言的发展经历了机器语言(指令系统)=>汇编语言=>高级语言(C、java、Go等)。

  • 计算机在设计中规定了一组指令(二级制代码),这组指令的集和就是所谓的机器指令系统,用机器指令形式编写的程序称为机器语言。
  • 但由于机器语言的千上万条指令难以记忆,并且维护性和移植性都很差,所以在机器语言的基础上,人们提出了采用字符和十进制数代替二进制代码,于是产生了将机器语言符号化的汇编语言。
  • 虽然汇编语言相较于机器语言简单了很多,但是汇编语言是机器指令的符号化,与机器指令存在着直接的对应关系,无论是学习还是开发,难度依然很大。所以更加接近人类语言,也更容易理解和修改的高级语言就应运而生了,高级语言的一条语法往往可以代替几条、几十条甚至几百条汇编语言的指令。因此,高级语言易学易用,通用性强,应用广泛。

1.2、编译型语言与解释性语言

计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式分为编译和解释两种。由此高级语言也分为编译型语言和解释型语言。

在这里插入图片描述

  • 编译型语言

使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。

编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。

1、一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;

2、与特定平台相关,一般无法移植到其他平台;

  • 解释型语言

使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。

1.解释型语言每次运行都需要将源代码解释称机器码并执行,执行效率低;

2.只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;

二、Python语言介绍

2.1、了解Python语言

Python 是1989 年荷兰人 Guido van Rossum (简称 Guido)在圣诞节期间为了打发时间,发明的一门面向对象的解释性编程语言。Python来自Guido所挚爱的电视剧Monty Python’s Flying Circus。

Guido对于Python的设计理念就是一门介于shell和C之间的语言。可以像shell那样,轻松高效编程,也可以像C语言那样,能够全面调用计算机的功能接口。

python的设计哲学:优雅、明确、简洁。

2.2、Python解释器下载与安装

Python 安装包下载地址:https://www.python.org/downloads/

安装文档:👇
https://note.youdao.com/s/2FfghK3Y(根据文档一步一步操作,肯定能安装成功的)

安装完成以后,打开 Windows 的命令行程序(cmd 命令提示符),在窗口中输入python命令(注意字母p是小写的),如果出现 Python 的版本信息,并看到命令提示符>>>,就说明安装成功了,如下图所示。

2.3、第一个Python程序

在任意位置创建一个文本文件,写下符合python语法的代码,比如print("hi,yuan!")

在这里插入图片描述

保存后在终端该路径下,通过python命令用python解释器执行该文件即可得到打印结果:

python python文件名

在这里插入图片描述

三、基础语法

3.1、变量

3.1.1、变量的使用

变量是一段有名字的连续存储空间。我们通过定义变量来申请并命名这样的存储空间,并通过变量的名字来使用这段存储空间。在编程语言中,将数据放入变量的过程叫做赋值(Assignment)。Python 使用等号=作为赋值运算符,具体格式为:

变量名 = 任意类型的值

例如:
在这里插入图片描述

x  = 10
y  = "hello,yuan"
z  = True
x  = 20

python作为动态语言的代表,是不同于C语言等静态语言的变量存储原理的

x = 10
print(id(x))
x = 20  # 内存id变化
print(id(x))

思考,为什么要用变量?

# 为什么要有变量

# 案例1
a = 10
b = 20

print(a + b)
print(a - b)
print(a * b)
print(a / b)

# 案例2
text = "Hello World"
print(text)
print("Hello World".upper())	# HELLO WORLD
print("Hello World".lower())	# hello world

3.1.2、变量命名规范

简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命令规则

  • 标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。
  • 标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。
  • Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
  • 在 Python 中,标识符中的字母是严格区分大小写
  • Python 允许使用汉字作为标识符(不推荐)

以下是python关键字

andasassertbreakclasscontinue
defdelelifelseexceptfinally
forfromFalseglobalifimport
inislambdanonlocalnotNone
orpassraisereturntryTrue
whilewithyield

3.2、基本语法

(1)注释

注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。一般情况下,合理的代码注释应该占源代码的 1/3 左右。

注释只是为了提高公认阅读,不会被解释器执行。

Python 支持两种类型的注释,分别是单行注释和多行注释。

#  单行注释
"""
这是一个多行注释
三引号里面的任何内容不会被解释器执行
"""
(2)语句分隔符

就像我们写作文一样,逗号、句号等语句分隔符是非常重要的,程序也一样,要想让解释器能读懂,语句和语句之间一定要有分隔符。在C、Java等语言的语法中规定,必须以分号作为语句结束的标识。Python也支持分号,同样用于一条语句的结束标识。但在Python中分号的作用已经不像C、Java中那么重要了,Python中的分号可以省略,主要通过换行来识别语句的结束。

(3)缩进

和其它程序设计语言(如 Java、C 语言)采用大括号“{}”分隔代码块不同,Python 采用冒号( : )和代码缩进和来区分代码块之间的层次。在 Python 中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。

注意,Python 中实现对代码的缩进,可以使用空格或者 Tab 键实现。但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。

(4)Python编码规范(PEP 8)

Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。下面仅给大家列出 PEP 8 中初学者应严格遵守的一些编码规则:

1、不要在行尾添加分号,也不要用分号将两条命令放在同一行

2、通常情况下,在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。

3、使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也可以空一行。

(5)输入输出函数
  • print函数 : 用于打印输出,是python中最常见的一个函数。
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
    """
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.
    """
    pass
  • input函数:用于读入一个字符串的函数

以上信息说明input函数在python中是一个内建函数,其从标准输入中读入一个字符串,并自动忽略换行符。也就是说所有形式的输入按字符串处理,如果想要得到其他类型的数据进行强制类型转化。

name = input("您的姓名:")
age = input("您的年龄:")
print(name,type(name))
print(age,type(age))

3.3、基本数据类型

【1】整型和浮点型

在python中整数都属于整型,不同于C语言会根据整数的大小将整型分类为short、int、long、long long 四种类型,python只有一种整型,即int类型,无论整型数字多大多小都属于int

x = 10
print(type(x))  # <class 'int'>

在python中小数都属于浮点型(float

# 小数点形式
f =  3.14
print(f)  # 3.14
print(type(f)) # <class 'float'>
【2】布尔类型

布尔型(Boolean)是一种数据的类型,这种类型只有两种值,即"真"与"假"。在python中用 bool表示布尔类型,"真"用关键字True表示,"假"用False表示。

print(4 == 2) # False
print(5 > 1)  # True

name = "yuan"
print(name == "alvin") # False
print(1 == "1") # False

不光表达式的结果是布尔值,任意值都有自己的布尔值,这就涉及到布尔的零值。

# 任意数据类型都一个具体值的布尔值为False,我们称为零值。该类型的其他值的布尔值皆为True。
print(bool("")) # 字符串的零值 “”,False
print(bool(0))  # 整型的零值 0,False
print(bool(False)) # 布尔类型的零值 False

print(bool("0"))	# True
print(bool("-1"))  # True
print(bool("yuan"))	# True
print(bool(-1))		# True
print(bool(0.1))	# True
【3】字符串

字符串是由零个或多个字符组成的有限序列。字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界的所有字符。

在python中字符串是通过单引号''或者双引号""标识的。

s1 = "hi yuan"
print(s1)

s2 = ""
print(s2)

Python 字符串中的双引号和单引号没有任何区别!

(1)字符串的转义符
s1 = "hi yuan\nhi,alvin"
print(s1)
(2)长字符串
s = """
    s = "hi yuan\\nhi,alvin"
    I'm yuan\n
    这是一个python解释器路径:"D:\\nythonProject\\nenv\Scripts\python.exe" 
长字符串中放置单引号或者双引号不会导致解析错误
"""
print(s)
(3)格式化输出

之前讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出。

name = "yuan"
age = 23
print("My name is %s; My age is %d" % (name, age))	# My name is yuan; My age is 23
print(f"My name is {name}; My age is {age}")		# My name is yuan; My age is 23

在 print() 函数中,由引号包围的是格式化字符串,它相当于一个字符串模板,可以放置一些转换说明符(占位符)。本例的格式化字符串中包含一个%s%d说明符,它最终会被后面的name和age 变量的值所替代。中间的%是一个分隔符,它前面是格式化字符串,后面是要输出的表达式。

(4)序列类型操作

字符串属于序列类型,所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。

s= "hello yuan"
print(len(s))	# 10

Python 还支持索引值是负数,此类索引是从右向左计数,换句话说,从最后一个元素开始计数,从索引值 -1 开始,如图 所示。

在这里插入图片描述

序列类型支持的操作:

# (1)索引取值
s = "hello yuan"
print(s[6])		# python索引值从0开始,输出字符 y
print(s[-10])	# h

# (2)切片取值:序列类型对象[start : end : step]
s = "hello yuan"
print(s[1:4]) # ell  :取索引1到索引3(左闭又开)
print(s[:4])  # hell :start缺省,默认从0取
print(s[1:])  # ello yuan : end缺省,默认取到最后
print(s[1:-1]) # ello yua

# (3)判断存在:Python 中,可以使用 in 关键字检查某元素是否为序列的成员。
s = "hello yuan"
print("yuan" in s) # True

# (4)支持两种类型相同的序列使用“+”运算符做相加操作,它会将两个序列进行连接,但不会去除重复的元素。
#     使用数字 n 乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果
s = "hello"+" yuan"
print(s) # hello yuan
s= "*"*10
print(s) # **********

(5)内置方法(重点)

任意数据对象.方法()–>实现对数据的某种操作

方法作用示例输出
upper全部大写"hello".upper()"HELLO"
lower全部小写"Hello".lower()"hello"
startswith()是否以a开头"Yuan".startswith("Yu")True
endswith()是否以a结尾"Yuan".endswith("a")False
isdigit()是否全数字'123'.isdigit()True
strip()去两边空格" hi yuan \n".strip()"hi yuan"
join()将多个字符串连接在一起"-".join(["yuan","alvin","eric"])"yuan-alvin-eric"
split()按某字符分割字符串,默认按空格分隔"yuan-alvin-eric".split("-")['yuan', 'alvin', 'eric']
find()搜索指定字符串,没有返回-1"hello world".find("w")6
index()同上,但是找不到会报错"hello world".index("w")6
count()统计指定的字符串出现的次数"hello world".count("l")3
replace()替换old为new'hello world'.replace(‘world',‘python')"hello python"
# 任意数据对象.方法()实现对数据的某种操作
# 不同数据类型对象支持不同方法
# 字符串类型对象支持哪些方法

s1 = "yuan"
s2 = "RAIN"
# (1) upper方法和lower方法
s3 = s1.upper()		
s4 = s2.lower()		
print(s3) # "YUAN"
print(s4) # "rain"


s5 = "hello yuan"
s6 = "hi world"
# (2) startswith和endswith:判断字符串是否以什么开头和结尾
print(s5.startswith("hello")) # True
print(s6.startswith("hello")) # False
print(s6.startswith("hi wor")) # True
print(s6.endswith("hi wor")) # False

# (3) isdigit(): 判断字符串是否是一个数字字符串
s7 = "123"
s8 = "123A"
print(s7.isdigit()) # True
print(s8.isdigit()) # False
s9 = "123SAA%#"
print(s9.isalnum()) # False 不能包含特殊符号

# (4) strip(): 去除两端空格和换行符号

s10 = " I am yuan "
print(s10)
print(s10.strip())
name = input("请输入姓名>>").strip()
print(name)

# (5) split分割方法: 将一个字符串分割成一个列表
s11 = "rain-yuan-alvin-eric"
print(s11.split("-")) # ['rain', 'yuan', 'alvin', 'eric']

# (6) join方法: 将一个列表中的字符串拼接成一个字符串
names_list = ['rain', 'yuan', 'alvin', 'eric']
s12 = "-".join(names_list) # 用什么分隔符拼接names_list列表
print(s12,type(s12)) # "rain-yuan-alvin-eric", <class "str">
【4】类型转换
i = int("3")	# 将字符串类型转换为int类型
print(i,type(i)) # 3 <class 'int'>

s = str(3.14)	# 将整型int类型转换为string字符串类型。
print(s,type(s)) # 3.14 <class 'str'>

3.4、运算符

【1】算数运算符
运算符说明实例结果
+1+12
-1-10
*1*33
/除法(和数学中的规则一样)4/22
//整除(只保留商的整数部分)7 // 23
%取余,即返回除法的余数7 % 21
**幂运算/次方运算,即返回 x 的 y 次方2 ** 416,即 24
【2】赋值运算符
运算符说 明用法举例等价形式
=最基本的赋值运算x = yx = y
+=加赋值x += yx = x + y
-=减赋值x -= yx = x - y
*=乘赋值x *= yx = x * y
/=除赋值x /= yx = x / y
%=取余数赋值x %= yx = x % y
**=幂赋值x **= yx = x ** y
//=取整数赋值x //= yx = x // y
&=按位与赋值x &= yx = x & y
|=按位或赋值x |= yx = x | y
^=按位异或赋值x ^= yx = x ^ y
<<=左移赋值x <<= yx = x << y,这里的 y 指的是左移的位数
>>=右移赋值x >>= yx = x >> y,这里的 y 指的是右移的位数
【3】比较运算符
比较运算符说明
>大于,如果>前面的值大于后面的值,则返回 True,否则返回 False。
<小于,如果<前面的值小于后面的值,则返回 True,否则返回 False。
==等于,如果==两边的值相等,则返回 True,否则返回 False。
>=大于等于(等价于数学中的 ≥),如果>=前面的值大于或者等于后面的值,则返回 True,否则返回 False。
<=小于等于(等价于数学中的 ≤),如果<=前面的值小于或者等于后面的值,则返回 True,否则返回 False。
!=不等于(等价于数学中的 ≠),如果!=两边的值不相等,则返回 True,否则返回 False。
is判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。
is not判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。
【4】逻辑运算符
逻辑运算符含义基本格式说明
and逻辑与运算a and b当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。
or逻辑或运算a or b当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。
not逻辑非运算not a如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。
print(2>1 and 1==2) # False
print(not 3<5) # False
print(not(4<2) or 1==2) # True

值得注意的是逻辑运算符有一套很好玩的短路算法
print(2 and 1)  # 输出: 1
print(0 and 1)  # 输出: 0
print(0 or 1)   # 输出: 1
print(3 or 5)   # 输出: 3
原理解释:

Python 中的 andor短路逻辑运算符,它们返回的是最后一个被评估的操作数,而不是简单的布尔值。

and 运算规则:
  • 如果第一个值为假,直接返回第一个值(短路),不再评估第二个
  • 如果第一个值为真,返回第二个值
  • 2 and 12 是真值 → 返回 1
  • 0 and 10 是假值 → 短路,返回 0
or 运算规则:
  • 如果第一个值为真,直接返回第一个值(短路),不再评估第二个
  • 如果第一个值为假,返回第二个值
  • 0 or 10 是假值 → 返回 1
  • 3 or 53 是真值 → 短路,返回 3
关键点:
  • 在 Python 中,以下值被视为 假值False00.0""(空字符串)、[]{}None
  • 其他所有值都被视为 真值

3.5、章节练习题

"""
1. 分析下面代码的运行结果?

x = 10
y = x
y = 20
print(x)
print(y)

2. 用print打印出下面内容:

文能提笔安天下,
武能上马定乾坤。
心存谋略何人胜,
古今英雄唯是君。

3.  利用 input函数,连续输入两个数字求和?


4.  分别使用%占位符以及f{}的方法两种方式制作趣味模板程序需求:
    等待用户输名字、地址、爱好,
    根据用户的名字和爱好进任意格式化输出 
    如:敬爱可亲的xxx,最喜欢在xxx地方去xxx


5. 有 names = "  张三 李四 王五 赵六 "
   将names字符串中所有的名字放在一个列表中

6. 查找字符串"  张三 李四 王五 赵六 "王五的索引位置

7. 将"goods"与"food"以及"meat"拼接为完整路径,即"/goods/food/meat/"
	
8. s = "hello world"切片操作
   (1) s[1:4]
   (2) s[-1:-4]
   (3) 打印"world"如何切片
   
9. "1" == 1的结果是什么?

10. 将变量x=1,自减10,并打印结果?
 
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值