Task1-变量、运算符、数据类型及位运算

变量、运算符、数据类型及位运算

1.注释

1.1单行注释

  • # 开头,# 右边的所有信息都被当做注释信息

  • 示例代码如下:

 # 这是第一个单行注释
 print("hello python")

为了保证代码的可读性,# 后面建议先添加一个空格,然后再编写相应的注释信息

1.2多行注释

  • 如果希望编写的 注释信息很多,一行无法显示,就可以使用多行注释

  • 在 Python 程序中使用多行注释,可以使用''' '''""" """

  • 示例代码如下:

 """
 这是多行注释
 这是多行注释
 """ 
 print("hello python")

2.运算符

2.1算术运算符

运算符描述实例
+10 + 20 = 30
-10 - 20 = -10
*10 * 20 = 200
/10 / 20 = 0.5
//取整除返回除法的整数部分(商) 9 // 2 输出结果 4
%取余数返回除法的余数 9 % 2 = 1
**次方、乘方,2 ** 3 = 8

2.2比较运算符

运算符描述实例
==检查两个操作数的值是否 相等,如果是,则条件成立,返回 True2 == 2
!=检查两个操作数的值是否 不相等,如果是,则条件成立,返回 True2 != 3
>检查左操作数的值是否 大于 右操作数的值,如果是,则条件成立,返回 True3 > 2
<检查左操作数的值是否 小于 右操作数的值,如果是,则条件成立,返回 True2 < 4
>=检查左操作数的值是否 大于或等于 右操作数的值,如果是,则条件成立,返回 True3 >= 1
<=检查左操作数的值是否 小于或等于 右操作数的值,如果是,则条件成立,返回 True4 <= 5

2.3逻辑运算符

运算符描述
and
or
not
 print((4 > 2) and (4 < 5))  # True
 print((2 > 3) or (9 < 2))  # False
 print(not (2 > 4))  # True

2.4位运算符

运算符描述实例
~按位取反~3
&按位与2 & 3
|按位或1 | 2
^按位异或3 ^ 2
<<左移2 << 3
>>右移8 << 2
 print(bin(~3), ~3)          # -0b100 -4
 print(bin(2 & 3), 2 & 3)    # 0b10 2
 print(bin(1 | 2), 1 | 2)    # 0b11 3
 print(bin(3 ^ 2), 3 ^ 2)    # 0b1 1
 print(bin(2 << 3), 2 << 3)  # 0b10000 16
 print(bin(8 >> 2), 8 >> 2)  # 0b10 2

2.5三元运算符

  • 语法

 条件成立执行的表达式 if 条件 else 条件不成立执行的表达式
  • 实例

 a = 1
 b = 2
 max = a if a > b else b
 print(max)

2.6其他运算符

运算符描述
in存在
not in不存在
is
is not不是

注意:isis not比较的是对象的内存地址,==!=比较的是对象的值内容。

  • 可变对象的比较

 a = [1, 2, 3, 4]
 b = [1, 2, 3, 4]
 print(a is b)  # False
 print(a == b)  # True
  • 不可变对象的比较

 a = (1, 2, 3)
 b = (1, 2, 3)
 print(a is b)  # True
 print(a == b)  # True

可变对象:列表,字典,集合

不可变对象:数字,字符串,元组

2.7运算符优先级

  • 一元运算符优于二元运算符。例如3 ** -2等价于3 ** (-2)

  • 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7

  • 逻辑运算最后结合。例如3 < 4 and 4 < 5等价于(3 < 4) and (4 < 5)

