本文主要是介绍【天池龙珠计划寒假训练营】python学习笔记(一):从变量到异常处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、变量、运算符与数据类型
1.1注释
在 Python 中,#
表示注释,作用于整行。
''' '''
或者""" """
表示区间注释,在三引号之间的所有内容被注释
例1.1.1
# 写下你的答案
print("hello world")
1.2运算符
- 算数运算符
操作符 | 名称 | 示例 |
---|---|---|
+ | 加 | 1+1 |
- | 减 | 2-1 |
* | 乘 | 3*4 |
/ | 除以 | 3/4 |
// | 整除(地板除) | 3//4 |
% | 取余 | 3%4 |
** | 幂 | 2**3 |
- 比较运算符
操作符 | 名称 | 示例 |
---|---|---|
> | 大于 | 2 > 1 |
>= | 大于等于 | 2 >= 4 |
< | 小于 | 1 < 2 |
<= | 小于等于 | 5 <= 2 |
== | 等于 | 3 == 4 |
!= | 不等于 | 3 != 5 |
- 逻辑运算符
操作符 | 名称 | 示例 |
---|---|---|
and | 与 | (3 > 2) and (3 < 5) |
or | 或 | (1 > 3) or (9 < 2) |
not | 非 | not (2 > 1) |
- 位运算符
操作符 | 名称 | 示例 |
---|---|---|
~ | 按位取反 | ~4 |
& | 按位与 | 4 & 5 |
| | 按位或 | 4| 5 |
^ | 按位异或 | 4 ^ 5 |
<< | 左移 | 4 << 2 |
>> | 右移 | 4 >> 2 |
例1.2.1
print(bin(4)) # 0b100
print(bin(5)) # 0b101
print(bin(~4), ~4) # -0b101 -5
print(bin(4 & 5), 4 & 5) # 0b100 4
print(bin(4 | 5), 4 | 5) # 0b101 5
print(bin(4 ^ 5), 4 ^ 5) # 0b1 1
print(bin(4 << 2), 4 << 2) # 0b10000 16
print(bin(4 >> 2), 4 >> 2) # 0b1 1
问题1:按位取反?为什么~4=-5呢?
- 二进制数
按位取反是位运算符,而位运算符是应用在两个数的运算上,会对数字的二进制所有位数进行从低到高的运算。所以需要把十进制数转换成二进制数再进行运算。- 补码
补码是属于计算机三种机械数的一种,机械数有原码、反码、补码。
如果是正数,那么原码 = 反码 = 补码,正数的符号位为0(如 0 100,这里的0就是符号位,负数类似);
如果是负数,那么反码就是把原码的每一位取反,也就是0变成1,1变成0;补码就是在反码的基础上,末位+1,负数的符号位为1。- 计算~4=-5
第一步,把十进制数4转化成二进制数100;
第二步,由于二进制数在内存中以补码的形式存储,所以将得到的二进制数转成补码,要成补码先要把原码转成反码(即0 100,正数原反补一样,第一个0就是符号位),然后反码得到补码(即0 100,正数原反补一样);
第三步,终于进行按位取反啦!把第二步得到的补码进行按位取反(即1 011);
第四步,把第三步的操作转为补码(因为敲重点:二进制数在内存中以补码的形式存储!!!,所以就需要把取反后的二进制数,转成补码),但是由于按位取反后变为负数,所以我们需要应用负数的原反补规则,先变成反码(即1 011),然后反码末位+1得到补码(即1 101);
第五步,把得到的补码101转成十进制数就是5,然后符号位是1,故~4结果为-5)。- 快捷公式:~x = -(x+1)
(解决方法参考链接:https://www.cnblogs.com/jniantic/p/12189648.html)
问题2:位运算解释(详细示例转到“二、位运算”)
- &:按位与运算符,参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。
- |:按位或运算符,只要对应的二个二进位有一个为1时,结果位就为1。
- ^:按位异或运算符,当两对应的二进位相异时,结果为1。
- ~:按位取反运算符,对数据的每个二进制位取反,即把1变为0,把0变为1 。
- <<:左移动运算符,运算数的各二进位全部左移若干位,由<< 右边的数字指定了移动的位数,高位丢弃,低位补0。
>>
:右移动运算符,把运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数。
注:bin()函数
bin()函数用于将数字转换为二进制。如果将数字传递给该bin()函数,则它将返回该数字的二进制表示形式。
Python中的二进制数字以0b开头。该bin()函数的结果也以0b开头。
- 三元运算符
学会三元操作符的条件表达式,可以使用一条语句来完成以上的条件判断和赋值操作。
例1.2.2
x, y = 4, 5
if x < y:small = x
else:small = yprint(small) # 4
x, y = 4, 5
small = x if x < y else y
print(small) # 4
-其他运算符
操作符 | 名称 | 示例 |
---|---|---|
in | 存在 | ‘A’ in [‘A’, ‘B’, ‘C’] |
not in | 不存在 | ‘h’ not in [‘A’, ‘B’, ‘C’] |
is | 是 | “hello” is “hello” |
not is | 不是 | “hello” is not “hello” |
例1.2.3
打印判断:
letters = ['A', 'B', 'C']
if 'A' in letters:print('A' + ' exists')
if 'h' not in letters:print('h' + ' not exists')# A exists
# h not exists
比较两个变量均指向不可变类型:
a = "hello"
b = "hello"
print(a is b, a == b) # True True
print(a is not b, a != b) # False False
比较的两个变量均指向可变类型:
a = ["hello"]
b = ["hello"]
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
注意:
- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
-运算符的优先级
操作符 | 描述 |
---|---|
** | 指数(最高优先级) |
~± | 按位翻转,一元加号和减号 |
* / % // | 乘,除,取模和取整除) |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位‘AND’ |
^| | 位运算符 |
<=<>>= | 比较运算符 |
<>==!= | 等于运算符 |
=%=/=//=-=+==*= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
例1.2.4
print(-3 ** 2) #= (-3)^2=-9
print(3 ** -2) #=3^(-2)=0.1111111111111111
print(1 << 3 + 2 & 7) # 0
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
1.3变量和赋值
- 在使用变量之前,需要对其先赋值。
- 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。
- Python 变量名是大小写敏感的,foo != Foo。
例1.3.1
x = "小白的程序人生"
print(x) # 小白的程序人生
x = "大白的程序人生"
print(x) # 大白的程序人生
first = 2
second = 3
third = first + second
print(third) # 5
x1 = "大白的程序人生"
x2 = "小白的程序人生"
x3 = x1 + x2
print(x3) # 大白的程序人生小白的程序人生
1.4数据类型与转换
类型 | 名称 | 示例 |
---|---|---|
int | 整型 | -876, 10 |
float | 浮点型 | 3.149, 11.11 |
bool | 布尔型 | True, False |
- 整型 <class 'int'>
Python 里面万物皆对象(object),整型也不例外,只要是对象,就有相应的属性 (attributes) 和方法(methods)。
例1.4.1
找到一个整数的二进制表示,再返回其长度。
a = 1031
print(bin(a)) # 0b10000000111
print(a.bit_length()) # 11
- 浮点型 <class 'float'>
print(1, type(1))
# 1 <class 'int'>
print(1., type(1.))
# 1.0 <class 'float'>
a = 0.00000023
b = 2.3e-7
print(a) # 2.3e-07
print(b) # 2.3e-07
有时候我们想保留浮点型的小数点后 n 位。可以用 decimal
包里的 Decimal
对象和 getcontext()
方法来实现。
import decimal
from decimal import Decimal
Python 里面有很多用途广泛的包 (package),用什么你就引进 (import) 什么。包也是对象,也可以用上面提到
的 dir(decimal)
来看其属性和方法。比如 getcontext()
显示了 Decimal
对象的默认精度值是 28 位 ( prec=28
),
展示如下:
a = decimal.getcontext()
print(a)
# Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=
[], traps=[InvalidOperation, DivisionByZero, Overflow])
那保留 4 位呢?用 getcontext().prec
来调整精度。
decimal.getcontext().prec = 4
c = Decimal(1) / Decimal(3)
print(c)
# 0.3333
- 布尔型 <class 'bool'>
布尔 (boolean) 型变量只能取两个值, True
和 False
。当把布尔变量用在数字运算中,用 1 和 0 代表 True
和False
。
print(True + True) # 2
print(True + False) # 1
print(True * False) # 0
除了直接给变量赋值 True
和 False
,还可以用 bool(X)
来创建变量,其中 X 可以是
- 基本类型:整型、浮点型、布尔型
- 容器类型:字符、元组、列表、字典和集
bool
作用在基本类型变量: X 只要不是整型 0
、浮点型 0.0
, bool(X)
就是 True
,其余就是 False
。
bool
作用在容器类型变量: X 只要不是空的变量, bool(X)
就是 True
,其余就是 False
。
确定 bool(X)
的值是 True
还是 False
,就看 X 是不是空,空的话就是 False
,不空的话就是 True
。
- 对于数值变量,
0
,0.0
都可认为是空的。 - 对于容器变量,里面没元素就是空的。
- 获取类型信息
- 获取类型信息
type(object)
print(type(1)) # <class 'int'>
print(type(5.2)) # <class 'float'>
print(type(True)) # <class 'bool'>
print(type('5.2')) # <class 'str'>
2.获取类型信息 isinstance(object, classinfo)
print(isinstance(1, int)) # True
print(isinstance(5.2, float)) # True
print(isinstance(True, bool)) # True
print(
这篇关于【天池龙珠计划寒假训练营】python学习笔记(一):从变量到异常处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!