说明

忠实记录我的探索过程

170107

刚处理完Chap0的作业,竟然已经有小伙伴提交Chap1的作业,同侪压力满满。有了Data103的经验,告诉自己,还是要按照自己的节奏走起,“步子太大容易扯着蛋”。

获取文件

着急坐火车,想在火车上继续研究作业,匆匆忙忙下载了代码。好久不用两个源的方式,有些生疏了。

git add upstream [email protected]:AIminder/Py103
git fetch upstream master
git pull upstream mastter

以后还是得写一篇博客,讲解相关的代码。不过现在的好处是自己不再会犯当初刚开始使用Github的低级错误,然后搜索一大堆不了解的代码犯下更多的错误,把自己带入“知识的迷坛“。

熟悉题目

昨天刚读完“怎样解题”,今天就用上了,首先要熟悉题目,看了好几遍卡包的内容。首先要把文件读入,lpthw中有实践过open&read文件。然后是对内容进行搜索,一开始自己想到的是用文字直接硬搜索,卡包给出了更“聪明”的做法,或许应该是更常规的做法,把文件处理为字典型的数据,如何处理,还需要琢磨一下,后面的打印、退出应该问题不大,到时候查文档就可以解决掉。

初步规划

按照《怎样解题》的方法去系统化的处理该问题:审题,搞清楚已知条件和未知数据之间的关系。这里还需要大量的查找文档丰富我的知识点。 更重要的步骤是回顾,《怎样解题》中对回顾的理解是自己以前没有做到的。完成题目才是真正的探索开始,首先回顾自己用到了哪些函数和方法,思路是什么,然后思考是否可以换一个思路来完成这道题目,最后还要尝试重构这道题,换一个场景,自己模拟一个新的案例来实现。并且把内容吸收到自己的案例中,写成博客。初步估计回顾的环节可能会花费更长的时间,这一周的线下活动要在自己完成作业并组织了初步回顾之后执行。

想到了这么多,终于可以安心的睡去了。

170108

前两天在家睡的太多,火车上睡不着,又不得不睡觉,很不舒服。一大早起来,唯有编程让自己的大脑活跃起来。依靠着之前的记忆直接写函数:

open("weather_info.txt")
read("weather_info.txt")

read函数报错,应该是python3 与 python2的差异导致的。回去查文档,火车上实在不方便,连接了手机,搜索input,找到卡包里对应的文档查看,丰富背景知识。

  • open是python3默认的内置函数,和python2是一样的。
  • read是open函数返回的object的内置方法。

问题处理

给出最后处理完的代码,再来说解决问题的过程。

a = open("weather_info.txt")
print(a.read())
#a.close()

b = open("test_open.txt")
aaa = b.read()
b.readline()
print(b.name)
print(aaa)

根据7. Input and Output修正代码之后发现不报错,但是终端并不打印。自己开始怀疑各种情况,并进行实验:

  • 是不是中文导致的
  • 是不是因为内容太多了
  • 是不是打印函数的问题?
  • 是不是Python3内部小版本的问题?

170109

问题解决

一大早六点半起来就想这件事情,Google了一下,发现问题在于没有把结果赋值给变量,因为read()函数默认是不带打印功能的。 心中现在最大的疑惑是:为什么官方文档会这么写呢?,有点费解,因为按照这样的代码是得不到提供的结果的。

探索字典型数据

感谢课程组提供的卡片,其实我在数据读入之后一直很懵逼,到底要如何做下一步的搜索和展示呢,看到了卡片标题,立刻去搜素官方文档的内容,关于字典型数据结构的介绍提到对于自带英文逗号的可以轻松的转换为字典型。所以下面进行尝试。

JSON方法进行数据的解析 官方文档部分原理大致理解,细节执行一直报错。Google搜索案例了解细节。问题的处理过程转向了解JSON的编码和解码。

dumps vs dump , loads vs load

明确了基本的JSON语法之后,考虑对文本文件修改为dict的格式

with语法?

重新梳理了思路

经过了上面的过程,思路大概清楚了

  • 读入文件
  • 把文件格式化为JSON可以还原为字典的文本格式(或者有便捷方法直接做到)
  • 利用JSON还原字典型Python数据
  • 读入字典型数据
  • 后续的查询、数据读入、打印输出、数据的记录等等(稍后思考)

目前清楚的是JSON文本格式简单还原为字典型的方法,读入文件清楚,但是还原字典的文本格式自己想到的方法比较复杂并且略显笨拙,应该会有更好的方法。 回到卡包,开始新一轮线索的寻找。

回到卡包

查看几个官方文档,继续寻找自己之前没有关注的点

dict文档,提供了五种字典的构建方式。

5. Data Structures5.6. Looping Techniques提醒我是否可以用字符串数组来实现?

