Python基础一

℡╲_俬逩灬. 提交于 2020-01-02 18:15:50

1、Python入门

1.1 第一个python代码

  1. 解释器:即时调试代码,代码无法永久保存

  2. 文件:永久保存代码

   在E:\PythonProject目录下新建文件hello.py, 编写代码如下

print('hello world')

执行hello.py, 即E:\PythonProject/hello.py

python 内部执行过程示意:

其实上述执行hello.py时,已明确指定由python解释器执行完成。

1.2 python编码格式

python2解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),而python3对内容进行编码的默认为utf-8。

我们在linux环境中会运行一些python脚本,例如:./hello.py ,我们就需要在脚本开始处指定解释器,如下:

#!/usr/bin/env python   #Linux系统下有效
# -*- coding: utf-8 -*-

print('hello world')

PS: 注意添加执行权限

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

#!/usr/bin/env python
  
print "你好,世界"

报错,原因是ascii码无法表示中文

改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
print "你好,世界"

总结:  

  Python2x:

    解决方式:# -*- encoding:utf-8 -*-
  Python3x:
    指定解释器: #!/usr/bin/env python
           # -*- encoding:utf-8 -*-

1.3 注释

注释单行: #

注释多行:'''注释内容''', 或者“““注释内容”””  

1.4 了解pyc文件

在执行python代码时,如果导入了其他的.py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。

ps:代码经过编译可以产生字节码;字节码通过反编译也可以得到代码。

2、变量

变量是什么?  变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。

2.1 变量的声明和引用

name='wusir' #变量的声明
name #通过变量名,引用变量的值
print(name) #引用并且打印变量名name对应的值,即'wusir'

2.2 标识符命名规范

变量名只能是 字母、数字或下划线的任意组合

变量名的第一个字符不能是数字

以下关键字不能声明为变量名:
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

2.3 推荐的定义方式

#驼峰体

AgeOfOldboy = 56
NumberOfStudents = 80

#下划线

age_of_oldboy = 56
number_of_students = 80

PS:建议第二种

2.4 变量的赋值

变量的作用:昵称,其代指内存里某个地址中保存的内容

name1='lhf'
name2='egon'

name1='lhf'
name2=name1

2.5 定义变量不好的方式举例

  变量名为中文、拼音

  变量名过长

  变量名词不达意

3、常量

常量即指不变的量,如π 3.141592653..., 或在程序运行过程中不会改变的量

在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量

AGE_OF_EGON = 66

4、程序交互

#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = input("What is your name?")
age = input("How old are you?")
hometown = input("Where is your hometown?")

print("Hello ",name , "your are ", age , "years old, you came from",hometown)

执行程序就会发现,程序会等待你的输入而进一步往下走。

注意:

python3中统一都是input,python2中有raw_input等同于python3的input,另外python2中也有input

1.res=input("python3: ")

2.res=raw_input("python2: ")

3.res=input("python2: ")

1,2无论接收何种输入,都被存为字符串赋值给res,

3的意思是,用户输入何种类型,就以何种类型赋值给res

5、基础数据类型(初识)

什么是数据类型?

  我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。Python中常用的数据类型有多种,今天我们暂只讲3种, 数字、字符串、布尔类型

5.1 数字

定义:a=1

特性:

  1.只能存放一个值 

  2.一经定义,不可更改

  3.直接访问

  分类:整型,长整型,布尔,浮点,复数

整数类型(int)

int(整型)

在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型)

跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

注意:在Python3里不再有long类型了,全都是int

>>> a= 2**64
>>> type(a)  #type()是查看数据类型的方法
<type 'long'>
>>> b = 2**60
>>> type(b)
<type 'int'>

后续会讲float浮点型, 复数型。

数字相关的内建函数:

5.2 字符串类型

在Python中加了引号的都是字符串。

>>> name = "Alex Li" #双引号
>>> age = "22"       #只要加引号就是字符串
>>> age2 = 22          #int
>>> 
>>> msg = '''My name is Alex, I am 22 years old!'''  #我擦,3个引号也可以
>>> 
>>> hometown = 'ShanDong'   #单引号也可以

那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合。

msg = "My name is Alex , I'm 22 years old!"

多引号的作用就是多行字符串必须用多引号,如下:

msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
print(msg)

字符串的拼接:

数字可以进行加减乘除,对于字符串而言则只能进行“相加”和“相乘”运算

