今天所学知识点:
今天所学不多,但对于小白来说可能有点难,有点蒙,有点基础的我还是略懂略懂
首先今天想通了昨天的10级台阶:10级台阶,一次走1到3次,一共有多少种走法
和汉诺塔:一共三个柱子,把一个摞着n个盘子从下往上按照从大到小顺序排列柱子,按照相同的规则摆放在另一个柱子上,规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘
emmmmm。。。。只可意会不可言传,就不说代码思路了
-
列表
列表就是一个保存大量数据的容器
有了列表容器我们可以使用1个变量来保存多个数据
更为重要的是我们可以使用循环对列表中保存的数据进行操作
-
斐波那契 序列
又称黄金分割数列 - 倒数第二个数除以最后一个数等于黄金分割率
1,1,2,3,5,8,13,21,....
def fib():
#斐波拉契 序列
fib_list = [1,1]
for i in range(2,20):
fib_list.append(fib_list[i-1]+fib_list[i-2])
print(fib_list)
-
列表的CRUD操作
即 creat read update delete
f =[100, 200, 500]
f.append(123)
f.insert(1,300)
if 5000 in f:
f.remove(5000)
del f[1]
f.clear()
print(f.index(500,3,5))
print(f.pop())
print(f)
-
python内置的排序方式默认都是排升序(从小到大)
-
如果希望排列成降序(从大到小)可以通过reverse参数来指定
-
python中的函数几乎都是没有副作用的函数
-
调用函数之后不会影响传入的参数
def foo():
f = ['orange','apple','banana','pitaya','blueberry','internationalization']
f2 = sorted(f,reverse = False)
f3 = sorted(f,key=len,reverse = True)
print(f)
print(f3)
print(f2)
两大金句:
时间和空间是不可调和的矛盾
软件和硬件在逻辑上是等效的
-
用列表的生成表达式语法创建表容器
用这种语法创建列表知否元素已经准备就绪所以需要耗费较多的内存空间
f = [x ** 2 for x in range(1,10)]
-
列表生成器 这里得到的不是一个列表 而是一个生成器对象
通过生成器可以获取到数据 它不占用额外的空间存储数据
每次需要数据的时候就通过内部的运算得到数据,需要花费额外的时间
f = (x ** 2 for x in range(1, 10))
-
计算内存占用的函数
import sys
print(sys.getsizeof(f))
-
计算机内存:
栈(stack) 堆(heap) 静态区
对象 - 放在堆上 - 获取更大的存储空间
变量 - 对象的引用 - 存储的是对象的地址 - 放在栈上
id()函数和is运算符 - 验证身份
a = 1000000000000000999999999
b = 1000000000000000999999999
print(id(a))
print(id(b))
print(a is b)
list1 = [x for x in range(1,10)]
list2 = list1
list3 = list1[:]
print(list1 is list2)
print(list1 is list3)
-
双色球练习- 6个红色球(1-33)和1个蓝色球(1-16)
def lottery():
"""
随机选双色球号的函数
:return: 7个随机号的列表
"""
qiu = []
while True:
hong_qiu = randint(1,33)
if hong_qiu in qiu:
continue
qiu.append(hong_qiu)
if len(qiu) == 6:
break
qiu.sort()
lan_qiu = randint(1,16)
qiu.append(lan_qiu)
return qiu
def print_ball(qiu):
#输出球号的函数
for i, ball in enumerate(qiu):
if i == len(qiu)-1:
print('|', end=' ')
print('%02d' % ball, end=' ')
print()
if __name__ == '__main__':
num = int(input('请输入机选张数:'))
for i in range(num):
老师写的
def random_select():
red_balls = [x for x in range(1, 34)]
selected_balls = []
for _ in range(6):
index = randrange(len(red_balls))
selected_balls.append(red_balls[index])
del red_balls[index]
selected_balls.sort()
selected_balls.append(randint(1, 16))
return selected_balls
今天作业不多,就两个,但思路多,有点意思
-
设计一个函数计算传入的成绩列表的平均分要求去掉一个最高分和一个最低分
def main():
names = ['刘备','张飞','关羽','曹操','赵云','周瑜','袁绍']
sorce = []
for name in names:
sorce.append(int(input('请输入%s的成绩:' % name)))
max_sorce = min_sorce = sorce[0]# 最大最小分数数值
max_index = []# 最大分数索引
min_index = []# 最小分数索引
total = 0 # 总分
for i,val in enumerate(sorce):
if val > max_sorce:
max_sorce = val
elif val < min_sorce:
min_sorce = val
total += val
#判断并列情况
for i, vall in enumerate(sorce):
if vall == max_sorce:
max_index.append(i)
if vall == min_sorce:
min_index.append(i)
for i in range(len(max_index)):
print('%s是最高分:%d'%(names[max_index[i]],max_sorce))
for i in range(len(min_index)):
print('%s是最低分:%d'%(names[min_index[i]],min_sorce))
print('平均分:%.1f'%((total-max_sorce-min_sorce)/len(sorce)-2))
-
设计一个函数从传入的列表中找出第二大的元素(只能使用1次循环)
def bar():
list1 = ['55', '55', '55', '55', '55', '55', '55']
list2 = sorted(list1,reverse = True)#从大到小排序
for i in range(len(list2)-1):
if list2[i] != list2[i+1]:#判断是否有一样大的数
return list2[i+1]
return '没有第二大的数'
网友评论