初学Python(第一课)
今天整理一下关于Python初学者的基础知识部分的第一课,因为之前学习过C,所以过于基础的知识就不详细记录了。
Python相对于C\C++来说,在语法方面已经很简单了;甚至对于JavaScript也是很简单的,减去了很多冗余的部分,让程序的编写更简单便捷。
一、变量
Python变量的定义很简单,Python是动态强类型语言Python省去了定义时的数据类型。C\C++在定义变量的时候都要明确声明该变量的数据类型,如int、char、floor、double、string等等,JavaScript已经简化了变量定义,但是仍然需要声明如var、let。相比之下Python就显得很方便了,并且Python不需要在每一行代码后面加上分号。
Python声明变量的格式为变量名 = “变量值”,例如:
name = "cen"
Python在变量的命名上与其他的编程语言类似,由字母、数字和下划线组成,由字母或下划线开始;并且有很多预留关键字不可以作为变量名:and,as,assert,break,class,continue,def,del,elif,except,exec,finally,for,from,global,if,import,in,is,lambda,not,or,pass,print,raise,return,try,while,with,yield
常量
在很多编程语言中都可以定义常量,Python也不例外。不过Python对于常量的定义就简单的多,只需要将常量名用全大写字母来命名即可。
二、注释
Python中单行注释:#,多行注释用'''......'''包起来,当然'''......'''也可以用于多行打印,下面会有例子,这里就不再赘述了。
三、输入与格式化输出
1、输入
C\C++在用户交互是使用的输入有scanf和cin,Python的用户交互程序则用的是input,并且Python的输入相比较于C\C++来说对格式的要求比较低,并且语法也相对比较简单,可以将输入内容和提示内容在一条语句内显示。Python2中的输入raw_input与Python3中的input是相同的,其实Python2中也有另一个input方法,不过其效果比较鸡肋,所以不推荐使用。Python3中的input方法才是正道。
格式如下:变量名 = input ("提示内容") 例如:输入用户名和密码:
username = input("name: ")
password = input("password: ")
print(username,password)
执行效果如下:
name: cen password: 123 cen 123
大家可以看到无论是用户名和密码都是明文的,安全性很低,那么在输入时加密输入密码,类似于JavaScript中的input-password标签,应该怎么做呢?
getpass.getpass():
首先,要在代码中引入Python的标准库:import getpass,然后就可以愉快的使用getpass.getpass()方法啦
import getpass username = input("username: ") password = getpass.getpass("password: ") print (username,password)
执行效果如下:
name: cen
password:
cen 123
不过这个方法在PyCharm中无法执行,不方便调试,这是一个缺点,另一个缺点是在输入密码时看不到输入的位数,并且没有退格效果。
2、格式化输出
这个直接用例子来理解,例如:在Python中输入以下数据并输出如下格式:
----information of 姓名----
Name:
Age:
Job:
Salary:
name = input("name") age = input("age") job = input("job") salary = input("salary")
Python中输出可以有一下几种方法:
(1)字符串拼接法
字符串拼接法就说到了我们上面说的'''......'''多行打印。实现代码:
info1 = ''' ----information of ''' + name + '''---- Nmae:''' + name + ''' Age:''' + age + ''' Job:''' + job + ''' Salary:''' + salary print(info1)
不过字符串拼接法是最不好用的一种方法,多次开辟内存空间,效率低下,不建议使用。
(2)引用变量-%
引用变量的方法相对于字符串拼接方法来说无疑是更加便捷的方法了。
a、%s-----数据格式占位法。这种方法使用每一个数据的数据格式来占位,在最后给出每个占位相应的变量名。实现代码:
info2 = ''' -----information of %s----- Name:%s Age:%s Job:%s Salary:%s '''%(name,name,age,job,salary) print(info2)
这里是各种数据类型所对应的符号:
符 号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
需要注意的是:(1)占位和变量名一定要一一对应。
(2)input输入的内容默认格式都是string类型,为了增强代码的规范性和可读性以及逻辑的严密性需要转换类型,用到数据类型的强制转换。格式变量名 = 数据类型()
例子如下(将字符串转化为整型):
age = int(input("age: "))
b、.format(_name = name)-----赋值 这种方法用一个占位名占位,在最后将变量的值赋给占位名。实现代码如下:
info3 = ''' -----information of {_name}---- Name:{_name} Age:{_age} Job:{_job} Salary:{_salary} '''.format( _name = name,_age = age,_job = job,_salary = salary) print(info3)
c、.format------数字占位 这种方法用数字(从0开始)来替代上面的占位名,更加简洁,但是对顺序要求很严格。实现代码如下:
info4 = ''' ----information of {0}---- Name:{0} Age:{1} Job:{2} Salary:{3} '''.format(name,age,job,salary) print(info4)
以上方法均可格式化输出,执行结果如下:
age: 21
job: student
salary: 1
-----info of cen-----
Name:cen
Age:21
Job:student
Salary:1
四、if-else流程判断
在每种编程语言中都有条件判断语法,if-else-elif是Python中的条件判断,语法格式如下:
if 条件1: A elif 条件2: B else: C
Eg:判断输入的用户名密码是否合法:
_username = "cen" _password = "999999" username = input("username: ") password = input("password: ") if username == _username and password == _password: print("welcome user {name} login...".format(name = username)) else: print("wrong username or password")
如果输入正确则:
username: cen password: 999999 welcome user cen login...
如果输入错误则:
username: cen password: 123 wrong username or password
五、循环
1、while循环while循环语法格式:
while 条件: 循环体 else: B
Eg:输出0-2
count = 0 while count < 3: print(count) count += 1 else: print("已经到3啦")
执行结果:
0 1 2 已经到3啦
2、for循环
for循环语法格式如下:
for 计数器 in range(参数): 循环体 else: B
for语句括号中的参数可以为一个参数,两个参数,三个参数。
如果是一个参数(E),则计数器从0开始运行到E结束;
如果是两个参数(B,E),则计数器从B开始运行到E结束;
如果是三个参数(B,E,S),则计数器从B开始运行到E结束,每隔S执行一次循环体;
Eg1:输出0-2
for i in range(3): print(i) else: print("已经到3啦")
0 1 2 已经到3啦
Eg2:输出2-4
for i in range(2,5): print(i) else: print("已经到5啦")
2
3
4
已经到5啦
Eg3:输出2-10,从2开始每隔3个打印一次
for i in range(2,10,3): print(i) else: print("已经到10啦")
2
5
8
已经到10啦
3、continue,break和嵌套循环
(1)continue用于跳过本次循环;break用于结束整个循环
下面的例子有助于理解continue和break的区别
for i in range(5): if i == 2: continue print(i) print("这是一条分界线") for i in range(5): if i == 2: break print(i)
执行结果如下:
0 1 3 4 这是一条分界线 0 1
(2)嵌套循环 Eg:
for i in range(4): if i == 2: continue print(i,"----") for j in range(5): if j == 2: break print(" ",j)
0 ---- 0 1 1 ---- 0 1 3 ---- 0 1
例题:猜数字游戏,规则如下:规定一个固定数字(如78),用户可以输入三次,用户输入的数字如果大于78,则提示“过大”;用户输入的数字如果小于78则提示“过小”;用户输入的数字如果等于78,则提示“猜对了”并结束游戏。用户输入三次后如果任未猜对,则提示“是否想继续游戏”,如果用户输入“N”则结束游戏,否则继续游戏;依次循环;
代码实现:
main_number = 78 count = 3 while count: guess_number = int(input("guess_number:") ) if guess_number == main_number: print("yes,you got it") break elif guess_number > main_number : print("too big") else: print("too small") count -= 1 if count == 0: continue_confirm = input("Do you want to keep guessing?") if continue_confirm != 'n': count = 3
六、模块初识
模块:通俗来说就是库,有点类似于函数集合。Python的模块大概分为两种,一种是标准库,一般在lib文件夹下;另一种是第三方库,一般在lib\\site-packages文件夹下。
Python的标准库例如sys和os库。再引入库的时候语法如下:import os
如果要引入自己写的库,一种方法是将库放在与.py文件同级目录下,这样显然很不方便。解决办法是:(1)将你自己的库拷贝到site-packages文件夹里(2)修改环境变量,增加一个路径
八、.PYC
在了解.PYC之前,先了解一下编译性语言和解释性语言的区别:
因为计算机不能理解高级语言,只能直接理解机器语言,所以要将高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。这个翻译的方式有两种:一种是编译,一种是解释。这两种方式只是翻译的时间不同。