基础语法(1):变量、注释、输入输出、运算符

基础语法(1):变量、注释、输入输出、运算符

1. 常量和表达式

我们可以把 Python 当成一个计算器, 来进行一些算术运算

print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)

输出:

0
7
1.6666666666666665
  • 形如 1 + 2 - 3 这样是算式, 在编程语言中称为 表达式, 算式的运算结果, 称为表达式的返回值
  • 其中 1 , 2 , 3 这种称为 字面值常量, + - * / 这种称为 运算符 或者 操作符

注意: 熟悉 C / Java / C++ 的同学可能认为, 2 / 3 结果为 0 (小数部分被截断)。但是在 Python 中得到的结果则是一个小数, 更符合日常使用的直觉

2. 变量和类型

2.1 变量是什么

变量可以视为是变量可以视为是一块能够容纳数据的空间。 这个空间往往对应到 “内存” 这样的硬件设备上。

2.2 变量的语法

(1) 定义变量
a=10
  • a 为变量名,当我们创建很多个变量的时候, 就可以用名字来进行区分
  • = 为赋值运算符, 表示把 = 右侧的数据放到 = 左侧的空间中

变量命名规则:

硬性规则(务必遵守)

  • 变量名由数字字母下划线构成
  • 数字不能开头
  • 变量名不能和 “关键字” 重复
  • 变量名大小写敏感,numNum 是两个不同的变量名

软性规则(建议遵守)

  • 变量名使用有描述性的单词来表示, 尽量表达出变量的作用
  • 一个变量名可以由多个单词构成, 长一点没关系, 但是含义要清晰
  • 当变量名包含多个单词的时候, 命名有多种规范
    • “驼峰命名”,形如 totalCount , personInfo 这种, 除了首个单词外, 剩余单词首字母大写
    • “蛇形命名”,形如 total_count , person_info 这种, 单词之间使用_来分割
(2) 使用变量

读取变量的值

a = 10     # 首次使用,初始化
print(a)

修改变量的值

a = 20     # 再次使用,赋值  
print(a)

注意: 在 Python 中, 修改变量也是使用 = 运算, 看起来和定义变量没有明显区别

2.3 变量的类型

变量里面存储的不仅仅是数字, 还可以存储其它种类的数据。 为了区分不同种类的数据, 我们引入了 "类型"这样的概念

注意: 和 C++ / Java 等语言不同, Python 变量的类型不需要显式指定, 而是在赋值的时候确定

(1) 整数
a = 10
print(type(a))

输出:

<class 'int'>

type 和 print 类似, 也是 python 内置的函数. 可以使用 type来查看一个变量的类型

注意:

  • 在C++中int最大表示到-21亿~21亿
  • Python, int能表示的数据范围是无穷的, int是可以根据要表示数据的大小,自动扩容。因此python中没有short, long这样的类型
(2) 浮点数(小数)
a = 0.5
print(type(a))

输出:

<class 'float'>

注意:

  • 在C++/Java中float是4个字节,也叫做"单精度浮点数",double是8个字节,也叫做"双精度浮点数"
  • Python 的小数只有 float 一种类型, 没有 double 类型;Python中的float就相当于C++/Java的double, 表示双精度浮点数
(3) 字符串
a = 'hello'
print(type(a))

输出:

<class 'str'>

Python中要求使用引号把一系列字符引起来就构成了字符串,引号使用 '" 都可以,'hello'"hello"是完全等价的

一句话中本身包含双引号,打印时用'把这句话括起来

# 打印: my name is "zhangsan"
a='my name is "zhangsan"'
print(a)

一句话中本身包含单引号,打印时用"把这句话括起来

# 打印: hello 'world'
a="hello 'world'"
print(a)

