Python基础面试题-01

逻辑运算

# 逻辑运算
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or False and 1
print(v1)       # 1
print(v2)       # 3
print(v3)       # 0
print(v4)       # 1
print(v5)       # 1
print(v6)       # False

'''
运算顺序: () => not => and => or

a or b:
    如果a 为 false 那就是b(甭管b是啥)
    如果a 为 true  那就是a
    
a and b:
    如果a 为 false 那就是a
    如果a为 true   那就是 b

如果多个运算 那就从左到右 依次运算  such as:    v5 = 0 and 2 or 1 or 4  先算 0 and 2 =》 0  再算 0 or 1 =》 1 再算 1 or 4 =》 1
'''

三元运算符

# 三元运算编写格式

# a + b
# () if () else ()   类似于c中的   a > b ? c: d  不过不同的是  python中的条件放到了  中间那个括号
a = 3 if 4 > 3 else 4
print(a)

一行代码交换数值

# 一行代码交换 两个变量的值
a = 10
b = 20
a, b = b, a     # 等号右边 实际上是一组元组
print(a, b)

字符反转

name = 'abced'
print(name[-1::-1])
'''
name[x:y:z]
x 起始位置  包括那个位置  如果 z是1 代表正向  从x开始截取 到y-1  y不写就截取到末尾
如果 z是-1  走代表逆向  x依然是逆向的起始位置  如果你要截取全部 你可以写 name[-1::-1] 或 name[::-1]    
'''

布尔值为false的常见值

# 列举布尔值为False的常见值

print(bool(0))
print(bool(''))  # 空字符
print(bool(list()))  # 空列表
print(bool(tuple()))  # 空元组
print(bool(dict()))  # 空字典
print(bool(set()))  # 空集合
'''常见的数据类型中所有表示为空的东西都能被称之为 False'''


def func():
    pass


print(bool(func()))  # 函数加上() 就是 False
print(bool(func))  # 不加就是 True  下面的类 无论加不加都是True


class mClass(type):  # 给MyClass设置了元类  那么 bool(MyClass)的时候就会去元类判断  然后这里也是false 不然默认也是true
    def __bool__(self):
        return False


class MyClass(metaclass=mClass):
    def __bool__(self):
        return False  # 默认是返回 True  设置这样就会返回False  但是是bool(MyClass())才是


print(bool(MyClass))
print(bool(MyClass()))

is和==区别

# is和==的区别
'''
is 判断的是内存地址的区别
== 判断是是值的区别
'''
list_1 = [1,2]
list_2 = [1,2]
print(list_1 is  list_2)    # 判断的是内存地址
print(list_1 == list_2)     # 只判断值是否相等
a = '你好'
c = '好'
b = '你' + c     # 如果通过变量拼接 那么 a和b的值虽然相等 但是地址不同了
print(id(a))
print(id(b))
print('你好' == a)
print('你好' == b)
print('你好' is a)
print('你好' is b)

不同的三位数

# 1,2,3,4,5 能组合成多少个不相同且无重复的3位数
# 方法一    因为位数不同  不可能重复 直接循环即可得结果
nums = {1,2,3,4,5}
num = 0
for i in nums:
    for j in nums:
        for k in nums:
            num += 1
            print(str(i) +str(j) + str(k))
print(num)
# 方法二   直接遍历所有三位数值  然后将每个数的三位数去重 减去 集合1,2,3,4,5 只要是空 则是满足条件的
nums = {1,2,3,4,5}
list = []
for i in range(100,1000):
    s = set(int(j) for j in str(i))
    if not s-nums:
        list.append(s)
print(len(list))

fromkeys

v = dict.fromkeys(['k1', 'k2'], [])     # 把第一个列表里面的数值当成字典的key  后面的当成它里面的value
print(v)
print(id(v['k1']))
print(id(v['k2']))
'''
他们的内存地址是同一个地方
'''

列表去重

# 一行代码实现删除列表中重复的值
lst = [1,2,3,4,1,2,3]
print(list(set(lst)))

数据类型转换

# 如何实现"1,2,3" 变成 ['1', '2', '3']
s = '1,2,3'
print(list(eval(s)))        # 将 s =》 [1,2,3]
print(s.split(','))         # 将 s =》 ['1','2','3']

# 如何实现['1', '2', '3'] 变成 [1,2,3]
d = ['1', '2', '3']
# 方法一  先拼接成字符串 再通过 eval转换成 元组包数值  再list转换为列表
print(list(eval(','.join(d))))
# 方法二 列表推导式
d = [int(i) for i in d]     # 将 d =》 [1,2,3]
print(d)

一个元素的元组

b = (1)
print(type(b))
c = (1,)        # 加上逗号就是元组  不加则就是数值型
print(type(c))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值