>>> name
'Alex Li'
>>> age
'22'
>>> 
>>> name + age  #相加其实就是简单拼接
'Alex Li22'
>>> 
>>> name * 10 #相乘其实就是复制自己多少次,再拼接在一起
'Alex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex Li'

注意,字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接

>>> type(name),type(age2)
(<type 'str'>, <type 'int'>)
>>> 
>>> name
'Alex Li'
>>> age2
22
>>> name + age2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects #错误提示数字 和 字符 不能拼接

5.3 布尔型

布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断

>>> a=3
>>> b=5
>>> 
>>> a > b #不成立就是False,即假
False
>>> 
>>> a < b #成立就是True, 即真
True

6、格式化输出

 现有一练习需求,问用户的姓名、年龄、工作、爱好 ,然后打印成以下格式:

------------ info of Alex Li -----------
Name  : Alex Li
Age   : 22
job   : Teacher
Hobbie: girl
------------- end -----------------

你怎么实现呢?你会发现,用字符拼接的方式还难实现这种格式的输出,所以一起来学一下新姿势。

只需要把要打印的格式先准备好, 由于里面的 一些信息是需要用户输入的,你没办法预设知道,因此可以先放置个占位符,再把字符串里的占位符与外部的变量做个映射关系就好啦!

name = input("Name:")
age = input("Age:")
job = input("Job:")
hobbie = input("Hobbie:")

info = '''
------------ info of %s ----------- #这里的每个%s就是一个占位符,本行的代表 后面拓号里的 name 
Name  : %s  #代表 name 
Age   : %s  #代表 age  
job   : %s  #代表 job 
Hobbie: %s  #代表 hobbie 
------------- end -----------------
''' %(name,name,age,job,hobbie)  # 这行的 % 号就是 把前面的字符串 与拓号 后面的 变量 关联起来 

print(info)

%s就是代表字符串占位符,除此之外,还有%d,是数字占位符, 如果把上面的age后面的换成%d,就代表你必须只能输入数字啦

Age   : %d

 但是出错了。。。

说%d需要一个数字,而不是str, what? 我们明明输入的是数字呀,22,22呀。

不用担心 ,不要相信你的眼睛我们调试一下,看看输入的到底是不是数字呢?怎么看呢?查看数据类型的方法是什么来着?type()

name = input("Name:")
age = input("Age:")
print(type(age))

执行输出:

Name:Alex
Age:22
<class 'str'> #怎么会是str
Job:IT

让我大声告诉你,input接收的所有输入默认都是字符串格式!

要想程序不出错,那怎么办呢?简单,你可以把str转成int:

age = int(  input("Age:")  )
print(type(age))

肯定没问题了。相反,能不能把字符串转成数字呢?必然可以,str( yourStr )

问题:现在有这么行代码。

msg = "我是%s,年龄%d,目前学习进度为80%"%('小熊',18)
print(msg)

这样会报错的,因为在格式化输出里,你出现%默认为就是占位符的%,但是我想在上面一条语句中最后的80%就是表示80%而不是占位符,怎么办?

msg = "我是%s,年龄%d,目前学习进度为80%%"%('金鑫',18)
print(msg)

这样就可以了,第一个%是对第二个%的转译,告诉Python解释器这只是一个单纯的%,而不是占位符。

7、基本运算符

运算符

  计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算

 7.1 算数运算

7.2 比较运算

7.3 赋值运算

 

7.4 逻辑运算

针对逻辑运算的进一步研究:

1,在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算。

例题:

判断下列逻辑语句的True,False

1,3>4 or 4<3 and 1==1
2,1 < 2 and 3 < 4 or 1>2 
3,2 > 1 and 3 < 4 or 4 > 5 and 2 < 1
4,1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8
5,1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
6,not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6

2 ,  x or y , x为真,值就是x,x为假,值是y;

      x and y, x为真,值是y,x为假,值是x。

 

例:

8 or 4
0 and 3
0 or 4 and 3 or 7 or 9 and 6

in,not in :

判断子元素是否在原字符串(字典,列表,集合)中:

例:

#print('喜欢' in 'dkfljadklf喜欢hfjdkas')
#print('a' in 'bcvd')
#print('y' not in 'ofkjdslaf')

8、流程控制

8.1 if 条件语句

if...else 语句

单分支

if 条件:
    满足条件后要执行的代码

双分支

"""
if 条件:
    满足条件执行代码
else:
    if条件不满足就走这段
"""
age_of_oldboy = 48

if age_of_oldboy > 50 :
    print("Too old, time to retire..")
