首页 > 编程语言 > 详细

python开发基础篇(一)

时间:2018-06-18 12:17:54      阅读:206      评论:0      收藏:0      [点我收藏+]

变量及其定义规范

1 #变量名(相当于门牌号,指向值所在的空间),等号,变量值
2 name=Egon
3 sex=male
4 age=18
5 level=10

变量的定义规范

#1. 变量名只能是 字母、数字或下划线的任意组合
#2. 变量名的第一个字符不能是数字
#3. 关键字不能声明为变量名[‘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‘]

定义方式

#驼峰体
AgeOfOldboy = 56 
NumberOfStudents = 80
#下划线(推荐使用)  尽量取一些有意义的名称,使人一看就知道这个变量所代表的含义
age_of_oldboy = 56 
number_of_students = 80

定义变量会有:id,type,value
#1 等号比较的是value,
#2 is比较的是id

#强调:
#1. id相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x=‘Info Egon:18‘
>>> y=‘Info Egon:18‘
>>> id(x)
4376607152
>>> id(y)
4376607408
>>>
>>> x == y
True
>>> x is y
False

 常量

常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量
举例,假如老男孩老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
AGE_OF_OLDBOY = 56

#ps:在c语言中有专门的常量定义语法,const int count = 60;一旦定义为常量,更改即会报错

用户交互

#在python3中
input:用户输入任何值,都存成字符串类型

#在python2中
input:用户输入什么类型,就存成什么类型
raw_input:等于python3的input

注释

    随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码啦,有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了,这太正常了。 另外,你以后在工作中会发现,一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写的代码,别人也要用你的,如果代码不加注释,你自己都看不懂,更别说别人了,这产会挨打的。所以为了避免这种尴尬的事情发生,一定要增加你代码的可读性。

    代码注释分单行和多行注释, 单行注释用#,多行注释可以用三对双引号""" """

代码注释原则

#1. 不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可
#2. 注释可以用中文或英文,但不要用拼音

文件头注释

#!/usr/bin/env python
# -*- coding: utf-8 -*- 

基本数据类型

什么是数据?为何要有多种类型的数据?

#数据即变量的值,如age=18,18则是我们保存的数据。
#变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识

数字

#int整型
定义:age=10 #age=int(10)
用于标识:年龄,等级,身份证号,qq号,个数

#float浮点型
定义:salary=3.1 #salary=float(3.1)
用于标识:工资,身高,体重,
技术分享图片
#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>

#complex复数型
>>> x=1-2j
>>> x.imag
-2.0
>>> x.real
1.0
其他数字类型(了解)

字符串

#在python中,加了引号的字符就是字符串类型,python并没有字符类型。
定义:name=Dean #name=str(‘Dean‘) 
用于标识:描述性的内容,如姓名,性别,国籍,种族
技术分享图片
#那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合
msg = "My name is Egon , I‘m 18 years old!"

#多引号什么作用呢?作用就是多行字符串必须用多引号
msg = ‘‘‘
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
‘‘‘
print(msg)
单引号双引号与三引号的区别
技术分享图片
#数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。
>>> name=egon
>>> age=18
>>> name+age #相加其实就是简单拼接
egon18
>>> name*5 
egonegonegonegonegon


#注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次,

#注意2:只能字符串加字符串,不能字符串加其他类型
字符串拼接

列表

#在[]内用逗号分隔,可以存放n个任意类型的值
定义:students=[egon,alex,wupeiqi,] #students=list([‘egon‘,‘alex‘,‘wupeiqi‘,]) 
用于标识:存储多个值的情况,比如一个人有多个爱好
技术分享图片
#存放多个学生的信息:姓名,年龄,爱好
>>> students_info=[[egon,18,[play,]],[alex,18,[play,sleep]]]
>>> students_info[0][2][0] #取出第一个学生的第一个爱好
play
列表嵌套实例

字典

#为何还要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
>>> info=[egon,male,18]
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用
>>> info[2]
18
但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
即:
        #name, sex, age
