初学Python(第一课)

时间:2021-07-05 14:42:24

今天整理一下关于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)

  以上方法均可格式化输出,执行结果如下:

name: cen
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 = "" 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之前,先了解一下编译性语言和解释性语言的区别:

  因为计算机不能理解高级语言,只能直接理解机器语言,所以要将高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。这个翻译的方式有两种:一种是编译,一种是解释。这两种方式只是翻译的时间不同。

编译性语言
编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
解释性语言
  解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性java语言,专门有一个解释器能够直接执行java程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
  脚本语言是解释性语言。脚本语言一般都有相应的脚本引擎来解释执行。它们一般需要解释器才能运行。所以只要系统上有相应语言的解释程序就可以做到跨平台。脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在。
  实际上,计算机语言已经不能按照编译型语言或者解释型语言来彻底区分了。比如说java语言是解释性语言。但是java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。Java字节码使“写一次,到处运行”成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。
  所以,其实.PYC文件是Python程序预编译后得到的字节码文件(.py->.pyc)。而pyCodeObject文件是Python编译器真正编译成的结果。即.PYC是pyCodeObject文件的一种持久化保存方式。
九、数据类型初识1、数字:  (1)int(整型)  long(长整型)
       (2)float(浮点型)(8个字节(64位))
       (3)complex(复数)
2、布尔值:真或假,0或1
3、字符串 str    在这里要提一下“字符串拼接”Python中的字符串在C语言中体现为一个字符数组,每次创建字符串时需要在内存中开辟一块连续的空间,并且一旦需要修改字符串的话,就需要在此开辟空间,“+”号每出现一次就会在内存中重新开辟一块空间。
4、bytes类型
Python3最重要的特性大概就要算是对文本和二进制数据作了更清晰的区别。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python3不会以任何隐藏的方法混用str和bytes,致使这两者的区分特别清晰。所以,你不能以任何形式拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。     初学Python(第一课)