Day2:Python代码格式、Python语句
一、Python代码格式
1.Python代码缩进:
在Python中程序、代码块的开始结束都是由缩进来控制的。
Python的缩进一般来说是4个空格,Windows中大多编译器可以使用按键Tab来自动缩进四个空格。 Linux一般都是用vi,可以在/etc/vim/vimrc或者~/.vim/vimrc中添加代码:
set ts=4
set expandtab
#有的vi默认将tabstop定义为8个空格
Python的缩进规则:同一代码块纵向对齐,同级别函数纵向对齐(函数之间不存在调用关系),每次对齐都是4个空格的倍数。
若缩进出错则会出现异常通知:SynataxError:invalid synatax 。
每行代码前的缩进都有语法和逻辑上的意义,不仅提高了可读性,也一定程度上提高了代码的可维 护性。(有的编译器会区分1个Tab和4个空格的区别,请注意!)
2.Python的命名规则
对于类、函数、变量取名字,只要不违反规则,取任何名字都是可以的,但是统一的命名法能够让程序看起来更加的赏心悦目,而且看到名字就知道函数的功能,方便理解以及团队协作。
这里讲几种常用的命名方法:选择一种命名方法即可 或者 混合使用。
(1)驼峰命名法
驼峰命名法又称 骆驼式命名法,是指混合使用大小写字母来构成变量和函数的名字。当变量名或者函数名是由一个或多个单词连在一起而构成的唯一识别字时,第一个单词以小写字母开始,第二个单词的首字母大写或者每一个单词的首字母都大写,故而此命名法又分为 小驼峰命名法和大驼峰命名法。
变量和函数一般使用小驼峰命名法,即除第一个单词之外,其他单词的首字母大写。例如:
def isEvenNum
类名常常使用大驼峰命名法,有时也称Pascal命名法,将第一个单词的首字母也进行了大写。例如:
class GuessNum
(2)Python之父Guido推荐的命名规则:
命名约定如下:
1.所谓内部(Internal)表示仅仅模块内可用,或者在类内是保护或私有的。
2.用单下划线(_)开头表示模块变量或函数是protect的(使用import* from 时不会包含)
3.若是内部的,则用双下划线(__)开头的实例变量或者方法表示为 类内私有。
5.对类名使用大写字母开头的单词,比如GuessNum,即大驼峰命名法。
6.模块名字应该用 小写加下划线的方式比如(lower_with_under.py),如果模块名仍使用大驼峰命名法,若模块名碰巧和类名一样,会令人困扰。
7.全局或者类常量,全部使用大写字母,并且用下划线分割单词:如MAX_LOAD
8.方法名,函数名,普通变量名则采用全部小写字母,以下划线分割多个单词:如my_thread
9.变量名的第一个字符不能是数字,必须是下划线或者字母,python区分大小写。
3.Python代码注释
一个好的程序员,为代码添加注释是必须要做的事情,确保别人看一眼注释就知道代码是做什么用的。
Python中的注释分为 特殊注释、单行注释以及多行注释。
(1)特殊注释
#!/usr/bin/python3 env
#-*- coding:utf-8 -*- (也可以写成 #coding=utf-8)
以上两行为特殊注释,windows下可以不用第一行注释。
第一行注释指明了Python编译器的位置
第二行制定了该程序使用的字符编码,python3中默认使用utf-8 编码
(2)单行注释
单行注释不需要刻意对齐,避免出现SynataxError:invalid syntax异常。
#不管在代码的任何位置,只要是#之后的都是注释,但是仅限于本行之内,
不得换行
(3)多行注释
'''多行注释采用三个单引号('''xxx''') '''
"""或者使用三个双引号(""" xxx""")"""
#若多行注释紧跟在定义类或者定义函数之后,则自动变成了该类或函数的doc string(模块、类、函数的功能注释)
在编程时不使用注释,当时没有问题,如果等到以后维护代码或者忘记代码功能时重新看,是一件非常痛苦的事情(亲身体验!)。
二、Python语句
每个编程语言中最基本的条件判断、有限循环、无限循环语句等等都是必不可少的。
1.条件判断语句 (if…else…)
if…else…作用:非此即彼,满足条件A则执行A语句,否则执行B语句。
Python中没有case语句,可用elif代替;
#条件判断语句表达形式:
if 判断条件1:
执行语句1
elif 判断条件2:
执行语句2
else:
执行语句3
例1,如编写程序: 检查一个输入的数字是否被7整除。
def isEvenNum(num):
if num%7 ==0: #余数为0则意味着可以被整除
print("%d 可以被7整除 "%num) #整数使用%d
else:
print("%d 不可被7整除 "%num)
if __name__=='__main__':
numStr=input("请输入一个整数:")
try: #异常处理,增加程序的稳定性
num=int(numStr)
except ValueError as e:
print("输入错误,要求输入一个整数。")
exit()
isEvenNum(num)
#在写这个程序的时候意识到编译器是会区分***一个Tab和四个空格的缩进***,因为出现了IndentationError: unindent does not match any outer indentation level,以后谨记!
2.有限循环(for语句)
for语句作用: 将一个语句块、函数等重复执行有限的次数 。
for循环用于数字循环时可以使用 for x in range(start_num,stop_num)。
#for循环表达形式:
for var in Sequence:
执行语句
例2,如编写程序:计算从1加到100的整数之和:
def cumulative(num):
sum=0
for i in range(1,num+1): #计算范围1到 num+1 ,不包括num+1
sum +=i
return sum
#累加函数,返回累加后的值
def main():
while True:
print("======================")
print("输入exit退出程序:")
str_num=input("从1累加到:")
if str_num=='exit':
break; #break跳出while无限循环,结束程序
try:
sum=cumulative(int(str_num))
except ValueError:
print("除非退出输入exit,否则只能输入数字。")
continue
print("从1累加到%d的总数是%d 。"%(int(str_num),sum))
if __name__=='__main__':
main()
3.无限循环(while语句)
无限循环的作用:只要不满足某种条件,就一直循环下去,知道满足条件为止。
#while循环的表达形式:
while Boolean expression:
执行语句
上述例2 就有使用到while循环,达到我们可以持续计算累加整数的目的,其中条件为True,输入exit时,利用break跳出无限循环。
注:使用while循环时一定要有满足条件的出口,否则就变成了死循环。
4.中断循环(continue、break语句)
continue和break语句都只能作用于循环之中,只对循环起作用(for,while都可以)。
continue语句作用:从continue语句开始到循环结束之间的语句代码都跳过,直接从下一次循环开始。
break语句作用:跳出循环,循环结束。
纯粹只有循环而没有中断循环的情况很少见,特别是在while情况中,大多都是配对出现。
例3:编写程序,做一个随机猜数字的小游戏。
import random #导入random模块
class GuessNum(object):
'''这个类用于猜随机数'''
def __init__(self):
print("随机产生一个0~100的随机数字。")
self.num=random.randint(0,101) #产生一个1到101之间的整数型随机数
self.guess()
def guess(self):
i=0
while True:
print("猜这个随机数,范围为0~100.")
strNum=input("请输入你猜的数字:")
i +=1 #统计猜测的次数
try:
print("==============")
if int(strNum)==101:
break #若玩家不想继续游戏,输入101即可退出!
elif int(strNum)>self.num:
print("你猜的太大了。")
continue
elif int(strNum)<self.num:
print("你猜的太小了。")
continue # 跳出循环,进行下一次循环,重新输入所猜数字
else:
print("你猜对了!")
print("你总共猜了%d次"%i)
break #猜对了退出循环
except ValueError:
print("不能输入其他,只能输入数字,请继续猜测!")
continue
if __name__=='__main__':
gn=GuessNum()
5.异常处理(try except)
在Python中用try来测试可能出现异常的语句,然后用except来处理可能出现的异常。
else和family都不是必须选项,try和except是必须成对出现的,可以出现多个except,处理多个异常情况。
善用try,可以增强程序的健壮性。
#try except的表达式:
try:
测试语句
except 异常名称,异常数据:
处理异常语句
except 异常名称,异常数据:
处理异常语句
else:
未出现异常执行语句
finally:
不管有没有异常都需要执行的语句
python3的异常表:https://www.runoob.com/python/python-exceptions.html
6.导入模块(import)
Python最大的优点是其强大的模块功能,前面写的一个程序,后面就可以把它当成一个模块来导入,最理想的情况就是 任何一个功能,只要写一次,以后所有人都可以任意重复调用,代码重用性就会非常高。
将Python程序当成模块导入的先决条件 :
这两个程序在同一个目录下,或者将模块化的程序路径加入Python的系统路径中。
模块导入的方式有以下几种:
#同时导入多个模块
import modulew1[,module2[,...moduleN]]
#导入模块中的某个函数、类、变量
from modname import name1[,name2[,...nameN]]
#导入某个模块的所有内容
from modname import *
# *号为通配符,匹配所有内容,modname为模块名字
例4:使用不同颜色的打印print内容
import sys
#导入sys模块,使用sys.argv给程序在外部传递参数
class ColorPrint(object):
def __init__(self,color,msg):
self.color=color
self.msg=msg
self.cPrint(self.color,self.msg)
def cPrint (self,color,msg):
colors={
'balck':'\033[1;30;47m',
'red':'\033[1;31;47m',
'green':'\033[1;32;47m',
'yellow':'\033[1;33;47m',
'blue':'\033[1;34;47m',
'white':'\033[1;37;47m'
}
#使用字典键值对来保存颜色。
if color not in colors.keys():
#not in 如果字符串中不包含给定的字符返回 True
print("输入的颜色暂时没有,按照系统默认配置的颜色打印。")
else:
print("输入的颜色有效,开始彩色打印。")
print("%s"%colors[color])
print(msg)
print("\033[0m")
if __name__=='__main__':
cp = ColorPrint (sys.argv[1],sys.argv[2])
'''该程序不能在编译器中运行,否则会报错: IndexError list index out of range。
需要将文件保存,然后在文件所在位置,进入cmd命令,输入 python 文件名.py color text
color是其中的颜色,可以选择black,red,green,yello,blue,white几种,text则为文本。
例如: python 1.py red HelloWorld
'''
"""sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始。Sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。"""