8.2第二课: 字符串 列表
在开课前放的优秀文章可以参考简书的文章list : http://www.jianshu.com/p/7cb84cfa56fa
第二课作业:
作业1:
下方是一个嵌套的列表,通过对x分割,打印“e”和“g”。
提示:使用 x[ ][ ]的形式。x如下:
x = [["a", "b", "c"],
["d", "e", "f"],
["g", "h", "i"]]
作业2:找最大值和最小值
以下给出一个团队中成员名和他们各自的微信好友数量,请模仿上述词频的例子,通过for循环找出团队中好友数最多和最少的两个人。如下:
names = ['小赵','小钱','小孙','小李','小王','小张']
friends = [45, 100, 67, 136, 77, 17]
下文 Q&A 目录索引:
1,代码运行:单引号&输出
2,代码运行出错
3,and, or, not 的执行优先级
4,github中无法查看代码
5,python作为工具使用
6,如何上传代码至jupyter
7,Jupyter安装完成后的根目录
8,空格健缩进
9,代码运行显示不出人名
10,“空格”和“引号”的使用
11,代码运行出错
12,mac系统jupyternotebook无法跳转浏览器
13,代码运行:引号
14,代码运行:引号
15,1 在不同运行中存储的位置
16,代码理解:unique_words,counts[index]
17,代码理解:count[i] ,bigWord = unique_words[I]
18,python IDLE编辑中文
19,代码运行:依次取汉字
20,代码运行:中断方法
21,代码理解:内外循环
22,代码运行出错
23,代码运行:执行代码无反映
24,jupyter notebook的launch 没反应
25,运行代码:有星号
26,代码运行:三引号
27,代码理解:len, count
28,代码运行优化:精简步骤
29,代码运行出错
30,代码理解:for i in range(len(friends)
31,()和 [ ] 用法及区别
32,代码运行出错
33,代码理解:tab
34,代码运行出错
Q 1 :如上图(图2-1),我有两个问题:
1.什么时候会出现单引号?
2.输入 x[1][1]
x[2][0]
为什么只有一个输出?
A:1、不用print函数时会出现单引号。
2、你这样输入,只显示最后一个运算结果
Q 2 :如上图(图2-2),最小值函数代码那一行为什么是从1重新开始,我试了接上面的代码直接输入,输出显示错误。这是为什么?以及怎么转换?中间加了一个 In[1] ,后面又是和前面连续的。
A:应该是你程序中途shutdown了吧(当程序中途停止运行时,in[ ]里面数字会重新从1开始计数),试试重启jupyter,再运行
追问Q:不是,那是老师课件里面的。从1重新开始才能输出正确。如果接着In[35],输入代码,运行In[36]的话,则输出不正确。
Q 3 :关于 and, or, not 的执行优先级,以及str能够用过int()变为整型吗?
A:关于and or not的优先级问题:
not比or和and的优先级高,or和and优先级相同
比如 not True or False and True,计算顺序为:
1 首先计算not True 为False
2 然后计算 False or False为False
3 然后计算False and True为False
所以结果为False
str可以使用int变为整型。比如int('123') 结果为123
追问 Q :但是1 or 0 and 0=1(0和1可直接对应True和False如果我没理解错的话),1 or 0 and 0 and 1 =1,(1 or 0) and 0 and 1 =0所以我觉得or要先于and执行
A:同优先级按从左到右依次执行
Q 4 :#github中无法查看代码#
大家可以打开github中的代码吗?我进入到图里的页面就在应该显示代码的地方加载不出来,也没看到可以下载的地方,请问要如何解决?拜谢~神奇的是,用最新版的chrome打开其他网页和下载都没问题,就是这里查看不了_(:з」∠)_
A2: PythonData 点击这个回到首页才有下载通道。首页右侧绿色按钮(Clone or download)点击就是下载地址→选择Download ZIP 就可以下载了
Q 5 :请问,如果只用python能不能做一个工具:将微信群里的发言信息变成格式化的信息,然后分类统计和汇总?哪位能指点一下?
A:前提是微信是否可以导出,并且是明文。如果可以,就能使用python 分析了.关于分析 就要看你的具体需求了,比如某人发言条数占比、词频分析之类的。根据需求对数据进行处理清洗。
Q 6 : 如何上传代码至jupyter ?
A:Jupyter Notebook 根目录修改 windows7
打开终端:开始→所有程序→Anaconda3→Anaconda Prompt
输入:jupyter notebook --generate-config 生成配置文件
红框一:输入的代码;红框二:生成配置文件路径(即文件地址)。按照路径找到文件:右键→编辑jupyter_notebook_config.py 打开编辑页面
现在需要查找修改代码的位置:快捷键(Ctrl+F)
需要对这行代码进行修改:源码:#c.NotebookApp.notebook_dir = '' 修改为:c.NotebookApp.notebook_dir = 'D:\python' 。此处以修改到D盘python文件夹下为例:
鼠标点击下即可获得该地址。
保存文件
从新运行Jupter notebook
课件可以拷贝到D:\python下,从新打开Jupyter即可看到课件。
Q 7 :哪位可以指导一下我的Jupyter安装完成怎么没有课件中的的根目录啊?
A:目录要自己创建的
Q 8 :按空格健 没有空格,反而是缩进了,不知道咋修改
A:这个问题好难解。确认一下你的输入法,是不是中文全角状态下输入的空格。
Q 9 :如上图(图2-3),为什么显示不出人名?
A:建议使用python3,python2中文有编码问题。
Q 10 :有没有同学总结过关于“空格”和“引号”:哪些地方硬性要求必须有空格,哪些地方可有可无,现在完全凭猜在打空格。。。 以及引号,好像 ' 和 " 都可以?
A1:引号的问题,我以前学过一点入门,好像是没有差别。打空格是个人习惯,好看一点,你不打也没事啊。我以前用过一个python的编程器,它会自动帮你拉开间距,很美观。
A2:老师上课说单引号和双引号基本可以互换,只是在需要引号套引号的时候区分,我试了一下是一样。空格我感觉是不是个人习惯呀,余老师的课程里都打,我不打也没影响结果,就是看着有点挤。。。
Q 11 :上图(图2-4)显示,这是个什么错误,看着没问题啊
A:原因可能是之前你使用了类似 max=(1, 3, 4),你可以在菜单kernel-> restart重置一下,然后再执行试试。
Q 12 :关于mac系统jupyternotebook无法跳转浏览器的问题
A:大家可以看下这个链接:https://github.com/jupyter/notebook/issues/2438
Q 13 :print( ) 输出,有引号,和直接变量,没引号的输出,有什么区别?
A:没有区别,只是一个是notebook帮助输出的,一个使用print输出。我记得老师上课有说到这块。
Q 14 :请看上图(图2-5),这里强制转化成字符串,为什么没有引号?
A:print打印出来的不带引号,使用notebook打印是带引号的。
Q 15 :我有个问题:
a = b = c = 1和 a =1,b =1,c =1。
1 存储的位置是不是一样?
第二个表达式中的“1”都存在同一个内存位置上吗?还是在不同的位置?
A:这个问题厉害了。第一情况:计算机会在某地址创建一个整数对象1,然后a、b、c都指向它。所以此时内存中只有一个数字对象。
第二情况:计算机会生成三个新的整数对象1,分别存储在不同的地址中,a、b、c分别指向这个三个地址,所以此时内存中有三个数字对象。
当给变量赋值的时候,是真实的划出了内存的一个区域,并且将这个区域命名(也就是变量名);而不是指向之前已经存在的某一个区域。
Q 16 :课程中,有段代码,我始终搞不明白。
for word in words:
index=unique_words.index(word)
counts[index]=counts[index]+1
print(counts)
[7, 2, 2, 1, 3, 2, 1, 2, 1, 1, 1, 1]
这句话中, index=unique_words.index(word)
counts[index]=counts[index]+1
这两行是什么意思呢, counts[index] 指的是索引的次数吗,能用更直白的话,描述这几段代码吗?
A:假设现在有unique_words = ["hello", "world"]
counts = [0, 0]
注意counts中的对应位置数据就是unique_words中每个单词的词频,初始时都为0。
现有列表words = ["hello", "world", "world", "world", "hello"],计算每个单词词频数。下面开始遍历words,第一个遍历单词为"hello",此时查找一下"hello"在unique_words哪个位置,此处位置为0,则可以把counts位置0处的值加1。此时counts的值即为[1, 0],表示hello词频为1,world词频为0,然后我们在进行第二次遍历,单词为world,找到其在unique_words位置为1,把对应的counts中表示world词频的值,即位置1处的值+1,以此类推。最终结果是counts=[2, 3],表示hello出现2次,world出现3次。
Q 17 :老师,问题在上图(图2-6),请过目。这里面的含义不懂,思考方式也没清晰。
A:首先需明白unique_words和counts一一对应,unique_words为单词列表,counts为对应位置单词的频数。
下面遍历counts中的每个元素,if count[i] > bigCount : 表示遍历的最新的某个count值是否大于bigCount,如果成立执行下面的两条语句:
bigWord = unique_words[I] , 表示把这个位置单词找到作为bigword,也就是最高频单词。
bigCount = counts[I] ,i表示遍历的最新位置,将bigCount赋值为最新最大值
Q 18 :直接用python IDLE打开的页面是不能直接编辑中文的吗?"小明" 这样的词是打不出来的。
A:python IDLE我没怎么用过。通常数据分析研究会用jupyternotebook,开发人员会用pycharm。
Q 19 : 请老师指点一下,如何把一段汉字的字符挨个挑出来?我用了课程教的语句,可是出现错误:图片(图2-7)所示,而且我看汉字是以一行为一个字符串的,这样能依次取汉字吗?
A:unique_words.append()这行主要缩进,以保证这行代码属于if语句块。
注:python以缩进区分代码层级的。
Q 20 :(图2-8)自定义函数,(这是个有错误的函数,关于if判值那边要改),这种错误的函数一旦运行了,即使我esc-ii或者kernet interupt,右上角显示了interupting kernel,却无法正常中断,只研究出restart中断,想问问老师正确的中断方法是什么
daikuane=float(input("\n请输入贷款额,或者输入0来结束报告"))
if daikuane==float(0):
print("结束报告")
应该直接float(input..)
A:对的,因为input出来的结果是字符串类型。因此判断条件可以是daikuane=='0'或者float(daikuane)=='0.0'。不然==会永远无法成立,从而出现死循环。float(daikuane)==0.0,上面写错了。
Q 21 :关于内外循环,我觉得i=1应该不能算是内循环, 而是外循环的一部分。我理解的内循环是红框,外循环是橙框。和老师蓝色虚线标的不同(图2-9)
A:对的,准确的说是这样的,理解深刻👍。i是内层循环的控制变量。
Q 22 :谁帮我看看我的代码有什么问题(图2-10),之前运行成功过,改动了一点就失败了,已经忘记怎么改动的了。。。。
Q 23 :作业做完了,不过遇到一个问题,就是执行代码的时候无反映。只有重开页面才会有反应。改过代码后、还需要再重开一次页面或者另外开启一个Notebook 才会有反应、这样周而复始的重新开启页面,才做完的作业。请问老师是什么问题?
A:环境不好吧,建议重启下juypter 或者重启下电脑之类的
Q 24 :在navigator中点击jupyter notebook 下的launch 没反应 是什么情况
A:我原来也遇到过这个问题。我是win7,下载了google chrome并设置成默认浏览器之后就可以了。
Q 25 :运行代码有星号出现后,就没有任何输出了,请问怎样除掉它?如果关了再重来之后又正常了。应该是我的错误操作造成的。
A:我之前也遇到这个问题,后来发现是进入了死循环。你可以看看之前运行的语句是否有死循环出不来的情况。也可以在运行页面上方找到 Kernel 的restart 重启
Q 26 :图中(图2-11),为什么是三引号,不是单,不是双?
A:三引号是三个单引号,这样可以换行
Q 27 : len(unique_word)=11, 为什么counts=[0]*len(unique_word)=[0,0,0,0,0,0,0,0,0,0,0],
A:counts是一个列表,counts = [0]*len(unique_word)就是一个初始化一个和unique_word一样长度的列表
Q 28 :作业一:print(x[1][1])
print(x[2][0])
问两个问题:.作业一的代码如何精简,想只用一个 print 但是做不到;
2. 怎么用 max 和 min 函数来写作业二?
A:print(【】【】,【】【】)
A:print(x[1][1]+x[2][0])
Q 29 :作业二(图2-12),结果没运行正确,不知道问题出现在哪里,求帮助
A:图中,那里的提示是 “ if ” 那一行有语法错误,“ = ” 那里改成 “ is ”试试,可以对照老师的代码看看。
Q 30 :range:生成整数序列
len:获取序列元素个数
那么,for i in range(len(friends): 的准确意思是什么?是 i 代表了friends数列的没每一个元素吗?那么len的作用是什么?
这里只对friends进行循环,没有对names进行循环,计算机是如何把两个数列对应起来的?或许我的问题很白痴,但我真是想不明白啊!请老师指点。
A:len是获取列表元素个数 range可以根据长度生成一个序列。比如此处len(friends)为6,range(6)为0,1,2,3,4,5。for循环可以根据此序列对friends遍历了。
Q 31 :望老师解答一下()和 [ ] 用法及区别,目前处于依葫芦画瓢阶段。
A :简单点说,()主要用于函数方法的调用,如max(1, 2, 3);而[ ]主要用于数据结构中数据的访问,如list类型数据a, a[1]访问位置1的元素,字典d, d["suyi"] 访问键为suyi的值。
Q 32 :对作业一有疑问,print[x=[1:2],[1;2]] 结果是[ ],为什么这样结果不对啊?(图2-14)
A:这是因为切片操作是不会改变列表维数的,也就是x[1:2]返回的结果是[["d", "e", "f"]],仍然是个二维数组,此时访问其中的数据,如d,则需要x[1:2][0][0],而不是x[1:2][1]。
可以考虑下为什么切片出来的结果不改变列表的维度?假设切片采用x[0:2],结果就是[["a", "b", "c"], ["d", "e", "f"]],第一维的元素是两个元素,显然这种情况的数据是没有办法降维的。
Q 33 :在print()前面多敲一个tab,和多敲两个tab,答案都是不同,请问为什么?
A:Python是以缩进区分代码块的。一个tab属于for执行语句,两个tab属于if里面执行语句
Q 34 :我没弄明白,把同学但作业拿来照抄,为什么和同学打一样但编码也会出错啊?搞的我心力憔悴。
A:print 对齐 for ,逗号全英文
以上内容整理来源于新生大学讨论区和作业区,若有误请各位指正!
第二课作业同学们开始渐渐上手,有同学可以用两种或者两种以上的语法来解题,我返回去看了下自己的作业,只交了第一题。。。惭愧啊!