当前位置: 移动技术网 > IT编程>脚本编程>Python > 变量、运算符、数据类型及位运算

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

2020年07月22日  | 移动技术网IT编程  | 我要评论
变量、运算符、数据类型及位运算1.注释在Python中,# 表示注释,作用于整行,在注释中使用换行,新的一行也会被自动注释1.单行注释print('he\aaa\aaa') #heaaaaaa# 这是一个打印语句,请你看见了不要慌张# 这是一个注释# 注释会被解释器所忽略# print(123+456) 这行代码被注释了,将不会执行print('abc') # 这是一个单行注释2.多行注释''' ''' 或者 """ """ 表示区间注释,在三引号之间的所有内容被注释"""

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

1.注释

在Python中,# 表示注释,作用于整行,在注释中使用换行,新的一行也会被自动注释

1.单行注释

print('he\
aaa\
aaa') #heaaaaaa

# 这是一个打印语句,请你看见了不要慌张
# 这是一个注释
# 注释会被解释器所忽略
# print(123+456) 这行代码被注释了,将不会执行
print('abc') # 这是一个单行注释

2.多行注释

''' ''' 或者 """ """ 表示区间注释,在三引号之间的所有内容被注释

""" 
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("hello china") # hello china  

2.运算符

运算符包括:算术运算符、比较运算符、逻辑运算符、位运算符、三元运算符以及其他运算符

1.算术运算符:+ 、-、*、/、//、%、**

# 算术运算符
# + 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作)
# - 减法运算符
# * 乘法运算符(如果将字符串和数字相乘,则会对字符串进行复制操作,将字符串重复指定次数)
# / 除法运算符,运算时结果总会返回一个浮点类型
# // 整除,只会保留计算后的整数位,总会返回一个整型
# ** 幂运算,求一个值的几次幂
# % 取模,求两个数相除的余数

a = 10 + 5 # 计算
a = 'hello' + ' ' + 'world' # 拼串

a = 10 - 5 # 计算
a = 5 - True 
a = a - 2 # 用变量a的值减去2,然后再赋值给a
# a = 'hello' - 'h' TypeError

a = 5 * 5

a = 10 / 5
a = 5 / 2
# a = 5 / 0 ZeroDivisionError: division by zero
a = 10 / 3
a = 10 // 3
a = 5 // 2 

a = 2 ** 2
a = 10 ** 5
a = 16 ** 0.5 # 求16的平方根

a = 10 % 5 # 0
a = 10 % 4 # 2
a = 10 % 3 # 1
a = 10 % 2 # 0

print("a =",a)

2.比较运算符:>、>=、<、<=、==、!=

# 比较运算符
# 比较运算符用来比较两个值之间的关系,总会返回一个布尔值
# 如果关系成立,返回True,否则返回False
# > 比较左侧值是否大于右侧值
# >= 比较左侧的值是否大于或等于右侧的值
# < 比较左侧值是否小于右侧值
# <= 比较左侧的值是否小于或等于右侧的值
# == 比较两个对象的值是否相等
# != 比较两个对象的值是否不相等
#   相等和不等比较的是对象的值,而不是id(即内存地址)
result = 10 > 20 # False
result = 30 > 20 # True
result = 30 < 20 # False
result = 10 >= 10 # True

result = 2 > True # True
# result = 2 > '1' TypeError: '>' not supported between instances of 'int' and 'str'

# 0032 > 0031
result = '2' > '1' # True
result = '2' > '11' # True

# 在Python中可以对两个字符串进行大于(等于)或小于(等于)的运算,
#   当对字符串进行比较时,实际上比较的是字符串的Unicode编码
#   比较两个字符串的Unicode编码时,是逐位比较的
#   利用该特性可以对字符串按照字母顺序进行排序,但是对于中文来说意义不是特别大
#   注意:如果不希望比较两个字符串的Unicode编码,则需要将其转换为数字然后再比较
#   0061 > 0062
result = 'a' > 'b' # False
result = 'c' < 'd' # True
result = 'ab' > 'b' # False

# print(int('2') > int('11'))

result = 1 == 1 # True
result = 'hello' == 'hello' # True
result = 'abc' == 'bcd' # False
result = 'abc' != 'bcd' # True
result = 1 == True # True
print('result =',result)
print(id(1),id(True))

3.逻辑运算符:and、or、not

# 逻辑运算符
# 逻辑运算符主要用来做一些逻辑判断
# not 逻辑非
#   not可以对符号右侧的值进行非运算
#       对于布尔值,非运算会对其进行取反操作,True变False,False变True
#       对于非布尔值,非运算会先将其转换为布尔值,然后再取反
#       
# and 逻辑与
#   and可以对符号两侧的值进行与运算
#    只有在符号两侧的值都为True时,才会返回True,只要有一个False就返回False
#    与运算是找False的
#    Python中的与运算是短路的与,如果第一个值为False,则不再看第二个值
#   
# or 逻辑或
#   or 可以对符号两侧的值进行或运算
#    或运算两个值中只要有一个True,就会返回True
#    或运算是找True的
#    Python中的或运算是短路的或,如果第一个值为True,则不再看第二个值
#   

a = True
a = not a # 对a进行非运算

a = 1
a = ''
a = not a
# print('a =',a)

result = True and True # True
result = True and False # False
result = False and True # False
result = False and False # False

# print(result) 

# True and print('你猜我出来吗?') 第一个值是True,会看第二个值,所以print()会执行
# False and print('你猜我出来吗?')第一个值是False,不会看第二个值,所以print()不会执行


result = True or True # True
result = True or False # True
result = False or True # True
result = False or False # False

# print(result) 
# False or print('你猜我出来吗?') 第一个值为False,继续看第二个,所以打印语句执行
# True or print('你猜我出来吗?') 第一个值为True,不看第二个,所以打印语句不执行

# 非布尔值的与或运算
#   当我们对非布尔值进行与或运算时,Python会将其当做布尔值运算,最终会返回原值
#   与运算的规则
#       与运算是找False的,如果第一个值是False,则不看第二个值
#       如果第一个值是False,则直接返回第一个值,否则返回第二个值
#   或运算的规则
#       或运算是找True的,如果第一个值是True,则不看第二个值
#       如果第一个值是True,则直接返回第一个值,否则返回第二个值    

# True and True
result = 1 and 2 # 2
# True and False
result = 1 and 0 # 0
# False and True
result = 0 and 1 # 0
# False and False
result = 0 and None # 0

# True or True
result = 1 or 2 # 1
# True or False
result = 1 or 0 # 1
# False or True
result = 0 or 1 # 1
# False or False
result = 0 or None # None

print(result)

4.位运算符:~(按位取反)、&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)

# 1、按位或(|):如果两个相应的二进制位有一个为1,则该结果为1,否则为0。
# 2、按位异或(^):如果两个相应的二进制位值不同则为1,否则为0。
# 3、按位与(&):如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。
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

5.三元运算符:

# 条件运算符(三元运算符)
# 语法: 语句1 if 条件表达式 else 语句2
# 执行流程:
#   条件运算符在执行时,会先对条件表达式进行求值判断
#       如果判断结果为True,则执行语句1,并返回执行结果
#       如果判断结果为False,则执行语句2,并返回执行结果

# print('你好') if False else print('Hello')

a = 30
b = 50

# print('a的值比较大!') if a > b else print('b的值比较大!')
# 获取a和b之间的较大值
max = a if a > b else b

print(max)

6.其他运算符:in、not in 、is 、is not

num = str(input("请输入一个字母"))
letters = ["a","b","c"]
if num in letters :
    print(num+" is exist")
else:
    print(num+" is not exist")
if num not in letters :
    print(num + " is not exist")
else:
    print(num + " is exist")

#请输入一个字母a
# a is exist
# a is exist
# 请输入一个字母A
# A is not exist
# A is not exist

# is 比较两个对象是否是同一个对象,比较的是对象的id(内存地址)
# is not 比较两个对象是否不是同一个对象,比较的是对象的id
result = 1 == True # True
result = 1 is True # False
result = 1 is not True # True
print('result =',result)
print(id(1),id(True))

7.运算符的优先级

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

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

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

# 运算符的优先级
# 和数学中一样,在Python运算也有优先级,比如先乘除 后加减
# 运算符的优先级可以根据优先级的表格来查询,
# 在表格中位置越靠下的运算符优先级越高,优先级越高的越优先计算
# 如果优先级一样则自左向右计算
a = 1 + 2 * 3
# 一样 and高 or高
# 如果or的优先级高,或者两个运算符的优先级一样高
# 则需要先进行或运算,则运算结果是3
# 如果and的优先级高,则应该先计算与运算
# 则运算结果是1
a = 1 or 2 and 3
print(a)

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.变量和赋值

  • 在使用变量之前,需要对其先赋值。

  • 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。

  • Python 变量名是大小写敏感的

    # Python中使用变量,不需要声明,直接为变量赋值即可
    a = 10
    
    # 不能使用没有进行过赋值的变量
    # 如果使用没有赋值过的变量,会报错 NameError: name 'b' is not defined
    # print(b)
    
    # Python是一个动态类型的语言,可以为变量赋任意类型的值,也可以任意修改变量的值
    a = 'hello'
    
    # print(a)
    
    # 标识符
    # 在Python中所有可以自主命名的内容都属于标识符
    # 比如:变量名、函数名、类名
    # 标识符必须遵循标识符的规范
    #   1.标识符中可以含有字母、数字、_,但是不能使用数字开头
    #       例子:a_1 _a1 _1a
    #   2.标识符不能是Python中的关键字和保留字
    #       也不建议使用Python中的函数名作为标识符,因为这样会导致函数被覆盖
    #   3.命名规范:
    #       在Python中注意遵循两种命名规范:
    #           下划线命名法
    #               所有字母小写,单词之间使用_分割
    #               max_length min_length hello_world xxx_yyy_zzz
    #           帕斯卡命名法(大驼峰命名法)  
    #               首字母大写,每个单词开头字母大写,其余字母小写
    #               MaxLength MinLength HelloWorld XxxYyyZzz  
    #       
    #   如果使用不符合标准的标识符,将会报错 SyntaxError: invalid syntax    
    _b123 = 20
    # print(_b123)
    
    # print = 123
    # print(print)

4.数据类型和转换

数据类型分为四种:整型、浮点型、布尔型、字符串

1.数值部分:整数、浮点数、复数

# 在Python数值分成了三种:整数、浮点数(小数)、复数
# 在Python中所有的整数都是int类型
a = 10
b = 20
# Python中的整数的大小没有限制,可以是一个无限大的整数
# c = 999999999999999999999999999999999999999999999 ** 100

# 如果数字的长度过大,可以使用下划线作为分隔符
c = 123_456_789

# d = 0123 10进制的数字不能以0开头
# 其他进制的整数,只要是数字打印时一定是以十进制的形式显示的
# 二进制 0b开头
c = 0b10 # 二进制的10
# 八进制 0o开头
c = 0o10
# 十六进制 0x开头
c = 0x10

# 也可以通过运算符来对数字进行运算,并且可以保证整数运算的精确
c = -100
c = c + 3

# 浮点数(小数),在Python中所有的小数都是float类型
c = 1.23
c = 4.56

# 对浮点数进行运算时,可能会得到一个不精确的结果
c = 0.1 + 0.2 # 0.30000000000000004

print(c)

有时候我们想保留浮点型的小数点后 n位。可以用 decimal包里的Decimal对象和getcontext()方法来实现。

import decimal
from decimal import Decimal
decimal.getcontext().prec = 4
b = Decimal(1) / Decimal(3)
print(b) # 0.3333

Python 里面有很多用途广泛的包 (package),用什么你就引进 (import) 什么。包也是对象,也可以用上面提到的dir(decimal) 来看其属性和方法。

2.布尔值、空值(None)

# 布尔值(bool)
# 布尔值主要用来做逻辑判断
# 布尔值一共有两个 True 和 False
# True表示真 False表示假
a = True
a = False
# print('a =',a)

# 布尔值实际上也属于整型,True就相当于1,False就相当于0
# print(1 + False)

# None(空值)
# None专门用来表示不存在
b = None
print(b)

3.检查数据类型

获取类型信息 type(object)

获取类型信息 isinstance(object, classinfo)

# 通过类型检查,可以检查只能值(变量)的类型

a = 123 # 数值
b = '123' # 字符串

# print('a =',a)
# print('b =',b)、

# type()用来检查值的类型
# 该函数会将检查的结果作为返回值返回,可以通过变量来接收函数的返回值
c = type('123')
c = type(a)
# print(type(b))
print(type(1)) # <class 'int'>
print(type(1.5)) # <class 'float'>
print(type(True)) # <class 'bool'>
print(type('hello'))  # <class 'str'>
print(type(None)) # <class 'NoneType'>

print(isinstance(1,int)) # True
print(isinstance(1.5,float)) # True
print(isinstance(True,bool)) # True
print(isinstance('hello',str))  # True
print(isinstance(None,type(None))) # True
  • type() 不会认为子类是一种父类类型,不考虑继承关系。

  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

    如果要判断两个类型是否相同推荐使用 isinstance()

4.数据类型转换:int()、float()、bool()、str()

# 类型转换四个函数 int() float() str() bool()
# int() 可以用来将其他的对象转换为整型
# 规则:
#   布尔值:True -> 1   False -> 0
#   浮点数:直接取整,省略小数点后的内容
#   字符串:合法的整数字符串,直接转换为对应的数字
#           如果不是一个合法的整数字符串,则报错 ValueError: invalid literal for int() with base 10: '11.5'
#   对于其他不可转换为整型的对象,直接抛出异常 ValueError
# float() 和 int()基本一致,不同的是它会将对象转换为浮点数
# str() 可以将对象转换为字符串
#  True -> 'True'
#  False -> 'False'
#  123 -> '123' 
#  bool() 可以将对象转换为布尔值,任何对象都可以转换为布尔值
#   规则:对于所有表示空性的对象都会转换为False,其余的转换为True
#       哪些表示的空性:0 、 None 、 '' 。。。
a = True
# 调用int()来将a转换为整型
# int()函数不会对原来的变量产生影响,他是对象转换为指定的类型并将其作为返回值返回
# 如果希望修改原来的变量,则需要对变量进行重新赋值
a = int(a)
a = False
a = int(a)
a = '123'
a = int(a)
a = 11.6
a = int(a)
a = '11.5'
# a = int(a)
a = None
# a = int(a)
a = 1
a = float(a)
a = False
a = float(a)
a = 123
a = str(a)
a = None
a = bool(a)
print('a =',a)
print('a的类型是',type(a))
# b = 456
# print('hello'+str(b))

5.print()函数

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按str()方式进行转换为字符串输出;
  • 关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符;
  • 关键字参数end是输出结束时的字符,默认是换行符\n
  • 关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件;
  • 关键字参数flush是立即把内容输出到流文件,不作缓存。

默认输出后换行,可通过修改end值实现使其不换行修改sep来分割参数

animals = ['dog', 'cat', 'pig', 'donkey']
for animal in animals:
    print(animal,end="|")
    print(animal,"is an animal",sep=" ")
# dog|dog is an animal
# cat|cat is an animal
# pig|pig is an animal
# donkey|donkey is an animal

6.练习题

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

    **答:**分为单行注释(#)和多行注释(""")两种

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

    **答:**运算符类型有算术运算符、比较运算符、逻辑运算符、位运算符、三元运算符、其他运算符

    ​ 一元运算符优于二元运算符;先算术运算,后移位运算,最后位运算;逻辑运算最后结合。

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

    **答:**is,is not 比较的是两个参数的id(内存地址),而== ,!= 比较的是两个参数的value(值)。

    ​ 1 == True,但是1 is not True。

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

    **答:**数据类型:整型、浮点型、布尔型、字符串

    ​ 类型转换方法:int()、float()、bool()、str()

