美文网首页
Python-lesson 1-python入门

Python-lesson 1-python入门

作者: noodlesbook | 来源:发表于2020-02-14 20:53 被阅读0次

    1、变量

    1.1 什么是变量?

    • 变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态。

    • 如何定义变量
      变量名(相当于门牌号,指向值所在的空间),等号,变量值
      name='Egon'
      sex='male'
      age=18
      level=10

    1.2 变量的定义规范:

    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']

    1.3 定义方式

    1. 驼峰体
      AgeOfOldboy = 56
      NumberOfStudents = 80
    2. 下划线(推荐使用)
      age_of_oldboy = 56
      number_of_students = 80
    • 定义变量名不好的方式
    1. 变量名为中文、拼音
    2. 变量名过长
    3. 变量名词不达意
    • 定义变量会有: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;一旦定义为常量,更改即会报错

    2、用户与程序交互

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

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

    代码注释的原则:

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

    文件头
    #!/usr/bin/env python **
    # -- coding: utf-8 -- </pre>

    3、基本数据类型

    3.1 数字

    1、int整型
    定义:age=10 //本质age=int(10.1)
    用于标识:年龄,等级,身份证号,qq号,个数

    2、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
    

    3.2 字符串

    1. 在python中,加了引号的字符就是字符串类型,python并没有字符类型。
      定义:name='egon' #name=str('egon')
      用于标识:描述性的内容,如姓名,性别,国籍,种族
      类型总结:字符串本质是一个值,但可以按照索引取值,不可变类型
    # 那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合
    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:只能字符串加字符串,不能字符串加其他类型
    

    3.3 列表

    • 在[ ]内用逗号分隔,可以存放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'
    

    3.4 字典

    • 在{ }内用逗号分隔,可以存放多个key:value的值,value可以是任意类型
      定义:info={'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]) #取第二个学生的第二个爱好
    

    3.5 布尔

    • 即判断一个条件成立时,用True标识,不成立则用False标识

    a=3
    b=5

    a > b #不成立就是False,即假
    False

    a < b #成立就是True, 即真
    True

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

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

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

    4、格式化输出

    占位符
    %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')) //报错

    %f浮点数占位符:接收小数

    接收用户输入,打印成指定格式
    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,所以会报错

    5、基本运算符

    5.1 算数运算

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


    image.png

    5.2 比较运算

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


    image.png

    5.3 赋值运算

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


    image.png

    5.4 逻辑运算

    image.png
    1. 三者的优先级从高到低分别是:not,or,and
      3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3
      False
    2. 最好使用括号来区别优先级,其实意义与上面的一样
      (3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3)
      False

    5.5 身份运算

    1、is比较的是id
    2、而==比较的是值

    6、流程控制之if...else

    1. 如果:女人的年龄>30岁,那么:叫阿姨**
    age_of_girl=31
    if age_of_girl > 30: 
    print('阿姨好')
    
    1. 如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐**
    age_of_girl=18
    if age_of_girl > 30: 
    print('阿姨好') 
    else: 
    print('小姐好')
    
    1. 如果:女人的年龄>=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('阿姨好')
    
    1. if 嵌套
    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啊...')
    print('阿姨好')
    
    1. if ···elif ···elif
      score=input('>>: ')
      score=int(score)
      if score >= 90:
      print('优秀')
      elif score >= 80:
      print('良好')
      elif score >= 70:
      print('普通') else:
      print('很差')

    7、流程控制之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
    

    7.1 死循环

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

    7.2 循环嵌套与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('用户名或密码错误')
    

    7.3 break与continue

    break用于退出本层循环
    continue用于退出本次循环,继续下一次循环
    诀窍:如果是while嵌套的话,while 条件可定义一个变量,通过改变条件变为false,可以直接从最里层退出到最外层

    7.4 while+else

    while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句;如果执行过程中被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 ------
    

    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
    

    8 流程控制之for循环

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

    for i in range(10):
        缩进的代码块

    1. break与continue(同上)

    2. 循环嵌套

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

    while循环 vs for循环区别

    1. while循环:称之为条件循环,循环的次数 取决于条件何时为false
      for循环:称之为。。。循环,循环的次数取决于数据的包含的元素的个数

    2. for循环专门用来取值,在循环取值方面比while循环要强大,以后但凡遇到循环取值的场景,就应该用for循环

    3. while对字典取值没有索引,要用到迭代器,很麻烦;for循环对字典取值,默认取出的是key,若要取出值,print(k,dic[k]);针对列表取值,for i in range(3): print(i,l[i])

    4. for...else 与while...else一致,只有循环内容没有break,才会执行else

    金字塔

    # 分析
                 #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()
    
    注意:print('aaa',end='\n')    //默认打印后面有个换行符end='\n',设置为end='' 则为不换行。
    

    9、开发工具IDE

    1. 为何要用IDE
      到现在为止,我们也是写过代码的人啦,但你有没有发现,每次写代码要新建文件、写完保存时还要选择存放地点,执行时还要切换到命令行调用python解释器,好麻烦呀,能否一气呵成,让我简单的写代码?此时开发工具IDE上场啦,一个好的IDE能帮你大大提升开发效率。

    2. 安装
      下载地址:https://www.jetbrains.com/pycharm/download 选择Professional 专业版

    Comunnity社区版是免费的,但支持的功能不多,比如以后我们会学的Django就不支持,所以还是用专业版,但专业版是收费的,一年一千多,不便宜。唉,万能的淘宝。。。不宜再多说啦。
    注册完成后启动,会让你先创建一个项目,其实就是一个文件夹,我们以后的代码都存在这里面


    image.png
    1. 创建目录
      你以后写的项目可能有成百上千个代码文件 ,全放在一起可不好,所以一般把同样功能的代码放在一个目录,我们现在以天为单位,为每天的学习创建一个目录day1,day2,day3...这样


      image.png
    2. 创建代码文件


      image.png
    3. 执行代码


      image.png

    10、作业

    1 练习题
    1、简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型
    编译型:编译一次,可以永久使用;
    解释性:每次使用都需要解释;

    2、执行 Python 脚本的两种方式是什么
    (1)、交互式,调试速度快
    (2)、使用编译器,可以永久保存

    3、Pyhton 单行注释和多行注释分别用什么?
    单行:#
    多行:''' ''' 或者 “”“ ”“”

    4、布尔值分别有什么?
    True False

    5、声明变量注意事项有那些?
    不能纯数字、不能使用系统内置关键字、不能以数字开头

    6、如何查看变量在内存中的地址?
    age =18
    print(id(age))

    7、写代码
    实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!

    tag=0
    while True:
        name = input('请输入用户名>>>:')
        pwd = input('请输入密码>>>:')
        if name == 'seven' and pwd == '123':
            print('登录成功!')
            break
        else:
            print('用户或密码错误,请重新输入!')
            tag += 1
        if tag == 3:
            print('输入错误过多!')
            break
    

    8、写代码
    a. 使用while循环实现输出2-3+4-5+6...+100 的和

    num = 0
    he = 0
    while num<=100:
        if num % 2 == 0:
            he += num
        else:
            he -= num
        num += 1
    
    print(he)
    

    b. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 使用

     i = 1
     while i <= 12:
         if i == 6 or i == 10:
             i += 1
             continue
         print(i)
         i += 1
    

    e.while 循环实现输出 1-100 内的所有奇数
    使用 while 循环实现输出 1-100 内的所有偶数

    9、现有如下两个变量,请简述 n1 和 n2 是什么关系?
    n1 = 123456
    n2 = n1

    n1 = 123456
    n2 = n1
    print(n1 == n2)
    print(id(n1),id(n2))
    

    2 作业:编写登陆接口

    • 基础需求:
      让用户输入用户名密码
      认证成功后显示欢迎信息
      输错三次后退出程序
    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
    
    • 升级需求:
      可以支持多个用户登录 (提示,通过列表存多个账户信息)
      用户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
    

    相关文章

      网友评论

          本文标题:Python-lesson 1-python入门

          本文链接:https://www.haomeiwen.com/subject/cwajfhtx.html