前言
本来我是不想肝了,但是看到了这个,
还有这几个白嫖怪,
虽然我不知道你是谁,但是还是感谢,今天熬个夜来再肝一篇,秋名山路很长,也希望我们能一起走下去!
python入门的进阶知识——运算
运算符
这个知识难亦或是不难,看你想要学到什么程度了,如果是期末不挂科的话,靠上一篇就已经够了,但是绩点嘛,还是要学一点的
位运算符
几乎是每个语言都是一样的,所以说我还是想啰嗦一下,当你开始学算法的时候,会发现这个东西是真的快,天下武功,唯快不破
&按位与 相应位为1,否则为0
|按位或 相应位有一个1,就为1
^按位异或 当俩对应的二进制位相异时,结果为一,
~按位取反,对于每个二进制位取反操作
<< 左移 运算数的各二进位全部左移若干位,高位丢弃,低位补0。
|>> 右移 把">>"左边的运算数的各二进位全部右移若干
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = 0
c = a & b # 12 = 0000 1100
print("1 - c 的值为:", c)
c = a | b # 61 = 0011 1101
print("2 - c 的值为:", c)
c = a ^ b # 49 = 0011 0001
print("3 - c 的值为:", c)
c = ~a # -61 = 1100 0011
print("4 - c 的值为:", c)
c = a << 2 # 240 = 1111 0000
print("5 - c 的值为:", c)
c = a >> 2 # 15 = 0000 1111
print("6 - c 的值为:", c)
逻辑运算符
and or not
3个,按照字面意思来理解
成员运算符
in x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True
这个还是有用的,在c++中要单独定义函数
list1 = [1,2,3,4,5]
x=1
y=10
if(x in list1):
print("a in list")
if(y not in list1):
print("b not in list")
身份运算符
这个涉及到了对象,在期末编程解决问题的时候不用也能解决,
运算符的优先级问题
这个的考察形式有点像当年奥赛初赛的考察形式,就是 阅读程序写答案的题,不能用电脑啊!,所以说要 记忆
字符串加强
不得不说字符串的函数太多了,和c++还是有区别的,比c++多,使用也有些许不同,我根据题库来挑几个常用的,不要全记了,实在不会的话,暴力来解决,循环字符串,if判断,来达到自己的需求
合并,索引基本操作上一篇已经写过了,所以这一篇我们来说一点比较有用的东西,全学完可能有点困难,毕竟我们的目标是:不挂科\ 转义:注意'\n'换行操作
r'\n'输出\n.
具体定义如下:
原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。
a = "Hello"
b = "Python"
print("a + b 输出结果:", a + b)
print("a * 2 输出结果:", a * 2)
print("a[1] 输出结果:", a[1])
print("a[1:4] 输出结果:", a[1:4])
if( "H" in a) :
print("H 在变量 a 中")
else :
print("H 不在变量 a 中")
if( "M" not in a) :
print("M 不在变量 a 中")
else :
print("M 在变量 a 中")
print (r'\n')
print (R'\n')
难点
格式化字符串,有点像强制转换的意思,了解即可,写题中可以不使用
常用的格式化字符串符号有以下几个
%c:格式化字符及其ASCII码
%s: 格式化字符串
%d:格式化整数
%o: 格式化无符号八进制数
%x:格式化无符号十六进制数题外话:在 Python 中,字符串格式化使用与 C 中 printf 函数一样的语法。
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
内置函数
🤣多啊,怎么记?我就说一下我记的几个吧,感觉这几个还经常使用
find 查找:检测字符串中是否包含子字符串 str
语法:str.find(str, beg=0, end=len(string))
其中:str -- 指定检索的字符串
beg -- 开始索引,默认为0。
end -- 结束索引,默认为字符串的长度。
也就是说我们可以这样写
str1 = "Runoob example....wow!!!"
str2 = "exam";
print (str1.find(str2))
print (str1.find(str2, 5))
print (str1.find(str2, 10))
通过len()函数返回字符串的长度
text='python'
len(text)
当你上面的都没有记住时,请记住replace这个函数 替换
s = 'abc12321cba'
print(s.replace('a', ''))
也就相当于一个删除操作,将s中的a都替换为" "
该字符串在Python中是不可变的,因此此函数将返回一个新字符串,而原始字符串将保持不变。
列表
这块注意索引,python中的列表更像c中数组的超集
从头开始
从尾开始
常用操作
插入,删除,还是一样的知道函数容易做,不知道函数也能做,索引+循环+判断,自己造一个出来就行了, 列表允许修改增加:append() 方法用于在列表末尾添加新的对象。
list = ['Google', 'Runoob', 1997, 2000]
print ("第三个元素为 : ", list[2])
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2])
list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1)
删除:del 语句
list = ['Google', 'Runoob', 1997, 2000]
print ("原始列表 : ", list)
del list[2]
print ("删除第三个元素 : ", list)
如果你一个函数都不记的话也不是不行,,然后我们循环来写
#for 循环内部使用变量 in 列表
name_list = ["zhangsan","lisi","wangwu"]
for name in name_list:
# 循环内部针对列表元素进行操作
print(name)
元组
元组与列表最大的不同,就是元组不允许修改,在python中提供了一个函数可以将元组修改为列表
list() 方法用于将元组或字符串转换为列表。
相当于一个 强制转换
#元组转换列表
aTuple = (123, 'Google', 'Runoob', 'Taobao')
list1 = list(aTuple)
print ("列表元素 : ", list1)
#字符串转换列表
str="Hello World"
list2=list(str)
print ("列表元素 : ", list2)
选看:元组为什么不能修改
我们从内存的角度来看
>>> tup = ('r', 'u', 'n', 'o', 'o', 'b')
>>> tup[0] = 'g' # 不支持修改元素
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> id(tup) # 查看内存地址
4440687904
>>> tup = (1,2,3)
>>> id(tup)
4441088800 # 内存地址不一样了
重新赋值的元组 tup,绑定到新的对象了,不是修改了原来的对象
字典和集合
考察的也不多,出来基本上没有编程大题,所以秉承着不挂科的原则,我就不说了,我们来看条件语句+循环语句,这个才是期末考试的重点
条件控制
这个应该是高中学过的吧🤞
if a:
print(a)
elif b:
print(b)
else:
print(c)
如果a为true,打印a
如果a为false,但是b为true,打印b
如果a,b都为false,则打印c
记得加 : 使用缩进来区分
简单的猜数字案例
number = 7
guess = -1
print("数字猜谜游戏!")
while guess != number:
guess = int(input("请输入你猜的数字:"))
if guess == number:
print("恭喜,你猜对了!")
elif guess < number:
print("猜的数字小了...")
elif guess > number:
print("猜的数字大了...")
if 嵌套
在嵌套 if 语句中,可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中。
num=int(input("输入一个数字:"))
if num%2==0:
if num%3==0:
print ("你输入的数字可以整除 2 和 3")
else:
print ("你输入的数字可以整除 2,但不能整除 3")
else:
if num%3==0:
print ("你输入的数字可以整除 3,但不能整除 2")
else:
print ("你输入的数字不能整除 2 和 3")
循环语句
格式:while 判断条件:
执行语句……
值得注意的一点是python中没有do……while……循环
例题:
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n,sum))
还记得我高中最开始学循环的时候,有的算法题目不会,提交的时候给它整一个死循环,来个玉石俱焚
var = 1
while var == 1 : # 表达式永远为 true
print(var)
for语句:
for 循环可以遍历任何可迭代对象,如一个列表或者一个字符串
languages = ["C", "C++", "Perl", "Python"]
for x in languages:
print (x)
当你入门的时候,应该用过这样一个函数,range(),目的就是生成一个数列
for i in range(5,9)#区间
print(i)
for i in range(5)
print(i)
for i in range(0,10,3)#间隔3,也可以说是步长为3
print(i)
break和continue和else
break
n = 5
while n > 0:
n -= 1
if n == 2:
break
print(n)
print('循环结束。')
continue
n = 5
while n > 0:
n -= 1
if n == 2:
continue
print(n)
print('循环结束。')
例子:
循环字符串 Runoob,碰到字母 o 跳过输出
for letter in 'Runoob': # 第一个实例
if letter == 'o': # 字母为 o 时跳过输出
continue
print ('当前字母 :', letter)
var = 10 # 第二个实例
while var > 0:
var = var -1
if var == 5: # 变量为 5 时跳过输出
continue
print ('当前变量值 :', var)
print ("Good bye!")
对比之下,可以变成检测字符串中是否有一个字符,也就是我们,上面记忆的函数,所以我才敢说字符串函数不用全部记忆
else:循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被 break 终止时不执行。
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, '等于', x, '*', n//x)
break
else:
# 循环中没有找到元素
print(n, ' 是质数')
pass语句:这个是为了程序的完整性而出现的,没有实际的意义
for letter in 'Runoob':
if letter == 'o':
pass
print ('执行 pass 块')
print ('当前字母 :', letter)
print ("Good bye!")
最后
还是老样子,原创不易,求个三连,感谢各位的支持,我是那个陪你头秃,陪你变强的小码民!