一句话中既包含单引号又包含双引号,打印时用'''把这句话括起来

# 打印: my 'name' is "zhangsan"
a='''my 'name' is "zhangsan"'''
print(a)

Python中也可以用三引号来表示字符串,即'''"""

# a,b表示的字符串完全等价
a='''hello'''
b="""hello"""
字符串相关操作

可以使用 len 函数来获取字符串的长度

a = 'hello'
print(len(a))

输出:

5

可以使用 + 针对两个字符串进行拼接

a = 'hello'
b = 'world'
print(a + b)

输出:

helloworld

注意:不能把字符串和数字混合相加

(4) 布尔

布尔类型是一个特殊的类型, 取值只有两种, True (真) 和 False (假),主要用于逻辑判定

a = True
print(type(a))
b = False
print(type(b))

输出:

<class 'bool'>
<class 'bool'>

注意:在Java/C++中布尔取值表示为true/false,Python中表示为True/False

2.4 为什么要有这么多类型?

  1. 类型决定了数据在内存中占用多大内存空间
  • int默认占用4个字节,动态扩容
  • float固定8个字节
  • bool占用1个字节
  1. 类型决定了对变量进行什么样的操作
  • int/float 类型的变量, 可以进行 + - * / 等操作,不能使用len
  • str类型的变量, 只能进行 + (并且行为是字符串拼接), 不能进行 - * / , 但是还能使用 len 等其他操作

2.5 动态类型特性

静态类型:程序运行的过程中,变量的类型始终不变。

C++/Java中:int a=10,a这个变量在程序运行过程中,始终都是int类型,若尝试a=“hello”,就会编译报错

动态类型:程序运行的过程中,变量的类型可能会发生改变

在 Python 中, 一个变量是什么类型, 是可以在 “程序运行” 过程中发生变化的

在程序执行过程中, a 的类型刚开始是 int, 后面变成了str

a = 10
print(type(a))
a = 'hello'
print(type(a))

输出:

<class 'int'>
<class 'str'>

注意:一个编程语言程序是否是静态类型,取决于运行时,类型是否发生改变,不取决于变量定义的时候是否声明类型

Python作为一个动态类型的语言,在变量定义的时候是可以写类型的

c1:int=2
print(type(c1))

动态类型特性是一把双刃剑

  • 对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型)
  • 对于大型程序, 则提高了模块之间的交互成本 (程序猿 A 提供的代码难以被 B 理解)

3. 注释

3.1 注释是什么

注释是一种特殊的代码, 它不会影响到程序的执行, 但是能够起到解释说明的作用, 能够帮助程序猿理解程序代码的执行逻辑

3.2 注释的语法

Python 中有两种风格的注释

(1) 注释行
使用 # 开头的行都是注释

# 这是一行注释

(2) 文档字符串
使用三引号引起来的称为 “文档字符串”, 也可以视为是一种注释

  • 可以包含多行内容

  • 一般放在 文件/函数/类 的开头

  • """ 或者 ''' 均可 (等价)

"""
这是文档字符串
这是文档字符串
"""

3.3 注释使用规范

  1. 内容准确: 注释内容要和代码一致, 匹配, 并在代码修改时及时更新
  2. 篇幅合理: 注释既不应该太精简, 也不应该长篇大论
  3. 使用中文: 一般中国公司都要求使用中文写注释, 外企另当别论
  4. 积极向上: 注释中不要包含负能量

4. 输入输出

4.1 和用户交互

程序需要和用户进行交互

  • 用户把信息传递给程序的过程, 称为 “输入”
  • 程序把结果展示给用户的过程, 称为 “输出”

输入输出的最基本的方法就是控制台。用户通过控制台输入一些字符串, 程序再通过控制台打印出一些字符串

PyCharm 运行程序,下方弹出的窗口就可以视为控制台

在这里插入图片描述

输入输出的最常见方法是图形化界面。如我们平时用到的 QQ,浏览器, steam 等, 都不需要用户输入命令,而只是通过鼠标点击窗口点击按钮的方式来操作。我们现在初学 Python就基于控制台的方式与程序交互。

4.2 通过控制台输出

Python 使用 print 函数输出到控制台

print('hello')

不仅能输出一个字符串,还可以输出一个其他类型的变量

a = 10
print(a)
b = True
print(b)

输出:

10
True

字符串和变量混合输出

示例:输出num=10

num=10
print(f"num={num}") 

注意:

  • 使用 f 作为前缀的字符串(此处的f表示"format"),称为 f-string。这个语法称为格式化字符串
  • 里面可以使用 { } 来内嵌一个其他的变量/表达式
  • 关于格式化字符串,很多语言都进行了探索
    • C语言的printf采用了%d, %s等的占位符
    • C++的std::cout采用<<
    • Java采用字符串拼接,允许字符串和其他类型的值进行拼接
    • Python最早支持的格式化字符串是效仿C的printf并做出改进,Python3.6版本才开始支持f-string
  • Python 中还支持其他的格式化字符串的方法, 咱们此处只了解这个最简单的即可

4.3 通过控制台输入

python 使用 input 函数, 从控制台读取用户的输入

num = 0
num = input('请输入一个整数: ')
print(f'你输入的整数是 {num}')

输出:

请输入一个整数: 10
你输入的整数是: 10

注意:

  • input在执行的时候会等待用户的输入,此处的等待可能是一个很长的等待,完全取决于用户何时输入
  • input 的参数相当于一个 “提示信息”, 也可以没有
  • input 的返回值就是用户输入的内容, 是字符串类型

验证input返回值是字符串类型

a=0
b=0
a=input("请输入一个整数:")
b=input("请输入一个整数:")
print(f"a+b={a+b}")

输出:这里做的是字符串的拼接工作,而不是两数相加

请输入一个整数:10
请输入一个整数:20
a+b=1020

打印a,b的类型

print(type(a))  
print(type(b)) 

输出:

<class 'int'>
<class 'int'>

如果要想进行算术运算, 需要先转换类型

a=0
b=0
a=input("请输入一个整数:")
b=input("请输入一个整数:")

a=int(a)
b=int(b)
print(f"a+b={a+b}")

输出:

请输入一个整数:10
请输入一个整数:20
a+b=30

关于input返回值的问题:

  • 如果只是想单纯的拿到用户的输入然后打印,使用str打印即可
  • 如果需要根据用户的输入内容进行算术运算,此时需要把读到的str转为int,即int(xxx)
  • 同理字符串转浮点数,float(xxx),整数转字符串str(xxx)

5. 运算符

5.1 算术运算符

+ - * / % ** // 这种进行算术运算的运算符, 称为算术运算符

  1. / 中不能用 0 作为除数,否则会抛出异常
print(10/0)

输出:

Traceback (most recent call last):
  File "D:\编程学习\python_code\basic_grammer\code2.py", line 3, in <module>
    print(10/0)
ZeroDivisionError: division by zero

异常是编程语言中的一种常见机制, 表示程序运行过程中, 出现了一些 “意外情况”, 导致程序不能继续往下执行了

  1. 整数 / 整数 结果可能是小数,而不会发生截断
print(1 / 2)

输出:

0.5

除Python外大部分编程语言,整数 / 整数结果还是整数,会发生截断

  1. % 是求余数。
print(7 % 2)

输出:

1
  1. ** 是求乘方。不光能算整数次方, 还能算小数次方(开方运算)
print(4 ** 3)       # 4^3
print(4 ** 0.5)     # 4^1/2

输出:

64
2.0
  1. // 是取整除法(也叫地板除)。整数除以整数, 结果还是整数(舍弃小数部分, 并向下取整。不是四舍五入)
print(7//2)
print(-7//2)

输出:

3
-4

5.2 关系运算符

< <= > >= == != 这一系列的运算符称为 关系运算符, 它们是在比较操作数之间的关系。
其中

  • <= 是 “小于等于”

  • = 是 “大于等于”

  • == 是 “等于”

  • != 是 “不等于”

(1) 若关系符合, 则表达式返回 True。 若关系不符合, 则表达式返回 False

a = 10
b = 20
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

输出:

True
True
True
False
False
False
True

(2) 关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较

a = 'hello'
b = 'world'
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

输出:

True
True
False
False
False
True
False

注意:

  • C语言中字符串比较采用strcmp,若采用== 本质上是比较两个字符串首元素的地址;Java中字符串比较采用equals方法,若采用==本质上是比较两个字符串是否是同一对象
  • 像Python直接使用==和!=来比较字符串内容相同,是大部分编程语言遵守的规则;Python的字符串比较规则是"字典序"

关于字典序:
想象一个英文词典, 上面的单词都是按照字母顺序排列。 如果首个字母相同, 就比较第二个字母(就比如著名单词 abandon)。
我们认为一个单词在词典上越靠前, 就越小。越靠后, 就越大。

(3) 对于浮点数来说, 不要使用 == 判定相等

print(0.1+0.2==0.3)

输出:

False

注意:浮点数在内存中的存储和表示是可能存在误差的,这样的误差在算术运算的时候可能会被放大,从而导致==判定出现误判

运算过程

print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)

输出:

0.1
0.2
0.30000000000000004
0.3

可以看到, 0.1 + 0.2 的结果并非是 0.3,虽然两个数字非常接近, 但是直接使用 == 进行比较的, 仍然会导致 == 的结果为 False

不止是 Python 如此, 主流编程语言都是如此。这个是 IEEE754 标准规定的浮点数格式所引入的问题

正确的比较方式:作差, 看差值是否小于预期的误差范围

a=0.1+0.2
b=0.3
print(-0.000001<(a-b)<0.000001)

5.3 逻辑运算符

and or not 这一系列的运算符称为逻辑运算符

  • and 并且。两侧操作数均为 True, 最终结果为 True。否则为 False (一假则假)
  • or 或者。两侧操作数均为 False, 最终结果为 False。否则为 True(一真则真)
  • not 逻辑取反。操作数本身为 True, 则返回 False。本身为 False, 则返回 True
a = 10
b = 20
c = 30
print(a < b and b < c)
print(a < b and b > c)
print(a > b or b > c)
print(a < b or b > c)
print(not a < b)
print(not a > b)

输出:

True
False
False
True
False
True

一种特殊写法
a < b and b < c 这个操作等价于 a < b < c 。这个设定和大部分编程语言都不相同

print(a<b<c) 

输出:

True

短路求值

和其他编程语言类似, Python 也存在短路求值的规则。

  • 对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行
  • 对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行
print(10 > 20 and 10 / 0 == 1)
print(10 < 20 or 10 / 0 == 1)

输出:

False
True

上述代码没有抛出异常, 说明右侧的除以 0 操作没有真正执行

5.4 赋值运算符

(1) = 的使用

  • = 表示赋值。注意和 == 区分。
  • = 除了基本的用法之外, 还可以同时针对多个变量进行赋值。

链式赋值

a = b = 10

多元赋值

a, b = 10, 20

代码实例: 交换两个变量

基础写法

a = 10
b = 20

tmp = a
a = b
b = tmp

基于多元赋值

a = 10
b = 20

a, b = b, a

(2) 复合赋值运算符

  • Python 还有一些 复合赋值运算符。 例如 += -= *= /= %=
  • 其中 a += 1 等价于 a = a + 1 。其他复合赋值运算符也是同理
a = 10
a = a + 1
print(a)
b = 10
b += 1
print(b)

输出:

11
11

注意:像 C++ / Java 中, 存在 ++ – 这样的自增/自减运算符。Python 中则不支持这种运算。如果需要使用,则直接使用 += 1 或者 -= 1

  • 后置++和后置–都会在语法上报错
  • 前置++和前置–不出现报错,可能是Python解释器把+ -当成了正负号

验证

a=10
a+=1
++a      # 这里会被解释为正号
print(a)
--a      # -会被解释为负号, --为正
print(a)

输出:

11
11

6. 总结

本章节中学习了 Python 中的最基础的语法部分

  • 常量
  • 变量
  • 类型
    • 整数
    • 浮点数
    • 字符串
    • 布尔值
  • 注释
  • 输入输出
  • 运算符
    • 算术运算符
    • 关系运算符
    • 逻辑运算符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值