循环
while循环:
while 条件:
循环体
[else:
# 循环正常执行完成后,执行该语句块
# 如果循环被非正常终止,则不会执行else中的代码
]
for循环:
- python中的for循环本质是用来迭代数据的
for 循环控制变量 in 循环条件 :
循环体
补充:
break、continue关键字
- break跳出循环
- continue结束本次循环
range函数
- 可以用来创建一个整数列表
- 基本语法:range(start, stop[, step])
参数 | 作用 | 示例 |
---|---|---|
start | 计数从 start 开始,默认是从 0 开始 | range(5)等价于range(0, 5) |
stop | 计数到 stop 结束,但不包括 stop | range(0, 5) 是[0, 1, 2, 3, 4]没有5 |
step | 步长,默认为1。 | range(0, 5) 等价于 range(0, 5, 1) |
random模块
- 用来生成一个随机数
- 基本语法:
import random
random.random() #生成一个(0-1)之间的数
random.randint(a, b) #生成一个(a-b)之间的数
random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
迭代器
迭代:
- 迭代是通过重复执行的代码处理相似的数据集的过程,并且本次迭代的处理数据要依赖上一次的结果继续往下做,上一次产生的结果为下一次产生结果的初始状态,如果中途有任何停顿,都不能算是迭代。
可迭代对象:
- 可迭代对象并不是指某种具体的数据类型,它是指存储了元素的一个容器对象,且容器中的元素可以通过__iter__( )方法或__getitem__( )方法访问。
迭代器:
- 迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素
容器
容器的定义:
- 容器是一种把多个元素组织在一起的数据结构,是一种数据类型
容器名称 |
---|
list 列表 |
set 集合 |
tuple 元组 |
dict 字典 |
list 列表
定义:
- 列表是一种线性表,在python中没有数组,列表便类似于数组
创建:
- 直接赋值
ls = [1, 2, 3]
- 调用全局函数生成
ls = list() ls = list([1, 3,4,5,5])
列表的使用:
- 访问和修改元素的值
ls = [1, 2, 3]
ls[0] #ls[0]=1
ls[1]=100
ls #ls=[1,100,3]
#括号内为列表下标,可以利用列表下标来访问和修改元素.
#列表的下标从0开始
- 获取元素的个数
ls = [1, 2, 3]
len(ls) # 3
- 遍历(迭代)
ls=[1,2,3]
for i=0 in len(ls):
print(ls[i])
- 嵌套
>>>a = ['a', 'b', 'c']
>>>n = [1, 2, 3]
>>>x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
- 拼接与截取
初始列表:ls=[1,2,3,4],ln=[‘a’,‘b’,‘c’]
示例 | 结果 | 描述 |
---|---|---|
ls[1:3] | [ 2, 3,4] | 将列表中下标为1到3的元素输出 |
ls[::2] | [1,3] | 从第一个元素开始,以2为步长输出元素 |
ls+ln | [1,2,3,4,‘a’,‘b’,‘c’] | 列表拼接 |
ls*4 | [1,2,3,4,1,2,3,4,1,2,3,4] | 列表的重复拷贝 |
2 in ls | True | 判断列表中是否存在此元素 |
- 常用方法与函数
方法(函数)示例 | 解释 |
---|---|
函数: | |
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 将元组转换为列表 |
方法: | |
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表 |
list.pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort( key=None, reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
set 集合
定义:
集合(set)是一个无序的不重复元素序列。
创建:
- 可以使用大括号 { } 或者 set() 函数创建集合
创建一个空集合必须用 set() 而不是 { },{ } 会创建一个空字典。
>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)
{'orange', 'banana', 'pear', 'apple'}
>>> a = set('abracadabra')
>>> a
{'a', 'r', 'b', 'c', 'd'}
操作:
- 添加元素
>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.add("Facebook")
>>> print(thisset)
{'Taobao', 'Facebook', 'Google', 'Runoob'}
- 移除元素
>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.remove("Taobao") #若集合中不存在此元素则会报错
>>> print(thisset)
{'Google', 'Runoob'}
- 计算集合元素个数
>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> len(thisset)
3
- 判断元素是否在集合中
>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> "Runoob" in thisset
True
- 集合内置方法
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
update() | 给集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在 |
discard() | 删除集合中指定的元素 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集 |
union() | 返回两个集合的并集 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False |
issubset() | 判断指定集合是否为该方法参数集合的子集 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
symmetric_difference() | 返回两个集合中不重复的元素集合 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中 |
tuple 元组
定义:
与列表类似,但元组的元素不能修改
创建:
>>> tup1 = (1, 2, 3, 4, 5 )
>>> tup2 = "a", "b", "c", "d"
>>> tup3 =()
>>> tup4 = (50,) #元组中只有一个元素时,需要在元素末尾加“,”否则创建的变量不是元素类型
操作:
元组支持索引、截取、拼接、重复拷贝、迭代、判断存在、等操作(不支持删除与修改)
对元组的操作与对列表的操作相同
tuple(iterable)方法:将可迭代系列转换为元组
dict 字典
定义:
- 字典是另一种可变容器模型,且可存储任意类型对象。
字典中的数据以一种键值对形式存储
键值是唯一的,且为不可变类型(字符串、数字、元组)
创建:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
操作:
- 访问字典里的值
>>>dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>>print (dict['Name']) #若访问的键在字典中不存在,则会报错
Runoob
- 修改字典
>>>dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>>dict['Age'] = 8 # 更新 Age
>>>dict['School'] = "cisco" # 添加信息
>>>print ( dict['Age'])
8
>>>print (dict['School'])
csico
- 删除字典元素
>>>dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>>del dict['Name'] # 删除键 'Name'
>>>dict.clear() # 清空字典
>>>del dict # 删除字典
- 内置方法和函数
函数 | 描述 |
---|---|
len(dict) | 计算字典元素个数,即键的总数 |
str(dict) | 输出字典,以可打印的字符串表示 |
clear() | 删除字典内所有元素 |
copy() | 返回一个字典的浅复制 |
fromkeys() | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 |
setdefault(key, default=None) | 与get类似 |
key in dict | 判断key是否在字典中 |
items() | 以列表返回可遍历的(键, 值) 元组数组 |
keys() | 返回一个迭代器,可以使用 list() 来转换为列表 |
update(dict2) | 把字典dict2的键/值对更新到dict里 |
values() | 返回一个迭代器,可以使用 list() 来转换为列表 |
pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值 |
popitem() | 随机返回并删除字典中的最后一对键和值 |
题目练习:
#求一个数是否是质数(素数)
def num_1(num):
if num > 1:
# 查看因子
for i in range(2,num):
if (num % i) == 0:
return False
else:
return True
else:
return False
------------------------------------------------------
#求50~150之间的质数是那些
def num_2():
for i in range(50,150):
if is_prime(i):
print(i)
------------------------------------------------------
#使用循环完成如下图案的打印
def num_3():
a=int(input("请输入图片编号:"))
if a==1:
q = int(input('输入打印行数:'))
for i in range(0, q):
for j in range(0, i+1):
print('*', end = '')
print()
elif a==2:
q = int(input('输入打印行数:'))
for i in range(0, q):
for j in range(0,q-i):
print(' ', end = '')
for k in range(0, 2 * i+1):
print('*', end = '')
print()
elif a==3:
q = int(input('输入打印行数:'))
for i in range(0, q):
for j in range(0,q-i):
print(' ',end = '')
if i!=0:
print('*',end = '')
if i+1==q:
for k in range(0, 2 * i - 1):
print('*', end = '')
else:
for k in range(0, 2 * i - 1):
print(' ', end = '')
print("*")
elif a==4:
q = int(input('输入打印行数:'))
for i in range(0, q//2):
for j in range(0,q//2-i):
print(' ', end = '')
for k in range(0,2*i+1):
print('*', end = '')
print()
for i in range((q+1)//2, 0,-1):
for j in range(0,q//2-(i-1)):
print(' ', end = '')
for k in range(0,2*i-1):
print('*', end = '')
print()
elif a==5:
q = int(input('输入打印行数:'))
for i in range(0, q//2):
for j in range(0,q//2-i):
print(' ',end = '')
if i!=0:
print('*',end = '')
for k in range(0, 2 * i - 1):
print(' ', end = '')
print("*")
for i in range((q+1)//2,0,-1):
for j in range(0,q//2-(i-1)):
print(' ',end = '')
if i!=1:
print('*',end = '')
for k in range(0, 2 * (i-1)-1):
print(' ', end = '')
print("*")
elif a==6:
q = int(input('输入打印行数(上半部分):'))
for i in range(1, 2*q):
a = q - i
if a < 0:
a = -a
b = q - a
for j in range(a, 0, -1):
print(' ', end = '')
for k in range(1, 2 * b):
if a % 2 and k % 2 == 0:
print(' ', end = '')
else:
print('*', end = '')
print()
else:
return False
------------------------------------------------------
#完整计算器程序
def num_4():
a = eval(input('计算器\n算式:'))
print('结果:',a)
#一个自然数与3的和是5的倍数,与3的差是6的倍数,这个自然数最小是几
def num_5():
a = 0
while True:
a += 1
if (a + 3) % 5 == 0 and (a - 3) % 6 == 0:
print(a)
break
------------------------------------------------------
#在400--500之间求一个数,它被2除余1,被5除余3,被9除余1,这个数是多少
def num_6():
for a in range(400, 500):
m = a % 2
n = a % 5
k = a % 9
if m == 1 and n == 3 and k == 1:
print('这个自然数是', a)
break
------------------------------------------------------
#有一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被3整除,求这样的四位数中最大的和最小的两数各是几
def num_7():
k = 1
for a in range(1,10):
for b in range(1,10):
m = a +b
if m % 3 == 0 and b % 2 == 0:
if k:
print('最小数:{}36{}' .format(a, b))
k -= 1
break
print('最大数:{}36{}' .format(a, b))
------------------------------------------------------
#将列表ls = [1,2,3,4,5,5,5,5,6,4,56,6,67]去重,至少使用两种方式实现
def num_8():
ls = [1,2,3,4,5,5,5,5,6,4,56,6,67]
ls1 = list(set(ls))
print("第一种方法:", ls1)
ls2 = []
for i in ls:
if i not in ls2:
ls2.append(i)
print('第二种方法:',ls2)
------------------------------------------------------
#两个列表进行合并操作
def num_9():
lis_1=[1,2,3,4,5]
lis_2=['a','b','c']
lis_3=lis_1+lis_2
print(lis_3)
------------------------------------------------------
#使用列表判断一个列表是否在另外一个列表中
def num_10():
lis_1=[[1,2],3,[1,2,3]]
lis_2=[1,2]
print(lis_2 in lis_1)
------------------------------------------------------
#列表的反转
def num_11():
lis=[1,2,3,4,5]
lis_0=list(reversed(lis))
print(lis_0)
------------------------------------------------------
#列表的排序
def num_12():
lis=[3,1,6,2,7,5,4,8,4]
lis.sort()
print(lis)
------------------------------------------------------
#实现对列表的增删改查功能
def num_13():
a = [1, 2, 55, 6, 8, 78, 'whi', '1']
k = int(input('请选择功能(1.添加 2.删除 3.更改 4.查找):'))
if k == 1:
a.append(eval(input('请输入元素:')))
elif k == 2:
m = eval(input('请输入元素:'))
for i in a:
if i == m:
a.pop(a.index(m))
break
else:
print('没有这个元素')
break
elif k == 3:
m = int(input('请输入元素位置:'))
a[m-1] = eval(input('请输入改变后的元素:'))
elif k == 4:
print(a.index(eval(input('请输入元素:'))))
else:
print("输入错误")
print(a)
------------------------------------------------------
#如何将0-10随机存入列表中
import random
def num_14():
a = []
b = int(input('请输入存入数量:'))
for i in range(0,b):
a.append(random.randint(0, 10))
print(a)
------------------------------------------------------
#求出元组(90,34,-23,18,12)中的最大值和最小值
def num_15():
a = (90, 34, -23, 18, 12)
max = a[0]
min = a[0]
for i in a:
if i > max:
max = i
if i < min:
min = i
print('最大值',max,'最小值',min)
------------------------------------------------------
#针对列表[90,34,-23,18,12]从小到大进行排序,然后输出排序后结果
def num_16():
a = [90,34,-23,18,12]
a.sort()
print(a)