print(-3 ** 2)              # -9
print(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

3.变量

3.1变量的命名和使用

  • 变量名只能包含字母、数字、下划线。变量名可以字母或下划线打头,但不能以数字打头。

  • 不要将python关键字和函数名用作变量名,即不要使用python保留用于特殊用途的单词。

  • 变量名应既简短又可读性强。

  • 命名规范:大驼峰(MyName)、小驼峰(myName)、下划线(my_name)

关键字:

False	None	True	and	as	assert	break	class

continue	def	del		elif	else	except	finally	for

from	global	if	import	in	is	lambda	nonlocal	

not	or	pass	raise	return	try	while	with	yield

3.2变量类型

  • 整型(int

  • 浮点型(float

  • 布尔型(bool

注意:布尔型用作数字计算时,False对应0True对应1

a = 1
b = 3.14
flag = True
print(a, type(a))        # 1 <class 'int'>
print(b, type(b))        # 3.14 <class 'float'>
print(flag, type(flag))  # True <class 'bool'>
print(True + True)       # 2
print(True + False)      # 1
print(True * False)      # 0

3.3类型转换

函数说明
int(x)将 x 转换为一个整数
float(x)将 x 转换到一个浮点数
str(x)将 x 转换到一个字符串
eval(x)计算在字符串中的有效Python表达式,并返回一个对象
a = 1
b = 3.14
str1 = '1234'
c = '1 + 4 / 2 * 3'
print(int(b), type(int(b)))       # 3 <class 'int'>
print(float(a), type(float(a)))   # 1.0 <class 'float'>
print(str(a), type(str(a)))       # 1 <class 'str'>
print(int(str1), type(int(str1))) # 1234 <class 'int'>
print(eval(c))                    # 7.0

3.4获取类型信息

  • type(object):获取类型信息

a = 1
b = 3.14
flag = True
print(a, type(a))        # 1 <class 'int'>
print(b, type(b))        # 3.14 <class 'float'>
print(flag, type(flag))  # True <class 'bool'>
  • isinstance(object, classinfo) :判断一个对象是否是一个已知的类型。

print(isinstance(1, int))  # True
print(isinstance(5.2, float))  # True
print(isinstance(True, bool))  # True
print(isinstance('5.2', str))  # True
  • type(object)isinstance(object, classinfo)区别

class A:
    pass # 空语句,保持程序结构完整性
  
class B(A):
    pass
  
isinstance(A(), A)    # returns True
type(A()) == A        # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False

注意:type(object)不考虑继承关系,不认为子类是一种父类类型

isinstance(object, classinfo) 考虑继承关系,认为子类是一种父类类型

3.5print函数

  • 语法

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按str()方式进行转换为字符串输出;

  • 关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符;

  • 关键字参数end是输出结束时的字符,默认是换行符\n

  • 关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件;

  • 关键字参数flush是立即把内容输出到流文件,不作缓存。

list1 = ['Tom', 'Alice', 'Tony', 'Smith']
for item in list1:
    print(item, end='%')  # 遍历一个元素以%结束
print()
print("helloworld", end='\t')
print("hellokitty")

4.练习

  1. 怎样对python中的代码进行注释?

    答:单行注释或者多行注释对代码进行注释

  2. python有哪些运算符,这些运算符的优先级是怎样的?

    答:Python中运算符分为:算术运算符、比较运算符、逻辑预算符、位运算符、三目运算符以及其他运算符。运算符优先级:一目运算符优先于二目运算符,先算术运算,后移位运算,最后位运算。

  3. python 中 is, is not==, != 的区别是什么?

    答:isis not比较的是对象的内存地址,==!=比较的是对象的值内容。

  4. python 中包含哪些数据类型?这些数据类型之间如何转换?

    答:Python中有整型,浮点型,布尔型,字符串,元组,列表,字典,集合。采用int()float()str()等方法相互转换。

5.位运算

二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。

5.1原码、反码和补码

  • 原码:二进制表示,最高位是符号位

00 00 00 11 -> 3
10 00 00 11 -> -3
  • 反码:正数的反码就是原码,负数的反码是符号位不变,其余位按位取反(对应正数按位取反)

00 00 00 11 -> 3
11 11 11 00 -> -3
  • 正数的补码就是原码,负数的补码是反码+1

00 00 00 11 -> 3
11 11 11 01 -> -3

5.2按位非操作~

~num的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)有符号整数的符号位在 ~ 运算中同样会取反。

a = 4
print(bin(a))   # 0b100  a的补码形式
print(bin(~a))  # -0b101  ~a的补码形式
print(~a)       # -5

5.3按位与操作&

a = 4
b = -5
print(bin(a))   # 0b100  a的补码形式
print(bin(b))   # -0b101 b的补码形式
print(bin(a & b))  # 0b0 a&b的补码形式
print(a & b)    # 0 a&b结果

5.4按位或操作|

a = 4
b = -5
print(bin(a))   # 0b100  a的补码形式
print(bin(b))   # -0b101 b的补码形式
print(bin(a | b))  # -0b1 a|b的补码形式
print(a | b)    # -1 a|b的结果

5.5按位异或操作^

a = 4
b = -5
print(bin(a))   # 0b100  a的补码形式
print(bin(b))   # -0b101 b的补码形式
print(bin(a ^ b))  # -0b1 a^b的补码形式
print(a ^ b)    # -1 a^b的结果

注意:一个数与它本身相异或,结果为0,与0异或,为它本身

5.6按位左移操作<<

num << inum的二进制表示向左移动i位所得的值。

a = 4
b = a << 2
print(bin(a))   # 0b100  a的补码形式
print(bin(b))   # 0b10000 b的补码形式
print(b)        # 16

5.7按位右移操作>>

num >> inum的二进制表示向右移动i位所得的值。

a = 4
b = a >> 2
print(bin(a))   # 0b100  a的补码形式
print(bin(b))   # 0b1 b的补码形式
print(b)        # 1

注意:通过左移和右移操作,可以计算2的倍数问题

  • 两个数交换

# 1.使用^进行两数交换
a = 1
b = 2
a ^= b
b ^= a
a ^= b
print(a)
print(b)
# 2.
a, b = 1, 2
b, a = a, b
print(a)
print(b)
  • a & (-a) 快速获取a(二进制表示)的最后为 1 位置的整数

a = 5
b = 6
print(bin(a))
print(a & (-a))
print(bin(b))
print(b & (-b))

6.练习题

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。尝试使用位运算解决此题。

"""
解决思路:采用异或的交换律以及一个数与0异或是本身,与自己异或是0。
比如 list = [1, 2, 1, 3, 4, 3,4]
0 ^ 1 ^ 2 ^ 1 ^3 ^ 4 ^ 3 ^ 4 = 2
"""
class Solution:
    def singleNumber(self, nums):
        a = 0
        for item in nums:
            a ^= item
        return a

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值