最终还是没抵得住诱惑,搜索了一下,“python how to transfer txt file seperate by comma to dictionary”,果然有方法,自己先尝试一下。

http://stackoverflow.com/questions/39086/search-and-replace-a-line-in-a-file-in-python http://stackoverflow.com/questions/17063872/python-replace-fileinput-with-seek http://stackoverflow.com/questions/17140886/how-to-search-and-replace-text-in-a-file-using-python http://stackoverflow.com/questions/4778697/how-to-replace-update-text-in-a-file-line-by-line

尝试成功,休息。

170110

回顾字典的生成

盲写字典生成语句成功,利用作业提供的数据也成功。 反思一下有几个问题:这里的字典生成的思路是什么,为什么for循环可以这么去利用,还需要好好体会。先继续后面的作业。

input

input 后面加逗号的效果为什么是那样的?

基本的输入测试很简单,结合字典型已经可以开始展示需要的数据了。 下面要考虑的两个问题:

  1. 填写了错误数据如何友好地提示
  2. 考虑整个程序的逻辑,有了交互就会有“互动流”

输入异常的处理

python3 input is not what you want,Google

Asking the user for input until they give a valid response,高票回答,内容完整。提供了对应的文档来源

题外话:一直以来看到异常就会蒙圈,束手无策。终于可以解决掉这个问题。(其实看完还是没有完全理解,回头再来一遍)。

  • 自己找到代码实现
  • 找到官方文档
  • 用自己的方式写代码实现
  • 回到题目本身
  • 回顾,高于题目,搞懂知识点

数据字典的错误是什么错误类型?试一下就知道了 keyerror

整合测试

有了前面的基本知识实践,下面尝试做整合,回到题目本身

最基础的功能

file = open('weather_info.txt')
d = {}
for line in file:
    x = line.split(',')
    a = x[0]
    b = x[1]
    c = len(b) - 1
    b = b[0:c]
    d[a] = b

#print(d)

while True:
    try:
        a = input('Plean enter city name: ')
    d[a]
    break
    except KeyError:
        print("Sorry,I don't understand what you mean,please try agian.")

print(d[a])

优化功能

  • 可以重复查询
  • 提示输入中文

优化结构

因为要重复查询,发现目前还只是零散的点,需要进一步整合。

  • 函数化,把语句整理为函数
  • 搭出程序的运行框架

循环折腾了一小下

优化功能

Welcome和每一次展示的内容不同 优化提示语和题目尽量一致 exit功能添加

添加查询记录

重新查看卡包,发现少了一个功能,查询历史记录

break改为return,修改主程序。发现该调整比较大,所以先发布版本,在新版本上作修改

V02的调整

需要存储历史数据,可以用字符串、文件、字典三种方式实现,先实现一种

文件的读写方法

测试文件的清空(也可以用文件删除,以后再说)参考资料

文件的写入 a mode 和 w mode的区别 http://stackoverflow.com/questions/30961217/write-a-new-line-to-a-file-python-3

初步完成探索过程

先交作业~

171011

发现了一些可以优化的地方,进行优化 V03版本

  • 理解了open函数的模式,清空历史数据的函数直接用w模式即可
  • 参考了guoyuming代码中生成字典的处理方式,比我的代码更简洁,更新代码。

疑问:

  1. 是否可以不修改文件,而是在JSON转换时,利用代码直接识别相关符号?
  2. 需要回看官方文档,为何没有从官方文档中得到启示?

问题:函数定义的先后顺序会影响到程序的执行么?

经验: 如果为了解决问题搜索的代码或者方法,还是要回到主流的经典的官方文档,和高质量的知识体系建立连接。并且搞明白真正的原因,过一段时间再次针对同样的问题进行代码“盲写”,检验学习成果。

貌似没有遇到中英文环境的问题,是因为自己的电脑操作环境已经配置过?


心得:

  1. 和计算机说话
  2. 相信时间复利效应,一开始都是最困难的
  3. 找到自己的方法
  4. 提炼有价值的问题
  5. 跟着自己的节奏学习,扎实的做好基本功,最好不要“返工”
    • 别看别人的进度,后期大神进度神速,那和你没有关系,不到最后时刻尽量不要参考别人的代码。
    • 寻求帮助的节奏:官方文档、自己搜、提问求助(看代码)、回顾
    • 基本功很重要,有知识点的概念,每做一个,尽量找到源头,搞清楚,盲写代码,自己举例子复线
    • 回顾,回顾,回顾
    • 参考别人的代码和思路,整合为自己的
    • 回顾,回顾,回顾

开智学习心得

  1. 措手不及
  2. 痛苦烦恼
  3. 专注进步
  4. 关注自身

results matching ""

    No results matching ""