python 学习笔记 task1

python 学习笔记

练习题

1,怎样对python中的代码进行注释?
答:单行开头用#注释,即#注释的内容,多行用三个单引号或双引号注释,即’’'注释的内容 ‘’'

2,python有哪些运算符,这些运算符的优先级是怎样的?
答:算术运算符,比较运算符,逻辑运算符,位运算符,三元运算符,其他运算符,优先级别为一元(正负)>二元(算术运算)>移位>位>比较>逻辑>三元

3,python 中 is, is not 与 , != 的区别是什么?
**答:is, is not 对比的是两个变量的内存地址
, != 对比的是两个变量的值
比较的两个变量,指向的都是地址不可变的类型(数字,字符串,元组),那么is,is not 和 ==,!= 是完全等价的。对比的两个变量,指向的是地址可变的类型(列表,字典,集合等),则两者是有区别的。**

#比较的两个变量均指向地址不可变类型。包括数字,字符串,元组
a = "hello"
b = "hello"
print(a is b, a == b)  # True True
print(a is not b, a != b)  # False False
print('a的地址是:',id(a))
print('b的地址是:',id(b))
#比较的两个变量均指向地址可变类型。包括,列表,字典,集合
c = ["hello"]
d = ["hello"]
print(c is d, c == d)  # False True
print(c is not d, c != d)  # True False
print('c的地址是:',id(c))
print('d的地址是:',id(d))

结果为:
True True
False False
a的地址是: 2073353301944
b的地址是: 2073353301944
False True
True False
c的地址是: 2073352458888
d的地址是: 2073352525064

4,python 中包含哪些数据类型?这些数据类型之间如何转换?
答:数据类型:
基本类型:整型、浮点型、布尔型;容器类型:字符串、元组、列表、字典和集合,转换方式就是用转换后对象的函数名,如转换为整型 int(‘10’)=10

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

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