7.位运算

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

符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。

2.按位非 ~

步骤:

1.先对正数求补码

2.然后对补码取反,包括符号位

3.最后进行一个补码求原码的过程。

print(~-10) #9
  • 下面我们反推计算 (~ -10)
    -10的原码:1111 1010
    -10的反码:1111 0101 (符号位不变)
    -10的补码:1111 0110 (符号位不变,末位+1)
    补码取反:0000 1001 (符号位一起取反)
    这是一个正数,那么我们对其求原码就可得到最终结果?
    因为正数的补码,反码,原码都是一样的 那我们的最终结果是 0000 1001 ,十进制是 9,这与我们前面推算出的结果吻合。

3.按位左移

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

print(11<<2) #44

4.按位右移

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

print(11>>2) #2

5.利用位运算实现快速计算

print(3<<2) #12   相当于3*(2^2)
# 首先^是位异或运算,对应的二进制位同为0或同为1 结果为0 。
# 比如 a = 2 b =1 对应的二进制为a = 10 b=01 ,
# ^dao异或操作所以 a^=b 即 a= a^b 也就是 10^01 = 11
# a变成11b^=a 即 b=b^a 也就是 01^11= 10
# b变成 10a^=b 即 a=a^b 也就是 11^10 = 01
# a变为01 a和b完成交换。
a = 2
b = 1
a ^= b
b ^= a
a ^= b
print(a,b)
# 1 2

8.练习题

leetcode 习题 136. 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

尝试使用位运算解决此题。

题目说明:

"""
Input file
example1: [2,2,1]
example2: [4,1,2,1,2]

Output file
result1: 1
result2: 4
"""

答:

from typing import List

example1 = [2, 2, 1]
example2 = [4, 1, 2, 1, 2]


class Solution:
    def __init__(self):
        pass

    def singleNumber(self, nums: List[int]):
        result = 0
        for item in nums:
            result ^= item
        return result


solution = Solution()
print(solution.singleNumber(example1))

思路:只有一个数字是单独的,相同的两个数字经过按位异或后结果是0,所以将所有数字按位异或后得到的数就是只出现一次的数字。

本文地址:https://blog.csdn.net/weixin_41719200/article/details/107488638

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网