今天学了个知识点:1.如何编写注释,该编写什么样的注释。2.python之禅。3.列表是什么。4.访问列表元素。5.索引从0而不是1开始。6.使用列表中的各个值。
python大大的图
我的图
1.如何编写注释,该编写怎样的注释。
在python中,注释用(#)标识,井号后面的内容都会被python解释器忽略。这里有两个问题:(1)# -*- coding: utf-8 -*-为什么会起作用。(2)真的是所有的井号都会被忽略吗,有没有特例。
(1)我们都知道# -*- coding: utf-8 -*-是声明文件编码的注释,它必须要放在第一行或者第二行,有了这一句话我们才能在里面写中文。否则python会默认使用ASCII编码,写中文时会报错。其实不仅是允许写中文,要写其他的语言也是可以的,这一句话让python容纳多种字符。这一句话是有作用的,事实上python任然会忽略这句代码,但是它却可以作为“黑客”或者解决问题的方法来指定文件的格式。
(2)哈哈,如果井号在单引号或者双引号里面当然就直接输出了呀。一般单引号或者双引号里面的句子不长,我们要写注释的话也会写在它们的后面。但是在三引号里一般是用作注释的,三引号表示换行,里面会有很多内容,会使用井号来注释,而且井号里面的注释内容会被直接输出。而且由于三引号具有换行的特性,它自己可以变成注释,只要你不把它输出。不知道大家是否还记得这个图
编写注释的主要目的是阐述代码要做什么,以及是如何做的。清晰简洁的注释便于自己检查代码,也便于别人读懂你的代码。
2.python之禅
只需在解释器中执行命令import this,python就会把编码的一系列原则告诉我们。
Beautiful is better than ugly.优美胜于丑陋(Python 以编写优美的代码为目标)
Explicit is better than implicit.明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
Simple is better than complex.简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现
Complex is better than complicated.复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
Flat is better than nested.扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
Sparse is better than dense.间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
Readability counts.可读性很重要(优美的代码是可读的)
Special cases aren't special enough to break the rules.Although practicality beats purity.即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
Errors should never pass silently.Unless explicitly silenced.不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
In the face of ambiguity, refuse the temptation to guess.当存在多种可能,不要尝试去猜测
There should be one-- and preferably only one --obvious way to do it.而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
Although that way may not be obvious at first unless you're Dutch.虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
Now is better than never.Although never is often better than *right* now.做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)。你可以将余生都用来学习python和编程的纷繁难懂之处,但这样你什么项目都完不成。不要企图编写完美无缺的代码;先编写行之有效的代码,再决定是对其做进一步改进还是转而去编写新代码。
If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
Namespaces are one honking great idea -- let's do more of those!命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
3.列表是什么
列表由一系列按特定顺序排列的元素组成。列表中可以加入任何元素,其中的元素之间也可以没有任何关系。鉴于列表通常包含多个元素,给列表指定一个表示复数的名称(如letters、digits或names)是个不错的主意。在python中,用方括号([ ])来表示列表,并用逗号来分隔其中的元素。
当然我们也可以不直接把一个完整的列表写出来。我们可以定义一个空列表,再一点一点的往里面加元素(用列表名.append()),最后打印列表时的结果是一样的
4.访问列表元素
列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。从列表bicycles中提取第一款自行车print(bicycles[0]),当请求获取列表元素时,python只返回该元素,而不包括方括号和引号,非常简洁。当然我们也可以对输出的内容规范其格式。还记得我们在第二章学了三种修改字符串大小写的方法,分别是:print(bicycles[0].title()),print(bicycles[0].upper())和print(bicycles[0].lower())。
我们需要注意的是这些修改大小写的方法只能针对列表中的元素,不能针对整个列表。因为列表并没有这些属性
5.索引从0而不是1开始
在python中,第一个列表元素的索引为0,而不是1。第二个列表元素的索引为1。根据这种简单的计数方式,要访问列表的任何元素,都可将其位置减1,并将结果作为索引。python为访问最后一个列表元素提供了一种特殊语法。通过讲索引指定为-1,可让python返回最后一个列表元素。这种语法很有用,因为你经常需要在不知道列表长度的情况下访问最后的元素。这种约定也适用于其他负数索引,例如,索引-2返回倒数第二个列表元素,索引-3返回第三个列表元素,以此类推。如果我现在想返回列表的倒数第二个元素,我可以有如下两种写索引的方式
最终它们的结果都是
如果我现在想返回最后两个列表元素,我可以有两种写索引的方式
最终它们的结果都是
6.使用列表中的各个值
对于理解for循环里的内容,我们需要有一点补充知识。函数len()用于返回字符串、列表、字典、元组等长度。函数range()返回一个列表,列表里写的是各个元素的索引。
这个for循环说的是,我们循环列表中每个元素的索引(range(len(bicycles))),打印出这个元素(bicycles[i])和双引号内的=>以及这个元素对应的索引(i)
for循环的第二种写法我尝试了用列表去写,我想的是原来我们的i代表的是数字,现在我们的i代表列表里的元素。我们最后打印的结果只要保证=>的左边是元素,右边是数字就好了。但是这么写右边的数字如果不写循环是没有办法单个输出的。
于是我参考了Candice Hu同学的建议,写了一个字典,用for循环对字典里的value和key进行输出
可像使用其他变量一样使用列表中的各个值。例如,你可以使用拼接根据列表中的值来创建消息。
最后两行代码尝试从列表中提取第一款自行车,并使用这个值来创建一条消息。我们使用bicycles[0]的值生成了一个句子,并将其存储在变量message中,输出是一个简单的句子,其中包含列表中的第一款自行车