else:
    print("还能折腾几年!")

PS: 注意缩进

Python是门超级简洁的语言,发明者定是觉得用{}太丑了,所以索性直接不用它,那怎么能区分代码块呢?答案就是强制缩进。

Python的缩进有以下几个原则:

  • 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进;
  • 同一级别的代码,缩进必须一致;
  • 官方建议缩进用4个空格,当然你也可以用2个,如果你想被人笑话的话。

多分支

回到流程控制上来,if...else ...可以有多个分支条件。

if 条件:
    满足条件执行代码
elif 条件:
    上面的条件不满足就走这个
elif 条件:
    上面的条件不满足就走这个
elif 条件:
    上面的条件不满足就走这个    
else:
    上面所有的条件不满足就走这段

写个猜测年龄的游戏吧。

age_of_oldboy = 48

guess = int(input(">>:"))

if guess > age_of_oldboy :
    print("猜的太大了,往小里试试...")

elif guess < age_of_oldboy :
    print("猜的太小了,往大里试试...")

else:
    print("恭喜你,猜对了...")

要求用户输入0-100的数字后,你能正确打印他的对应成绩。

score = int(input("输入分数:"))

if score > 100:
    print("我擦,最高分才100...")
elif score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 60:
    print("C")
elif score >= 40:
    print("D")
else:
    print("太笨了...E")

这里请注意,就是当我输入95的时候 ,它打印的结果是A,但是95 明明也大于第二个条件elif score >=80, 为什么不打印B呢?这是因为代码是从上到下依次判断,只要满足一个,就不会再往下走啦,这一点一定要清楚呀!

8.2 while循环

基本循环格式

while 条件:     
    # 循环体
 
    # 如果条件为真,那么循环体则执行
    # 如果条件为假,那么循环体不执行

  break:用于完全结束一个循环,跳出循环体执行循环后面的语句

  continue:和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环

例子,break:

count = 0
while count <= 100 : #只要count<=100就不断执行下面的代码
    print("loop ", count)
    if count == 5:
        break
    count +=1 #每执行一次,就把count+1,要不然就变成死循环啦,因为count一直是0

print("-----out of while loop ------")

输出结果:

loop  0
loop  1
loop  2
loop  3
loop  4
loop  5
-----out of while loop ------

例子,continue

count = 0
while count <= 100 : 
    count += 1
    if count > 5 and count < 95: #只要count在6-94之间,就不走下面的print语句,直接进入下一次loop
        continue 
    print("loop ", count)

print("-----out of while loop ------")

输出结果;

loop  1
loop  2
loop  3
loop  4
loop  5
loop  95
loop  96
loop  97
loop  98
loop  99
loop  100
loop  101
-----out of while loop ------

利用标志位tag控制循环:

tag=True
while tag:
    username=input('username: ')
    password=input('password: ')
    if username == 'egon' and password == '123':
        while tag:
            cmd=input('>>: ')
            if cmd == 'q':
                tag=False
                continue
            print('------>%s' %cmd)

while ... else ..

与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句

while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)

else:
    print("循环正常执行完啦")
print("-----out of while loop ------")

输出结果:

Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦
-----out of while loop ------

执行过程中被break的情况,就不会执行else的语句:

count = 0
while count <= 5 :
    count += 1
    if count == 3:break
    print("Loop",count)

else:
    print("循环正常执行完啦")
print("-----out of while loop ------")

输出:

Loop 1
Loop 2
-----out of while loop ------

8.3 for 循环

双层嵌套打出99乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print('%s*%s=%s' %(i,j,i*j),end=' ')
    print()

课后作业

1、使用while循环输入 1 2 3 4 5 6     8 9 10

2、求1-100的所有数的和

3、输出 1-100 内的所有奇数

4、输出 1-100 内的所有偶数

5、求1-2+3-4+5 ... 99的所有数的和

6、用户登陆(三次机会重试)

#1-5略
#6题
dic={
    'egon1':{'password':'123','count':0},
    'egon2':{'password':'123','count':0},
    'egon3':{'password':'123','count':0},

}


while True:
    name=input('username>>: ')

    if not name in dic:
        print('用户不存在')
        continue
    if dic[name]['count'] > 2:
        print('尝试次数过多,锁定')
        continue

    password=input('password>>: ')


    if password == dic[name]['password']:
        print('登录成功')
        break
    else:
        print('用户名或密码错误')
        dic[name]['count']+=1
答案
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!