Output file
result1: 1
result2: 4
"""

经过愚蠢的思考,写出来了一个蠢萌的结果:

def singleNumber(List):
    n = len(List)
    for i in range(n):
        v = 1
        num = List[i]
        if i > 0 and i < n-1:
            for j in range(i):
                v *= num^List[j]
            for j in range(i+1, n):
                v *= num^List[j]
            if  v:
                return num
        elif i == 0:
            for j in range(1,n):
                v *= num^List[j]
            if  v:
                return num
        else:
            for j in range(n-1):
                v *= num^List[j]
            if  v:
                return num            

思路就是每次循环一个值,分别和别的数做异或,结果相乘。如果全部非零,就返回这个值。但是总觉得很蠢,又臭又长
查找了一下资料,才明白异或还可以这么用:
交换律:a ^ b ^ c <=> a ^ c ^ b
任何数于0异或为任何数 0 ^ n => n
相同的数异或为0: n ^ n => 0

A^B^A: = A^A^B = B

# 第二版代码
def singleNumber_ed2(List):
    v = 0
    for i in List:
        v = v^i
    return v    

1、输入输出

>>>num1 = input('请输入第一个数字:')
#请输入第一个数字:10
>>>print('aaaa',end='')
print('bbb')
#aaaabbb
#print中默认末尾的结束符默认是换行,现在指定为空,所以不换行,继续执行下一个print
>>>print('aaa\nbbb')
#aaa
#bbb
#print中\n表示换行,\t的意思是横向跳到下一制表符位置, 相当于按了一次tab键
>>>name = input('请输入你的名字:')
QQ = input('请输入你的QQ:')
telphone = input('请输入你的手机号:')
address = input('请输入你的地址:')
print('你输入的信息是:')
print('-------------')
print('姓名:%s'%name)
print('QQ:%s'%QQ)
print('手机号:%s'%telphone)
print('公司地址:%s'%address)
#请输入你的名字:小雅
#请输入你的QQ:142536362
#请输入你的手机号:1253634517
#请输入你的地址:湖南省长沙
#你输入的信息是:
-------------
#姓名:小雅
#QQ:142536362
#手机号:1253634517
#公司地址:湖南省长沙
#print中%d,%s等为占位符,用于格式化输出,取值为第二个%后内容

2、运算符

算术运算符为:‘+,-,*,/,//(整除),%(取余),**(乘方)’
比较运算符:‘<, >, <=, >=, ==, !=’
逻辑运算符:‘and, or, not’
位运算符:‘~, &,|,^,<<,>>’分别为取反,取与,取或,异或,左移,右移
三元运算符:

>>>x, y = 4, 5
small = x if x < y else y
print(small)
#4

其他运算符:‘in,not in,is ,is not’
补充说明:比较难懂的是位运算,位运算就是数字的二进制形式按二进制的每一位进行运算,

#位运算(基于二进制的运算)
>>>print(bin(5),5)
print(bin(-5),bin(~5),-5,~5)#非的运算看下面的文字解释
# 可类似理解为,python中0当作了1,所有的数往后延了一个,所以n的相反数为-(n+1)
print(bin(4&5),4&5)
#按二进制的每一位来进行'与',4=100,5=101,4的零位是0,相当于假,5的零位为1,相当于真,两个做'与'为假,因此为0,第二位都为1,为真,因此为100
print(bin(4|5),4|5)#101
print(bin(4^5),4^5)#001
print(bin(4<<2),4<<2)#0b10000,16
#左移公式为x左移n位,变为x*(2**n)
print(bin(4>>2),4>>2)#0b1,1
print(bin(4>>3),4>>3)#0b0,0
#右移公式类似左移,x右移n位,变为x/(2**n),但是当值小于1时,认定为0
#0b101 5
#-0b101 -0b110 -5 -6
#0b100 4
#0b101 5
#0b1 1
#0b10000 16
#0b1 1
#0b0 0
赋值运算符
a+=b等价于a = a+b,类似有a-=,a*=,a/=
#其他运算符,
>>>letters = ['A', 'B', 'C']
if 'A' in letters:
    print('A' + ' exists')
if 'h' not in letters:
    print('h' + ' not exists')
#比较的两个变量均指向地址不可变类型。包括数字,字符串,元组
a = "hello"
b = "hello"
print(a is b, a == b)  # True True
print(a is not b, a != b)  # False False
print('a的地址是:',id(a))
print('b的地址是:',id(b))
#比较的两个变量均指向地址可变类型。包括,列表,字典,集合
c = ["hello"]
d = ["hello"]
print(c is d, c == d)  # False True
print(c is not d, c != d)  # True False
print('c的地址是:',id(c))
print('d的地址是:',id(d))
'''
is, is not 对比的是两个变量的内存地址
==, != 对比的是两个变量的值
比较的两个变量,指向的都是地址不可变的类型(数字,字符串,元组等),那么is,is not 和 ==,!= 是完全等价的。
对比的两个变量,指向的是地址可变的类型(列表,字典,集合等),则两者是有区别的。
'''
#运算符的优先级
'''一元运算符优于二元运算符。例如3 ** -2等价于3 ** (-2)。
先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于(1 << (3 + 2)) & 7。
逻辑运算最后结合。例如3 < 4 and 4 < 5等价于(3 < 4) and (4 < 5)。'''
print(1 << 3 + 2 & 7)#0
'''A exists
h not exists
True True
False False
a的地址是: 2073353301944
b的地址是: 2073353301944
False True
True False
c的地址是: 2073352458888
d的地址是: 2073352525064
0
'''

移位运算解释

移位运算就是二进制的运算,二进制有三种不同的表示形式:原码、反码和补码,Python中的整型是补码形式存储的。。原码就是其二进制本身,最高位也就是最左边那一位为符号位,1表示负数,0表示正数,顺序读法为从右像左看。正数的原码、反码、补码都是一样的,都为二进制本身,如3的原、反、补都是00 00 00 11。负数是通过其对应的正数来看的,负数的反码是,除符号位外,其余位是对应正数位取反,1变为0,0变为1,如-3的反码是11 11 11 00;而负数的补码就是其反码加1,-3的补码也就是11 11 11 01。
因为按位非就是把数字的补码全部取反,符号位也要,从公式来说,

>>>#布尔型
'''布尔 (boolean) 型变量只能取两个值,True 和 False。当把布尔型变量用在数字运算中,
用 1 和 0 代表 True 和 False。
数据类型:基本类型:整型、浮点型、布尔型,容器类型:字符串、元组、列表、字典和集合
bool 作用在基本类型变量:X 只要不是整型 0、浮点型 0.0,bool(X) 就是 True,其余就是 False
bool 作用在容器类型变量:X 只要不是空的变量,bool(X) 就是 True,其余就是 False。
'''
print(type(''), bool(''), bool('python'))
# <class 'str'> False True
print(type(()), bool(()), bool((10,)))
# <class 'tuple'> False True
print(type([]), bool([]), bool([1, 2]))
# <class 'list'> False True
print(type({}), bool({}), bool({'a': 1, 'b': 2}))
# <class 'dict'> False True
print(type(set()), bool(set()), bool({1, 2}))#集合
# <class 'set'> False True
#获取数据类型,Type和isinstance()都可,如果要判断两个类型是否相同推荐使用 isinstance()。
#类型转换
'''转换为整型 int(x, base=10)
转换为字符串 str(object='')
转换为浮点型 float(x)
eval()为去掉字符串
'''
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值