2019-08-24
2019-08-24 本文已影响0人
木马音响积木
暑假第二期,第8部分,一步一步来
从简单到复杂,从一维到多维
一步一步上台阶.jpg
当读到这个文章的时候,我们假设你已经能够写出,第一道题了。
从1+2+3 不断累加下去,到了141 ,得到10011,终于大于1万了。
# i 记录当前累加到多少了
i = 0 #必须一个变量赋值占一行
# sum2 记录当前的累加总和
sum2 = 0
while sum2 < 10000: #冒号 千万别忘记
i = i + 1 #缩进 千万别忘记
print(i) # 观察变量的变化
sum2 = sum2 + i
print(sum2) # 观察变量的变化
print("跳出循环了")
print(i)
print(sum2)
当我们玩游戏的时候,刚刚打败一个怪兽,就想给我一个再强一点的,刚才的那个怪兽太菜了,哈哈。傲娇的姿态摆好
2、现在难度增加一个台阶,
当求得i (141)后,sum2 继续向后累加i(141)次,输出累加和
想起来了,老师上课说的递推
第二个问题的答案,依靠第一个问题的结果,遇到这种问题,坚持一步一步来;
#接上面程序
#设置取值范围
for k in range(i+1,i+i+1): # k 从142 到282
sum2 = sum2+ k
print(k)
print(sum2)
sum2 现在是39903 ,
3、再上一个台阶,求出 从2 到 这个累加和 (也就是39903)之间的所有素数,放到列表里,打印输出列表,并打印输出列表长度,还有打印列表的最后一个元素;
继续写程序,接上面
lower =2 #挤压,收缩边界
upper = sum2 # 接上第二步得到的数 ,39903
#演示函数的使用有效降低缩进层数
def is_sushu(aa): #aa是参数
"""本函数判断一个整数是否为素数,
如果是,返回值为True
"""
for i in range(2,aa): #i 取值最大=aa-1
if (aa % i) == 0:
break
else: #等在学校门口的妈妈
return True # aa是素数
#准备个列表,用于输出
lala=[]
for num in range(lower,upper + 1):
# num大于 1 并且是素数时
if num > 1 and is_sushu(num):
#print(str(num)+"是素数")
lala.append(num) #是素数就装入列表lala
print(lala)
print(len(lala)) #4196
print(lala[-1]) #39901
4、现在由于列表的数据较多,(4196个),请序列化,写入一个文件,文件名为lala.pkl ,以后写程序调用时,直接打开这个文件即可。
如果程序中包含一个有4000多个元素的列表,可想而知,程序读起来,太差了。
继续写代码,接上面
import pickle #最好放到程序的最前头
import sys,os
#该文件放在你的当前目录中
print(os.getcwd())
output = open('lala.pkl', 'wb')
# Pickle lala 把lala 列表,写入lala.pkl 文件中
pickle.dump(lala, output) #调用dump函数
output.close() #打开的文件,必须关闭
lalawenjian.png
写到硬盘上去了,满满的成就感。
5、假设取到别人给你的序列化文件,是个列表,求出列表的累加和
import pickle,pprint
#使用pickle模块从文件中重构python对象
pkl_file = open('lala.pkl', 'rb')
list2 = pickle.load(pkl_file)
#pprint.pprint(data1)
#把这些素数累加起来
sum55 = 0
for gg in list2: #列表的遍历
sum55 = sum55 + gg
print(sum55) #78890925 最后结果
pkl_file.close()
只所以,没有打印,如果打印了,会是长长的 一大串,
程序本来可以这么短,所以,序列化很有用。特别是列表有几十万数据以上时。
好了,同学们,我们爬上5楼了,你的计算结果对了么?
一步一步来,程序都理解了么?
学会编程了么?遇到多一维的自己了吗?
不要,不要记住, ,你多学一样本事,就少说一句求人的话!
其实,老师一直相信,一步一步,带着你,可以爬上小山,看见更美的景色。
山顶看日出.jpg