day 01 1.3 Python基础语法

三、基础语法

3.1、变量

3.1.1、python的标识符规范

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

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

标识符的命名,除了要遵守以上这几条规则外,不同场景中的标识符,其名称也有一定的规范可循,例如:

'''
- 当标识符用作模块名时,应尽量短小,并且全部使用小写字母,使用下划线分割多个字母,例如 game_mian、game_register 等。
- 当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线,例如 com.mr、com.mr.book 等。
- 当标识符用作类名时,应采用单词首字母大写的形式。例如,定义一个图书类,可以命名为 Book。
- 模块内部的类名,可以采用 "下划线+首字母大写" 的形式,如 _Book;
- 函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下划线分割;
- 常量命名应全部使用大写字母,单词之间可以用下划线分割;
'''

3.1.2、python的关键字

and as assert break class continue
def del elif else except finally
for from False global if import
in is lambda nonlocal not None
or pass raise return try True
while with yield

3.1.3、变量

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

变量名 = 任意类型的值

例如:

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

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

x = 10
print(id(x))
x = 20  # 内存变化
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())
print("Hello World".lower())

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

3.3、基本数据类型

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'>

3.3.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("")) # 字符串的零值 “”
print(bool(0))  # 整型的零值 0
print(bool(False)) # 布尔类型的零值 False

print(bool("0"))
print(bool("-1"))  
print(bool("yuan"))
print(bool(-1))
print(bool(0.1))

3.3.3、字符串

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

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

s1 = "hi yuan"
print(s1)

s2 = ""
print(s2)

s3 = 'yuan老师是最帅的老师!'
print(s3)

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

(1)字符串的转义符

转义字符 说明
\n 换行符,将光标位置移到下一行开头。
\r 回车符,将光标位置移到本行开头。
\t 水平制表符,也即 Tab 键,一般相当于四个空格。
\a 蜂鸣器响铃。注意不是喇叭发声,现在的计算机很多都不带蜂鸣器了,所以响铃不一定有效。
\b 退格(Backspace),将光标位置移到前一列。
\ 反斜线
' 单引号
" 双引号
\ 在字符串行尾的续行符,即一行未完,转到下一行继续写。
s1 = "hi yuan\nhi,alvin"
print(s1)

s2 = 'I\'m yuan'
print(s2)

s3 = "D:\\nythonProject\\nenv\\Scripts\\python.exe"
print(s3)

(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))
print(f"My name is {name}; My age is {age}")

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

(4)序列类型操作

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

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

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

序列类型支持的操作:

# (1)索引取值
s = "hello yuan"
print(s[6])
print(s[-10])

# (2)切片取值:序列类型对象[start : end : step]
s = "hello yuan"
print(s[1:4]) # ell  :取索引1到索引3(左闭又开)
print(s[:4])  # hell :start缺省,默认从0取
print(s[:])  # 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".index("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"

3.3.4、类型转换

i = int("3")
print(i,type(i)) # 3 <class 'int'>

s = str(3.14)
print(s,type(s)) # 3.14 <class 'str'>

3.4、运算符

3.4.1、算数运算符

运算符 说明 实例 结果
+ 1+1 2
- 1-1 0
* 1*3 3
/ 除法(和数学中的规则一样) 4/2 2
// 整除(只保留商的整数部分) 7 // 2 3
% 取余,即返回除法的余数 7 % 2 1
** 幂运算/次方运算,即返回 x 的 y 次方 2 ** 4 16,即 24

3.4.2、赋值运算符

运算符 说 明 用法举例 等价形式
= 最基本的赋值运算 x = y x = y
+= 加赋值 x += y x = x + y
-= 减赋值 x -= y x = x - y
*= 乘赋值 x *= y x = x * y
/= 除赋值 x /= y x = x / y
%= 取余数赋值 x %= y x = x % y
**= 幂赋值 x **= y x = x ** y
//= 取整数赋值 x //= y x = x // y
&= 按位与赋值 x &= y x = x & y
|= 按位或赋值 x |= y x = x | y
^= 按位异或赋值 x ^= y x = x ^ y
<<= 左移赋值 x <<= y x = x << y,这里的 y 指的是左移的位数
>>= 右移赋值 x >>= y x = x >> y,这里的 y 指的是右移的位数

3.4.3、比较运算符

比较运算符 说明
> 大于,如果>前面的值大于后面的值,则返回 True,否则返回 False。
< 小于,如果<前面的值小于后面的值,则返回 True,否则返回 False。
== 等于,如果==两边的值相等,则返回 True,否则返回 False。
>= 大于等于(等价于数学中的 ≥),如果>=前面的值大于或者等于后面的值,则返回 True,否则返回 False。
<= 小于等于(等价于数学中的 ≤),如果<=前面的值小于或者等于后面的值,则返回 True,否则返回 False。
!= 不等于(等价于数学中的 ≠),如果!=两边的值不相等,则返回 True,否则返回 False。
is 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。
is not 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。

3.4.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)
print(0 and 1)
print(0 or 1)
print(3 or 5)

3.5、输入输出函数

(1)print函数

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

(2)input函数

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

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

3.6、章节练习题

"""
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,并打印结果?
 
"""
posted @ 2023-04-20 16:40  Chimengmeng  阅读(48)  评论(0编辑  收藏  举报