info=[egon,male,18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典
#在{}内用逗号分隔,可以存放多个key:value的值,value可以是任意类型
定义:info={name:egon,age:18,sex:18} #info=dict({‘name‘:‘egon‘,‘age‘:18,‘sex‘:18})
用于标识:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效地取值
技术分享图片
info={
    name:egon,
    hobbies:[play,sleep],
    company_info:{
        name:Oldboy,
        type:education,
        emp_num:40,
    }
}
print(info[company_info][name]) #取公司名


students=[
    {name:alex,age:38,hobbies:[play,sleep]},
    {name:egon,age:18,hobbies:[read,sleep]},
    {name:wupeiqi,age:58,hobbies:[music,read,sleep]},
]
print(students[1][hobbies][1]) #取第二个学生的第二个爱好
字典嵌套

布尔

# 在python3的学习中,有些地方是把布尔类型与数字类型放在一起的
#布尔值,一个True一个False
#计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识
>>> a=3
>>> b=5
>>> 
>>> a > b #不成立就是False,即假
False
>>> 
>>> a < b #成立就是True, 即真
True

接下来就可以根据条件结果来干不同的事情了:
if a > b 
   print(a is bigger than b )

else 
   print(a is smaller than b )
上面是伪代码,但意味着, 计算机已经可以像人脑一样根据判断结果不同,来执行不同的动作。

布尔类型重点!!!

 

#所有数据类型都自带布尔值
1、None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
2、其余均为真

 

数据类型分类(重要)

#1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典

#2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)

 格式化输出

程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式

    比如要求用户输入用户名和年龄,然后打印如下格式:

    My name is xxx,my age is xxx.

    很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。

    这就用到了占位符,如:%s、%d

#%s字符串占位符:可以接收字符串,也可接收数字
print(My name is %s,my age is %s %(egon,18))
#%d数字占位符:只能接收数字
print(My name is %s,my age is %d %(egon,18))
print(My name is %s,my age is %d %(egon,18)) #报错

#接收用户输入,打印成指定格式
name=input(your name: )
age=input(your age: ) #用户输入18,会存成字符串18,无法传给%d

print(My name is %s,my age is %s %(name,age))

#注意:
#print(‘My name is %s,my age is %d‘ %(name,age)) #age为字符串类型,无法传给%d,所以会报错
技术分享图片
练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Egon -----------
Name  : Egon
Age   : 22
Sex   : male
Job   : Teacher 
------------- end -----------------
一个小练习

基本运算符

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

    算数运算

    以下假设变量:a=10,b=20

                      技术分享图片

    比较运算

    以下假设变量:a=10,b=20

                     技术分享图片

 赋值运算

    以下假设变量:a=10,b=20

         技术分享图片

    逻辑运算

        技术分享图片

 

>>> True or Flase and False
True
>>> (True or Flase) and False
False

身份运算

#is比较的是id
#而==比较的是值

流程控制之if···else

既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算在上一节我们已经说过了。对于逻辑运算,即人根据外部条件的变化而做出不同的反映,比如

1 如果:女人的年龄>30岁,那么:叫阿姨

age_of_girl=31
if age_of_girl > 30:
    print(阿姨好)

2 如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐姐

age_of_girl=18
if age_of_girl > 30:
    print(阿姨好)
else:
    print(小姐姐好)

3 如果:女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨

age_of_girl=18
height=171
weight=99
is_pretty=True
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    print(表白...)else:
    print(阿姨好)
技术分享图片
#在表白的基础上继续:
#如果表白成功,那么:在一起
#否则:打印。。。

age_of_girl=18
height=171
weight=99
is_pretty=True

success=False

if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    if success:
        print(表白成功,在一起)
    else:
        print(什么爱情不爱情的,爱nmlgb的爱情,爱nmlg啊...)
else:
    print(阿姨好)
if嵌套

    4 如果:成绩>=90,那么:优秀

       如果成绩>=80且<90,那么:良好

       如果成绩>=70且<80,那么:普通

       其他情况:很差

技术分享图片
score=input(>>: )
score=int(score)

if score >= 90:
    print(优秀)
elif score >= 80:
    print(良好)
elif score >= 70:
    print(普通)
else:
    print(很差)
参考代码
  if 条件1:

    缩进的代码块

  elif 条件2:

    缩进的代码块

  elif 条件3:

    缩进的代码块

  ......

  else:  

    缩进的代码块
技术分享图片
#!/usr/bin/env python

name=input(请输入用户名字:)
password=input(请输入密码:)

if name == egon and password == 123:
    print(egon login success)
else:
    print(用户名或密码错误)
练习一,登陆验证
技术分享图片
#!/usr/bin/env python
#根据用户输入内容打印其权限

‘‘‘
egon --> 超级管理员
tom  --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
‘‘‘
name=input(请输入用户名字:)

if name == egon:
    print(超级管理员)
elif name == tom:
    print(普通管理员)
elif name == jack or name == rain:
    print(业务主管)
else:
    print(普通用户)
根据用户输入内容打印其权限
技术分享图片
# 如果:今天是Monday,那么:上班
# 如果:今天是Tuesday,那么:上班
# 如果:今天是Wednesday,那么:上班
# 如果:今天是Thursday,那么:上班
# 如果:今天是Friday,那么:上班
# 如果:今天是Saturday,那么:出去浪
# 如果:今天是Sunday,那么:出去浪


#方式一:
today=input(>>: )
if today == Monday:
    print(上班)
elif today == Tuesday:
    print(上班)
elif today == Wednesday:
    print(上班)
elif today == Thursday:
    print(上班)
elif today == Friday:
    print(上班)
elif today == Saturday:
    print(出去浪)
elif today == Sunday:
    print(出去浪)
else:
    print(‘‘‘必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ‘‘‘)

#方式二:
today=input(>>: )
if today == Saturday or today == Sunday:
    print(出去浪)

elif today == Monday or today == Tuesday or today == Wednesday     or today == Thursday or today == Friday:
    print(上班)

else:
    print(‘‘‘必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ‘‘‘)


#方式三:
today=input(>>: )
if today in [Saturday,Sunday]:
    print(出去浪)
elif today in [Monday,Tuesday,Wednesday,Thursday,Friday]:
    print(上班)
else:
    print(‘‘‘必须输入其中一种:
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    ‘‘‘)

练习三
练习三

流程控制之while循环

1 为何要用循环

#上节课我们已经学会用if .. else 来猜年龄的游戏啦,但是只能猜一次就中的机率太小了,如果我想给玩家3次机会呢?就是程序启动后,玩家最多可以试3次,这个怎么弄呢?你总不会想着把代码复制3次吧。。。。

age_of_oldboy = 48

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

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

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

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

#第2次
guess = int(input(">>:"))

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

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

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

#第3次
guess = int(input(">>:"))

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

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

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

#即使是小白的你,也觉得的太low了是不是,以后要修改功能还得修改3次,因此记住,写重复的代码是程序员最不耻的行为。
那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场啦

2 条件循环:while,语法如下

while 条件:    
    # 循环体
 
    # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。
    # 如果条件为假,那么循环体不执行,循环终止
#打印0-10
count=0
while count <= 10:
    print(loop,count)
    count+=1

#打印0-10之间的偶数
count=0
while count <= 10:
    if count%2 == 0:
        print(loop,count)
    count+=1

#打印0-10之间的奇数
count=0
while count <= 10:
    if count%2 == 1:
        print(loop,count)
    count+=1

 

3 死循环

import time
num=0
while True:
    print(count,num)
    time.sleep(1)
    num+=1 

4 循环嵌套与tag

tag=True 

  while tag:

    ......

    while tag:

      ........

      while tag:

        tag=False
#练习,要求如下:
    1 循环验证用户输入的用户名与密码
    2 认证通过后,运行用户重复执行命令
    3 当用户输入命令为quit时,则退出整个程序 
技术分享图片
#实现一:
name=egon
password=123

while True:
    inp_name=input(用户名: )
    inp_pwd=input(密码: )
    if inp_name == name and inp_pwd == password:
        while True:
            cmd=input(>>: )
            if not cmd:continue
            if cmd == quit:
                break
            print(run <%s> %cmd)
    else:
        print(用户名或密码错误)
        continue
    break

#实现二:使用tag
name=egon
password=123

tag=True
while tag:
    inp_name=input(用户名: )
    inp_pwd=input(密码: )
    if inp_name == name and inp_pwd == password:
        while tag:
            cmd=input(>>: )
            if not cmd:continue
            if cmd == quit:
                tag=False
                continue
            print(run <%s> %cmd)
    else:
        print(用户名或密码错误)
View Code

4 break与continue

#break用于退出本层循环
while True:
    print "123"
    break
    print "456"

#continue用于退出本次循环,继续下一次循环
while True:
    print "123"
    continue
    print "456"

5 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 ------

 

6 while循环练习题

#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. 用户登陆(三次机会重试)
#7:猜年龄游戏
要求:
    允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
#8:猜年龄游戏升级版 
要求:
    允许用户最多尝试3次
    每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
    如何猜对了,就直接退出
技术分享图片
#题一
count=1
while count <= 10:
    if count == 7:
        count+=1
        continue
    print(count)
    count+=1
    

count=1
while count <= 10:
    if count != 7:
        print(count)
    count+=1
    

#题目二
res=0
count=1
while count <= 100:
    res+=count
    count+=1
print(res)

#题目三
count=1
while count <= 100:
    if count%2 != 0:
        print(count)
    count+=1
    
#题目四
count=1
while count <= 100:
    if count%2 == 0:
        print(count)
    count+=1
    
    
    
#题目五
res=0
count=1
while count <= 5:
    if count%2 == 0:
        res-=count
    else:
        res+=count
    count+=1
print(res)
    

#题目六
count=0
while count < 3:
    name=input(请输入用户名:)
    password=input(请输入密码:)
    if name == egon and password == 123:
        print(login success)
        break
    else:
        print(用户名或者密码错误)
        count+=1

#题目七
age_of_oldboy=73

count=0
while count < 3:
    guess=int(input(>>: ))
    if guess == age_of_oldboy:
        print(you got it)
        break
    count+=1

#题目八
age_of_oldboy=73

count=0
while True:
    if count == 3:
        choice=input(继续(Y/N?)>>: )
        if choice == Y or choice == y:
            count=0
        else:
            break

    guess=int(input(>>: ))
    if guess == age_of_oldboy:
        print(you got it)
        break
    count+=1
View Code

流程控制之for循环

1 迭代式循环:for,语法如下

  for i in range(10):

    缩进的代码块

2 break与continue(同上)

3 循环嵌套

技术分享图片
for i in range(1,10):
    for j in range(1,i+1):
        print(%s*%s=%s %(i,j,i*j),end= )
    print()
九九乘法表打印
技术分享图片
#分析
‘‘‘

             #max_level=5
    *        #current_level=1,空格数=4,*号数=1
   ***       #current_level=2,空格数=3,*号数=3
  *****      #current_level=3,空格数=2,*号数=5
 *******     #current_level=4,空格数=1,*号数=7
*********    #current_level=5,空格数=0,*号数=9

#数学表达式
空格数=max_level-current_level
*号数=2*current_level-1

‘‘‘

#实现
max_level=5
for current_level in range(1,max_level+1):
    for i in range(max_level-current_level):
        print( ,end=‘‘) #在一行中连续打印多个空格
    for j in range(2*current_level-1):
        print(*,end=‘‘) #在一行中连续打印多个空格
    print()

打印金字塔
金字塔

for+else(参照while+else)

作业:编写登录接口

基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
技术分享图片
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
View Code
升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
技术分享图片
#db.txt内容:egon1|egon2|
dic={
    egon1:{password:123,count:0},
    egon2:{password:123,count:0},
    egon3:{password:123,count:0},
}

count=0
while True:
    name=input(u>>: )
    if name not in dic:
        print(用户不存在)
        continue

    with open(db.txt,r) as f:
        lock_users=f.read().split(|)
        if name  in lock_users:
            print(用户%s已经被锁定 %name)
            break

    if dic[name][count] > 2:
        print(尝试次数过多,锁定)
        with open(db.txt,a) as f:
            f.write(%s| %name)
        break

    password=input(p>>: )

    if password == dic[name]:
        print(登录成功)
        break
    else:
        print(用户名或密码错误)
        dic[name][count]+=1
View Code

 

python开发基础篇(一)

原文:https://www.cnblogs.com/thinheader/p/9194639.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!