• Python编程-编码、变量、数据类型


    一、Python和其他语言对比

    C语言最接近机器语言,因此运行效率是最高的,但需要编译。
    JAVA更适合企业应用。
    PHP适合WEB页面应用。
    PYTHON语言更加简洁,丰富的类库,使初学者更易实现应用开发,但运行速度不如其他语言。
    高级语言都是通过各自的解释器,将代码编译成字节码,再将字节码编译成机器码。

    二、Python种类

    CPython:用C语言实现的Python解释器
    执行过程:代码 -> C字节码 -> 机器码 (一行一行编译)
    JPython:用JAVA实现的Python解释器
    IronPython:用.NET实现的Python解释器
    执行过程:代码 -> 其他字节码 -> 机器码
    PyPy:用Python实现的Python解释器
    执行过程:代码 -> C字节码 -> 机器码 全部转换完 -> 执行

    三、Python基础

    1.IDE工具

    PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。

    简单设置

    (1)设置编码UTF-8
    (2)设置模板temp
    (3)设置鼠标滚动放大

    2.编码

    以下链接已经详细描述了各种编码
    http://www.china-bigcloud.online/2017/04/11/字符集编码/

    需要注意:
    中文字符——utf-8,需要使用三个字节来表示 24位
    gbk,gbk2312 需要使用二个字节来表示 16位

    Python编码
    python3默认编码方式是UTF-8
    文件编码 # -- coding:utf-8 --
    解释器编码

    3.注释

    (1)# 单行注释
    (2)""" """ 多行注释
    (3)IDE中使用ctrl+?注释代码

    4. .pyc文件

    由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同。
    pyc文件是用来保存python虚拟机编译生成的byte code的。在python的运行过程中,如果遇到import首先在设定好的path中寻找对应的.pyc或者.dll文件。如果没有这些文件,则编译成对应的PycodeObject并穿件.pyc文件写入中间结果。

    5.变量
    • 字母
    • 数字(不能开头)
    • 下划线
    • 不能使用python内置关键字
    • 变量命名时,名字要有可读性,一般以下划线分割,如user_id
    6.输入,输出

    (1)input

    v = input("请输入:")
    
    运行结果:
    请输入:abc
    

    (2)getpass
    从终端输入一行字符串,关闭了回显(输入时不显示输入的字符串),适用于用密码的输入

    import getpass
    v = getpass.getpass('请输入:')
    print(v)
    

    此方法只在终端测试时有效,在IDE测试时无效

    运行结果:
    C:Python35python.exe E:s17day01-0423	est.py
    请输入:
    asdgajlksd
    

    (3)print

    v = "你好,This is 5!"
    print(v)
    
    运行结果:
    你好,This is 5!
    
    7.条件语句

    (1)形式1
    if 条件:
    成功走这里
    else:
    失败走着

    示例:

    import getpass
    
    name = input("请输入姓名:")
    pwd = getpass.getpass('请输入密码:')
    if name == 'xiaoda' and pwd == '123456':
    	print(pwd)
        print('欢迎登陆')
    else:
    	print(pwd)
        print('退出')
    
    运行结果:
    C:Python35python.exe E:s17day01-0423	est.py
    请输入姓名:xiaoda
    请输入密码:
    346134
    退出
    C:Python35python.exe E:s17day01-0423	est.py
    请输入姓名:xiaoda
    请输入密码:
    123456
    欢迎登陆
    

    (2)形式2
    if 条件:
    ...
    elif 条件:
    ...
    else:
    ...

    示例:

    username = input('>>>')
    if username == 'alex':
        print('普通管理')
    elif username == 'oldboy':
        print('超级管理')
    elif username == '郭少龙':
        print('人')
    elif username == '刘一':
        print('装逼犯')
    else:
        print('再见...')
    
    print('end')
    
    运行结果:
    请输入姓名:达达
    超级管理
    end
    请输入姓名:xiaoda
    帅哥
    end
    请输入姓名:武总
    再见...
    end
    
    8.循环语句

    while 条件:
    continue # 立即开始下次循环
    break # 跳出所有循环

    示例:

    练习1:使用while循环输出1 2 3 4 5 6 8 9 10
    i = 1
    while True:
        if i == 7:
            i = i + 1
            continue
        print(i)
        i = i + 1
        if i == 11:
            break
    
    运行结果:
    1
    2
    3
    4
    5
    6
    8
    9
    10
    
    练习2:求1-100的所有数的和
    value = 0
    i = 1
    while i < 101:
        value = value + i
        i = i + 1
    print(value)
    
    运行结果:
    5050
    
    练习3:输出 1-10 内的所有奇数
    i = 1
    while i < 11:
        a = i % 2
        if a == 1:
            print(i)
        i = i + 1
    
    运行结果:
    1
    3
    5
    7
    9
    
    练习4:输出 1-10 内的所有偶数
    i = 1
    while i < 11:
        a = i % 2
        if a == 0:
            print(i)
        i = i + 1
    
    运行结果:
    2
    4
    6
    8
    10
    
    练习5:求1-2+3-4+5 ... 99的所有数的和
    value = 0
    i = 1
    while i < 100:
        if i % 2 == 1: #奇数
            value = value + i
            i += 1
        else:          #偶数
            value = value - i
            i += 1
    print(value)
    
    运行结果:
    50
    
    练习6:用户登陆(三次机会重试)
    i = 0
    while i < 3:
        username = input('请输入姓名:')
        pwd = input('请输入密码:')
        if username == 'xiaoda' and pwd == '123123':
            print('登录成功')
            break
        else:
            print('用户名或密码错误,请重新输入。')
            i += 1
    else:
        print('您已输入错误3次,请核对后重试。')
    
    运行结果:
    请输入姓名:dog
    请输入密码:1234
    用户名或密码错误,请重新输入。
    请输入姓名:cat
    请输入密码:123456
    用户名或密码错误,请重新输入。
    请输入姓名:mouse
    请输入密码:123123
    用户名或密码错误,请重新输入。
    您已输入错误3次,请核对后重试。
    
    请输入姓名:xiaoda
    请输入密码:123123
    登录成功
    
    9.运算符

    (1)算术运算符

    运算符 描述 实例
    + 加 - 两个对象相加 a + b 输出结果 30
    - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
    * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
    / 除 - x除以y b / a 输出结果 2
    % 取模 - 返回除法的余数 b % a 输出结果 0
    ** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
    // 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0

    (2)比较运算符

    运算符 描述 实例
    == 等于 - 比较对象是否相等 (a == b) 返回 False。
    != 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
    <> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。
    > 大于 - 返回x是否大于y (a > b) 返回 False。
    < 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 true。
    >= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
    <= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。

    (3)赋值运算符

    运算符 描述 实例
    = 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
    += 加法赋值运算符 c += a 等效于 c = c + a
    -= 减法赋值运算符 c -= a 等效于 c = c - a
    *= 乘法赋值运算符 c *= a 等效于 c = c * a
    /= 除法赋值运算符 c /= a 等效于 c = c / a
    %= 取模赋值运算符 c %= a 等效于 c = c % a
    **= 幂赋值运算符 c **= a 等效于 c = c ** a
    //= 取整除赋值运算符 c //= a 等效于 c = c // a

    (4)位运算符

    运算符 描述 实例
    & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
    / 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a / b) 输出结果 61 ,二进制解释: 0011 1101
    ^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001
    ~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
    << 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000
    >> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 a >> 2 输出结果 15 ,二进制解释: 0000 1111

    (5)逻辑运算符

    运算符 逻辑表达式 描述 实例
    and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
    or x or y 布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
    not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False

    (6)成员运算符

    运算符 描述 实例
    in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
    not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

    (7)身份运算符

    运算符 描述 实例
    is is是判断两个标识符是不是引用自一个对象 x is y, 如果 id(x) 等于 id(y) , is 返回结果 1
    is not is not是判断两个标识符是不是引用自不同对象 x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1

    (8)运算符优先级

    运算符 描述
    ** 指数 (最高优先级)
    ~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
    * / % // 乘,除,取模和取整除
    + - 加法减法
    >> << 右移,左移运算符
    & 位 'AND'
    ^ / 位运算符
    <= < > >= 比较运算符
    <> == != 等于运算符
    = %= /= //= -= += *= **= 赋值运算符
    is is not 身份运算符
    in not in 成员运算符
    not or and 逻辑运算符
    注意:
        a. 
          i += 1           
        b. 
          if 1 == 1 or 1 > 2 and 1 == 4:
              print('正确')
          else:
              print('错误')
          运行结果:
    	  正确
    	  注意:同为逻辑判断没有优先级,自左向右,符合条件即为真
        c.
          content = "Alex 前几天去泰国玩姑娘,一不小心染上了病,他的内心活动是,真该多来几个"
    
          if "前几天去" in content:
              print('包含敏感字符')
          else:
              print(content)
    	  运行结果:
    	  包含敏感字符
    
    10.Python数据类型
    (1) 整数 int
    • 创建
      a = 123
      a = int(123)
    • 转换
      age = "18"
      new_age = int(age)
    (2) 布尔值
    • 创建
      a = True
      b = False
    • 转换
      • 数字转换,只有0是False,其他True
      • 字符串, 只有""是False,其他True
      • 待续...
    (3) 字符串
    • 创建
      a = "alex"
      a = str('alex')

    • 转换
      age = 19
      new_age = str(age)

    • 字符串的拼接

      name = 'alex'
      gender = '女'
      new_str = name + gender
      print(new_str)
    
    运行结果:
    alex女
    
    • 字符串格式化
      占位符
      name = '我叫李杰,性别:%s,我今年%s岁,我在说谎!'
      new_str = name %('男',19,)
      print(new_str)
    
    运行结果:
    我叫李杰,性别:男,我今年19岁,我在说谎!
    
      name = '我叫李杰,性别:%s,我今年%s岁,我在说谎!' %('男',19,)
      print(name)
    
    运行结果:
    我叫李杰,性别:男,我今年19岁,我在说谎!
    
    • 判断子序列是否在其中
      content = "Alex 前几天去泰国玩姑娘,一不小心染上了病,他的内心活动是,真该多来几个"
    
      if "前几天去" in content:
         print('包含敏感字符')
      else:
         print(content)
    
    • 移除空白
      val = " alex "
      print(val)
      new_val = val.strip() # 左右
      print(new_val)
      new_val = val.lstrip()# 左边
      print(new_val)
      new_val = val.rstrip() # 右边
      print(new_val)
    
    运行结果:
      alex 
     alex
     alex 
      alex
    
    • 分割
      user_info = "alex|sb123|9"
      v = user_info.split('|')
      print(v)
      v = user_info.split('|',1)
      print(v)
      v = user_info.rsplit(' ',1)
      print(v)
    
    运行结果:
    ['alex', 'sb123', '9']
    ['alex', 'sb123|9']
    ['alex|sb123|9']
    
    • 长度(字符)
      val = "李杰nb"
      v = len(val)
      print(v)
    
    运行结果:
    4
    
    • 索引
      val = "李杰nb"
      v = val[0]
      print(v)
    
    运行结果:
    李
    
      val = input('请输入:')
      i = 0
      while i < len(val):
      print(val[i])
      i += 1
    
    运行结果:
    请输入:啥空间大概xck23
    啥
    空
    间
    大
    概
    x
    c
    k
    2
    3
    
    • 切片
      name = '我叫李杰,性别我今年岁,我在说谎!'
      print(name[0])
      print(name[0:2])
      print(name[5:9])
      print(name[5:])
      print(name[5:-2])
      print(name[-2:])
    
    运行结果:
    我
    我叫
    性别我今
    性别我今年岁,我在说谎!
    性别我今年岁,我在说
    谎!
    
    (4) 列表
    • 创建:
      a = ['alex','狗','eric',123]
      a = list(['alex','狗','eric',123])

    • in判断:

      if 'al' in a:
         pass
    
      if 'al' in a[0]:
         pass
    
    • 索引:
      val = a[0]
    
    • 长度:
      val = len(a)
    
    • 切片:
      a = ['alex','狗','eric',123]
      v = a[0::2]
      print(v)
    
    • 追加:
      a = ['alex','狗','eric',123]
      a.append('xxoo')
      print(a)
    
    运行结果:
    ['alex', '狗', 'eric', 123, 'xxoo']
    
    • 插入:
      a = ['alex','狗','eric',123]
      a.insert(1,'牛')
      print(a)
    
    运行结果:
    ['alex', '牛', '狗', 'eric', 123]
    
    • 删除:
      a = ['alex','eric','狗','eric',123]
      a.remove('eric')
      print(a)
      del a[1]
      print(a)
    
    运行结果:
    ['alex', '狗', 'eric', 123]
    ['alex', 'eric', 123]
    
    • 更新:
      a = ['alex','eric','狗','eric',123]
      a[1] = '阿斯顿发送到'
      print(a)
    
    运行结果:
    ['alex', 'eric', '阿斯顿发送到', 'eric', 123]
    
    • For循环:
      a = ['alex','eric','狗','eric',123]
      for item in a:
     	print(item)
      # break
      # continue
    
    运行结果:
    alex
    eric
    狗
    eric
    123
    
    (5) 字典操作
    • 创建
      v = {
           'name': 'alex',
           'password': '123123'
          }
    
    • 索引获取值
      n = v['name']
      print(n)
    
    • 无数据时为增加;有数据时为修改

      v['age'] = 19
      print(v)
      
    • 删除

      del v['name']
      print(v)
      
    • 循环

      for item in v.keys():
          print(item)
      for item in v.values():
          print(item)
      for key,val in v.items():
          print(key,val)
      
    • 长度

      print(len(user_dict))
    
    以上操作运行结果:
    alex
    {'age': 19, 'password': '123123', 'name': 'alex'}
    {'password': '123123', 'age': 19}
    password
    age
    123123
    19
    password 123123
    age 19
    2
    
    • 相互嵌套
      user_dict = {
           'k1': 'v1',
           'k2': {'kk1':'vv1','kk2':'vv2'},
           'k3': 123,
           'k4': ['alex','eric',['a','b','c'],'李杰',{'k11':'vv1'}],
      }
      user_dict['k4'][2].append('123')
      user_dict['k4'][4]['n'] = '过啥龙'
    
    运行结果:
    {'k1': 'v1', 'k4': ['alex', 'eric', ['a', 'b', 'c', '123'], '李杰', {'k11': 'vv1'}], 'k3': 123, 'k2': {'kk2': 'vv2', 'kk1': 'vv1'}}
    {'k1': 'v1', 'k4': ['alex', 'eric', ['a', 'b', 'c', '123'], '李杰', {'n': '过啥龙', 'k11': 'vv1'}], 'k3': 123, 'k2': {'kk2': 'vv2', 'kk1': 'vv1'}}
    

    示例1:

      user_list = [
          {'name':'alex','pwd':'123123','times':1},
          {'name':'eric','pwd':'123123','times':1},
          {'name':'tony','pwd':'123123','times':1},
      ]
      user = input('用户名:')
      pwd = input('密码:')
      for item in user_list:
          if user == item['name'] and pwd == item['pwd']:
               print('登录成功')
               break
    
    运行结果:
    用户名:eric
    密码:123123
    登录成功
    

    示例2:
    读取文件,重新赋值
    (1)创建一个普通文件

     db
         alex|123123|3
         eric|123123|3
    

    (2)读取文件,根据条件,重新赋值

     login.py
     
     #!/usr/bin/python
     # -*- coding:utf-8 -*-
     # 1. 打开并读取文件内容
     f1 = open('db','r')
     data = f1.read()
     f1.close()
    
     # 2. 格式化,列表中嵌套字典
     print(data)
     user_info_list = []
     user_str_list = data.split('
    ')
     for item in user_str_list:
         temp = item.split('|')
         v = {
             'name': temp[0],
             'pwd': temp[1],
             'times': temp[2]
         }
         user_info_list.append(v)
     user_info_list[1]['times'] = 3
     print(user_info_list)
    
     # 3. 列表中嵌套的字典
     #
     # 4. 重新写入文件
     target = """alex|123123|3
    eric|123123|3"""
    
     f2 = open('db','w')
     f2.write(target)
     f2.close()
    
  • 相关阅读:
    http和https
    openstack
    openstack安全问题
    openstack优势
    java多线程实现方式
    python多进程实现的几种方式
    Java 在提取url 生成图片以及正则表达式
    idea 生成 可执行文件
    dw cs6 支持高分辨率
    svchost.exe 大量占用的问题
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/7595624.html
Copyright © 2020-2023  润新知