zoukankan      html  css  js  c++  java
  • Python学习之旅--第一周--初识Python

    一:Python是一种什么样的语言?

      1.语言的分类:

      a.编译型语言和解释性语言:

       通常所说的计算机语言分为编译型和解释型语言。编译型语言典型的如C,C++,通常在程序执行之前必须经由编译器编译成机器可识别的可执行文件。而解释型语言则不用预先编译,在程序执行过程中由解释器逐行解释成二进制代码供计算机执行。典型的如JAVA,JAVASCRIPT,VBSCRIPT,PYTHON等通常编译型语言因预先进行了编译,所以执行效率较高,而解释型语言效率稍慢。

      b.静态语言和动态语言:

       静态语言和动态语言一般指静态类型语言和动态类型语言。

      (1)动态类型语言:动态类型只是运行期间才去做数据类型检查的语言。如python,ruby等。

      (2)静态类型语言:静态类型语言与动态类型语言刚好相反,类型检查是在编译期间完成的。如C/C++,C#,java等。

      c.强类型定义语言和弱类型定义语言:

      (1)强类型定义语言:强制数据类型定义。

      (2)弱类型定义语言:数据类型可以被忽略的语言。

    通过上述介绍,我们可以得出,PYTHON是一门动态解释型的强类型定义语言。

    二.第一个python程序:

    按照国际惯例,我们编写第一个hello world!程序。

    创建一个文件,helloworld.py
    $vi helloworld.py

    #!/usr/bin/env python
     
     print("Hello World!")
     
    保存后执行:
    $python helloworld.py
    Hello World!


    二.变量

     1.变量定义:
      变量是内存中分配的一段地址或者容器,供程序存储数据。变量不仅可以是数字,也可以是字符串或者布尔值。
     变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,比如:
      
    a = 1

      变量a是一个整数。

    b = "Tim"  或者 b = 'Tim'

      变量b是一个字符串,在python中,单引号‘’和双引号“”的效果相同。

    c = True

      变量c是一个布尔值。

      我们编写一个程序:

    #!/usr/bin/env python
    name = 'Tim'
    age = 20
    city = 'PuDong'
    
    print(name,age,city)

      执行结果如下:

    Tim 20 PuDong

       2.思考变量的赋值:

    #!/usr/bin/env python
    name = 'Tim'
    name2 = name
    print(name,name2)
    name2 = 'King'
    print(name,name2)

      执行结果如下:

    Tim Tim
    Tim King

      第一次结果name的值被赋予name2所以两值相同。

      第二次把'King'值赋给了name2,但并没有赋给name,故结果如此。


    三.字符编码

      我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。

    因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295

      python默认使用uft-8编码。utf-8编码来源于unicode编码,由于可变长度,在编写英文的时候相比unicode可节省一倍的存储空间。常用的英文使用1个字节,汉字使用3个字节。只有比较生僻的字符才会编码成4-6个字节。

      字符集的转换:encode(),decode()

    #-*- coding:utf-8 -*-
    s = '你好'
    s_to_unicode = s.decode("utf-8")  #将字符转化为unicode
    print(s_to_unicode,type(s_to_unicode))
    s_to_gbk = s_to_unicode.encode("gbk") ##再将unicode字符转化为gbk
    gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") #将gbk转化为utf8
    print(s_to_gbk)

    四.注释
      为了后期的代码维护,我们要养成在程序中做好注释的习惯。
      python中,单行注释使用#号,如:
    _username = 'alex'
    _password = 'abc123'
    #将用户输入的内容赋值给name变量

      也可以用'''...''',"""..."""或者'''进行多行注释。因为python标准书写规范规定了每行不超过80个字符。因此,长字符串的注释可以用多行注释。

      

    # Author:Tim Gu
    #!/usr/bin/env python
    '''
    This is my first program.
    Tt is hello world!
    '''
    print('Hello World!')

    五.格式化字符串
      python中我们使用%d,%s,%f来分别作为整数,字符串以及浮点数的占位符。
    # Author:Tim Gu
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    name = input("input your name:")
    age = int(input("input your age:") ) #convert str to int
    job = input("input your job:")
    height = float(input("input your height:"))
    
    msg = '''
    Infomation of user %s:
    ---------------
    Name:   %s
    Age :   %d
    Job :   %s
    Height: %f
    -------End-----
    ''' % (name,name,age,job,height )
    print(msg)


    依次输入Tim 30 IT 1.7后结果如下:
    Infomation of user Tim:
    ---------------
    Name:   Tim
    Age :   30
    Job :   IT
    Height: 1.700000
    -------End-----

    六.常用模块初始
      

      在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

    为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

      Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。

      我们为了使输入的密码为密文,可是使用getpass模块,例如:passwd.py

    import getpass
    
    _username = 'Tim'
    _password = 'abc123'
    #将用户输入的内容赋值给name变量
    user = input("username:")
    pwd = getpass.getpass("password:")
    if user == _username and pwd == _password:
        print("Welcome user %s login..."%user)
    else:
        print("wrong username or password")
    
    #打印输入的内容
    print(user,pwd)
      这样使用了python的getpass模块,使得输入密码时显示的是密文,增加了安全性。

      我们还可以使用os模块来调用系统命令,如:
    import os
    
    os.system('df')
    os.mkdir('yourDir')
    cmd_res = os.popen("df -h").read()

      

      以上我们所说的都是调用python自身的模块,另外我们还可以自定义自己的模块,如

    比如我们之前已建了passwd.py这个模块,现在在另外的代码中去调用这个模块:mod.py

      

    import passwd

      结果将和直接执行passwd.py一样,输入Tim,abc123后结果如下:

    username:Tim
    password:abc123
    Welcome user Tim login...
    Tim abc123

      需要注意的是,这两个模块都位于同一个目录下,python在调用模块时,会根据python的全局环境变量中的目录中去找相应的模块。

      查看python的全局环境变量可以如下:

    import sys
    print(sys.path)

      直接执行的结果如下:

    ['C:\workspace\day1', 'C:\workspace', 'C:\Python35\python35.zip', 'C:\Python35\DLLs', 'C:\Python35\lib', 'C:\Python35', 'C:\Python35\lib\site-packages']

      一般在开发过程中,我们自定义模块放入site-packages目录中,如果调用的模块提示未找到,首先先确定模块存放路径,在查看全局环境变量,解决办法要么增加相应环境变量,要么把模块移动至site-packages目录中。



    七.流程控制之if与循环
    一个简单的if语句:
    # Author:Tim Gu
    _username = 'Tim'
    _password = 'abc123'
    
    username = input("username:")
    password = input("password:")
    
    if username == username and _password == password:
        print("Congratulations,You have logon!")

      输入Tim abc123后,结果如下:

    username:Tim
    password:abc123
    Congratulations,You have logon!

      需要注意的是,print语句在这里进行了缩进,python语句抛弃了{}作为语句块的开始和结束,全部使用缩进来代表语句块,故此,缩进在python中是非常严格的。在官方的

    标准中,建议的是每次缩进4格。

      if...else语句:

      

    # Author:Tim Gu
    _username = 'Tim'
    _password = 'abc123'
    
    username = input("username:")
    password = input("password:")
    
    if username == _username:
        print("username is correct...")
        if  password == _password:
            print("Congratulations,You have logon!")
    
        else:
            print("password is invalid...")
    
    else:
        print("your username is not correct...")

    输入Tim,abc123后结果:

    username:Tim
    password:abc123
    username is correct...
    Congratulations,You have logon!

    输入用户名正确,密码不正确如下:

    username:Tim
    password:123
    username is correct...
    password is invalid...

    输入用户名不正确,如下:

    username:king
    password:123
    your username is not correct...

    八.猜年龄游戏

    使用if...else来实现一个猜年龄小游戏:
    # Author:Tim Gu
    age = 22
    guess_num = int(input("input your guess num:"))
    if guess_num == age:
        print("Congratulations,you got it!")
    elif guess_num > age:
        print("Think smaller!")
    else:
        print("Think bigger!")

      这个语句当输入等于,大于或者小于22时,都能相应的输出字符串,但是只能猜一次。如果想猜测多次,需要增加for循环,如下:

    age = 22
    for i in range(10):
        if i < 3:
            guess_num = int(input("input your guess num:"))
            if guess_num == age:
                print("Congratulations,you got it!")
                break #中断循环
            elif guess_num > age:
                print("Think smaller!")
            else:
                print("Think bigger!")
        else:
            print("too many attempts ...bye")
            break

    这个代码猜测3次,猜中22通过break中断循环,同样的也可以用如下方式:

    age = 22
    for i in range(3):
        guess_num = int(input("input your guess num:"))
        if guess_num == age:
            print("Congratulations,you got it!")
            break #中断循环
        elif guess_num > age:
            print("Think smaller!")
        else:
            print("Think bigger!")
        if i == 2:
            print("too many attempts...bye")

    执行结果:

    input your guess num:2
    Think bigger!
    input your guess num:2
    Think bigger!
    input your guess num:22
    Congratulations,you got it!

    或者

    input your guess num:1
    Think bigger!
    input your guess num:1
    Think bigger!
    input your guess num:1
    Think bigger!
    too many attempts...bye

    以上的程序还可以改成输入3次错误后,询问用户是否还继续,可以这样写:
    # Author:Tim Gu
    age = 22
    counter = 0
    for i in range(10):
        if counter < 3:
            guess_num = int(input("input your guess num:"))
            if guess_num == age:
                print("Congratulations,you got it!")
                break #中断循环
            elif guess_num > age:
                print("Think smaller!")
            else:
                print("Think bigger!")
        else:
            continue_comfirm = input("Do you want to continue?y or n")
            if continue_comfirm == 'y':
                counter = 0
           continue
    else: print("bye!") break counter += 1

    在输入3次错误之后,程序询问是否还继续,输入y继续,总共循环10次。





    九.第一周作业:
    1.
    编写登录接口
    输入用户名密码
    认证成功后显示欢迎信息
    输错三次锁定
    流程图:

    代码:
    # Author:Tim Gu
    import sys
    
    #预设一个正确的用户名和密码
    _username = "Tim"
    _password = "abc"
    
    f= open('black_list','r')    #读取黑名单
    username = input('username:')  #输入用户名
    
    #---------------判断用户名是否已在黑名单----------------------
    for lines in f.readlines():
        if lines.strip() == username:
            print("this user has locked!")
            exit()
        else:
            continue
     #----------------用户名不在黑名单继续输入密码----------------
    counter = 0
    while counter < 3:
        password = input('password:')
        if username == _username and password == _password: #判断用户名和密码是否匹配
            print("You have login!")
            break
        else:
            counter += 1
        if counter == 3:       #当输入3次错误密码后,锁定用户并退出
            f = open('black_list', '+a')
            f.write(username + '
    ')
            f.close()
            print('this username has locked!')




    第一周作业二:
    三层菜单



    import sys
    
    meun_list = {
                 '上衣':{'夹克':['七匹狼','H&M'],
                         '羽绒服':['波司登','卡宾'],
                         '衬衫':['GXG','海澜之家']},
                 '裤子':{'牛仔裤':['ablejeans','nudie'],'休闲裤':['优衣库','select'],'西裤':['阿玛尼','ZARA']},
                 '鞋子':{'休闲':['匡威','骆驼'],'运动':['NIKE','ADIDAS'],'皮鞋':['clarks','鳄鱼']}}
    
    
    
    while True:
        for meun in enumerate(meun_list.keys()):
            print("%s:%s"%meun)           #打印第一层列表的key(上衣,裤子,鞋子)
        print("'q' for quit or 'b' for back")
        choose_number = input("input meun number:").strip() #输入选择
        if choose_number == 'q':
            print('退出')
            break
        elif choose_number == '':
            print('Your choose is not correct!')
            continue
        elif int(choose_number) >= len(meun_list.keys()): #判断输入是否大于第一层列表长度
            print('Error,please input again!')
            continue
        else:
            clothes_list = list(meun_list.keys())  #定义第二层列表
    
    
    #--------------------------二层遍历-------------------------
        while True:
            for style in enumerate(meun_list[clothes_list[int(choose_number)]].keys()):
                print('%s:%s' % style)  #打印第二层列表的key
            print("'q' for quit or 'b' for back")
            choose_number2 = input("input style number:").strip() #输入选择
            if choose_number2 == 'q':
                print('退出!')
                exit()
            elif choose_number2 == '':
                print('Your choose is not correct!')
                continue
            elif choose_number2 == 'b':
                break
            elif int(choose_number2) >= len(meun_list[clothes_list[int(choose_number)]].keys()):#判断输入是否大于第二层列表长度
                print('Error,please input again!')
                continue
            else:
                clothes_list2 = list(meun_list[clothes_list[int(choose_number)]].keys())
                brand_list = list(meun_list[clothes_list[int(choose_number)]][clothes_list2[int(choose_number2)]])
                print(brand_list) #打印第二层列表的值
     #-------------------------三层-----------------------------------------------
            while True:
                choose_number3 = input("Please choose:/n'q' or 'b'")
                if choose_number3 == 'b':
                    break
                elif choose_number3 == 'q':
                    print('退出!')
                    exit()
                else:
                    print('your choose incorrect!')
                    continue



  • 相关阅读:
    PDO 数据访问抽象层
    递归例子
    Windows对象操作:浏览器窗口信息
    练习题:选择器和选择好友
    搭建wamp环境,数据库基础知识
    堆表空间管理
    vc弹出USB的方法. 附试验通过的代码!
    javascript 调用C++函数
    [转]在Win7 64位注册ActiveX控件
    SetForegroundWindow的正确用法
  • 原文地址:https://www.cnblogs.com/guqing/p/6055982.html
Copyright © 2011-2022 走看看