1、turtle是python一个画图库(海龟画图工具):https://blog.csdn.net/weixin_41137248/article/details/81188801
2、在python中实现命令端的数据输入可以使用input
:例如:
def main():
a=int(input("a="))#命令终端输入
b=int(input("b="))
print(a+b)
print("%d + %d = %d"%(a,b,a+b))#用占位符格式化输出的字符串
print("%d // %d = %d"%(a,b,a//b))
main()
3、//
是整除操作 **
是指数操作
for in range循环中range中的参数:
range(101)可以产生一个0到100的整数序列。
range(1, 100)可以产生一个1到99的整数序列。
range(1, 100, 2)可以产生一个1到99的奇数序列,其中的2是步长,即数值序列的增量
4、判断一个数是不是素数:
from math import sqrt
num=int(input("输入值:"))
end=int(sqrt(num))
is_prime=True
for x in range(2,end):
if num%x==0:
is_prime=False
break
if is_prime and num!=1:
print("%d是素数"%num)
else:
print("%d不是素数"%num)
输入两个正整数,计算最大公约数和最小公倍数:
x=int(input("x="))
y=int(input("y="))
if x>y:
x,y=y,x
for factor in range(x,0,-1):
if x%factor==0 and y%factor==0:
print("%d和%d的最小公倍数是%d"%(x,y,x*y // factor))
print("%d和%d的最大公约数是%d"%(x,y,factor))
break
print的参数中end
参数默认是end='\n'
换行,可以进行替换,也就是说此时直接加载前面的值后面
row = int(input('请输入行数: '))
for i in range(row):
for _ in range(i + 1):
print('*', end='')
print()
结果:
*
**
***
****
*****
for i in range(row):
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()
结果:
*
**
***
****
*****
for i in range(row):
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()
结果:
*
***
*****
*******
*********
5、函数中在不确定参数个数的时候,可以使用可变参数:def dea(*args):
Python没有函数重载的概念,同一个py文件下后面的定义会覆盖之前的定义,也就意味着两个函数同名函数实际上只有一个是存在的。
6、字符串的操作:str1.capitalize()
会将str1
的字符串首字母大写,即获得字符串首字母大写的拷贝
str1.upper()
:获得字符串变大写后的拷贝
str1.find('or')
:获得or
在str1
中的位置,即# 从字符串中查找子串所在位置
str2[-3:-1]
:获得字符串倒数第三个到倒数第一个位置,但是不包括倒数第一个的字串
str2[::-1]
:字符串从尾部向前开始,翻转获得
str2.isdigit()
:检查字符串是否由数字构成
str2.isalpha()
:检查字符串是否以字母构成
str2.isalnum()
:检查字符串是否以数字和字母构成
7、列表:
列表添加元素:
list1.append(200)
list1.insert(1, 400)
list1 += [1000, 2000]
删除元素:
list1.remove(3)#这里的3视具体的数,不是下标位置
del list1[0]
清空列表:
list1.clear()
切片:
fruits3 = fruits[:]
:可以通过完整切片操作来复制列表
fruits5 = fruits[::-1]
:可以通过反向切片操作来获得倒转后的列表的拷贝
使用列表的生成式语法来创建列表,但是用列表的生成表达式语法创建列表容器,用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
f = [x for x in range(1, 10)]
面的代码创建的不是一个列表而是一个生成器对象,通过生成器可以获取到数据但它不占用额外的空间存储数据,每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
import sys
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 相比生成式生成器不占用存储数据的空间
Python中还有另外一种定义生成器的方式:yeild
,将一个普通函数改造成生成器函数,yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。return 的作用:如果没有 return,则默认执行至函数完毕,返回的值 。带有yield的函数不仅仅只用于for
循环中,而且可用于某个函数的参数,只要这个函数的参数允许迭代参数(详解链接)
8、sorted和sort
sorted函数返回列表排序后的拷贝不会修改传入的列表
list3 = sorted(list1, reverse=True)
通过key关键字参数指定根据字符串长度进行排序而不是默认的字母表顺序
list4 = sorted(list1, key=len)
sort给列表对象发出排序消息直接在列表对象上进行排序
list1.sort(reverse=True)
9、元组
元组的元素不能修改,所以不可以进行添加、删除、修改操作,正常切片操作是可以的,
a=("sda",12,"ds")
a[0]="qwe"#操作不对
将元组转换成列表
person = list(t)
将列表转换成元组
fruits_list = ['apple', 'banana', 'orange']
fruits_tuple = tuple(fruits_list)
已经有了列表这种数据结构,为什么还需要元组这样的类型呢?
1、元组中的元素是无法修改的,事实上我们在项目中尤其是多线程环境(后面会讲到)中可能更喜欢使用的是那些不变对象(一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误,简单的说就是一个不变的对象要比可变的对象更加容易维护;另一方面因为没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。一个不变对象可以方便的被共享访问)。所以结论就是:如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择。
2、元组在创建时间和占用的空间上面都优于列表。我们可以使用sys模块的getsizeof函数来检查存储同样的元素的元组和列表各自占用了多少内存空间,这个很容易做到。我们也可以在ipython中使用魔法指令%timeit来分析创建同样内容的元组和列表所花费的时间。
10、集合
Python中的集合跟数学上的集合是一致的,不允许有重复元素,因此如果集合中发现有重复元素的话,在进行输出时,会发下这些重复元素最后只出现一次,另外,集合可以进行交集、并集、差集等运算,集合本身并不支持索引操作;集合通过list(集合)
转为列表之后,可以成功取值
set()工厂函数,将列表转换为集合
11、字典
字典是另一种可变容器模型
get方法也是通过键获取对应的值但是可以设置默认值:
scores.get('sqw')
scores.get('sqw', 60)#通过键获取对应的值,设置默认值
删除字典中的元素
scores.popitem()
scores.pop('ddf', 100)