zoukankan      html  css  js  c++  java
  • Python之路(第二篇):Python基本数据类型字符串(一)

    一、基础
    1、编码
    UTF-8:中文占3个字节
    GBK:中文占2个字节
    Unicode、UTF-8、GBK三者关系

    ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用码,规定采用2个字节对世界各地不同文字进行编码,gbk是针对中国汉字提出的编码标准,用2个字节对汉字进行表示。utf8是对unicode的升级改进版,但是unicode到utf-8并不是直接的对应。

    UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,注意的是unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。

    ascii和unicode可以相互转换,gbk和unicode可以相互转换。



    2、input()函数

    n = input(" ")
    >>>hello
    >>>n
    >>>'hello'
    

      

    n = input(" ")
    >>>10
    >>>n
    >>>'10'
    

      

    输入数字10,这里的n是字符串'10',而非数字10
    这里如果
    n * 10将输出
    '10101010101010101010'
    如果将字符串转换数字,可以用Int( )

    new_n = int(n)


    3、while循环、continue、break

    while 条件语句1:
        功能代码1
    else 条件语句2:
        功能代码2
    

      

    while循环也可以加else

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

    n = 1
    while n < 11:
        if n == 7 :
            pass
        else:
            print(n)
        n = n + 1
    

      


    或者

    count = 1
    while count < 11
        if count == 7:
            count = count + 1
            continue
         print(count)
         count = count + 1
    

     

    当while执行到if count ==7时,遇到continue,下面的print语句和count=count + 1不会被执行,重新跳回while语句

    再比如

    count = 1
    while count < 11:
        count = count + 1
        continue
        print('123')
    print('end')
    

      

    这里的print('123')永远不能被执行到

    第二个例子

    count = 1
    while count < 11:
        count = count + 1
        print(count)
        break
        print('123')
    print('end')
    

     

    输出结果

    2
    end
    

      

    这里的print('123')也不能被执行到,遇到break语句直接跳出循环,只能执行一次循环,即输出一次print(count)语句
    此程序完整执行过程如下图

    总结:continue终止当前循环进行下次循环,break终止整个循环


    4、算术运算符
    +       -     *     /      %        **         //
    加   减   乘   除   取余   乘方    取整数商

    5、字符串

    name = "马大帅"
    if "马" in name :
        print("ok")
    else:
        print("error")
    

      

    '马大帅' 称为字符串
    '马' 成为一个字符
    '马大'或者'大帅'称为子字符串,也可以叫做子序列,注意这里的字符要连续的,而'马帅'不能称之为子字符串

    6、成员运算:
    判断某个字符在某个字符串用in 或者not in

    name = "马大帅"
    if "吗" not in name :
        print("ok")
    else:
        print("error")
    

      

    7、布尔值

    if语句和while语句都使用布尔值作为条件。
    布尔值只有两种情况:
    真 True 假 False

    if 条件判断语句
        功能代码某块
    

     

    这里的条件判断语句最终会产生一个布尔值,或者是True 或者False

    name = "马大帅"
    p ="吗" not in name
    print(p)
    if p:
        print("ok")
    else:
        print("error")
    

      

    输出结果

    True
    ok
    

      

    布尔操作符:and or not

    在 Python 看来,只有以下内容会被看作假(注意冒号括号里边啥都没有,连空格都不要有!):False None 0 "" '' () [] {}

    其他一切都被解释为真!

    举个例子

    i = 10
    while i:
        print ("我爱学习!")
    print("end")
    

      


    输出结果

    我爱学习!
    我爱学习!
    我爱学习!
    我爱学习!
    我爱学习!
    我爱学习!
    我爱学习!
    我爱学习!
    我爱学习!
    ...(这里代表一直输出"我爱学习")
    

      


    这个程序会一直输出"我爱学习",除非按下CTRL+C停止执行程序
    而print("end")语句永远不会被执行到。
    再比如

    i = 10
    while i:
        print ("我爱学习!",i)
        i = i -1
    print("end")
    

      


    输出结果

    我爱学习! 10
    我爱学习! 9
    我爱学习! 8
    我爱学习! 7
    我爱学习! 6
    我爱学习! 5
    我爱学习! 4
    我爱学习! 3
    我爱学习! 2
    我爱学习! 1
    end
    

      


    通过观察"我爱学习"后的数字变化,我们可以看到,这个循环的执行过程,当i循环到0时 ,即while 0 :,0为False,终止循环。开始执行
    print("end")语句。

    8、比较运算符:判断大小符号
    == 等于
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于
    != 不等于

    9、运算的优先级


    先计算括号内,复杂的表达式推荐使用括号
    一般的执行顺序:从左到右
    布尔运算优先级
    从高到低:not and or
    例子:

    user = 'nicholas'
    psswd ='123'
    v = user == 'nicholas' and passwd == '123' or 1 == 2 and pwd == '9876'
    print(v)
    

      

    分析:
    v = true and true or
    此时不用继续计算即可得出v为真的结果,不用考虑布尔运算的优先级,注意这个运算是从左到右的,**而非看到and自动进行运算而后从左到右运算**

    一些结论:
    从左到右
    (1)第一个表达式 or
    True or ————>>得出结果True
    (2)第一个表达式 and
    True and ————>>继续运算
    (3)第一个表达式 or
    False or ————>>继续运算
    (4)第一个表达式 and
    False and ————>>得出结果False

    即**短路逻辑**

    短路逻辑
    表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出
     or 左侧表达式 (即True)。

     表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到
     or 的左侧,参与接下来的逻辑运算。

     若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

    10、赋值运算符
    >= 简单的赋值运算符 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

    二、基本数据类型
    (1)数字 int
    a = 1
    a = 2

    int整型(整数类型)
    python3中用int表示,没有范围
    python2中int有一定范围
    超过一定范围,Python2中有长整型即long
    python3中只有整型,用int,取消了long类型

    **①**、int()将字符串转换为数字

    a = "123"
    type(a)
    b = int(a)
    print(b)
    type(b)
    

      

    输出

    <class 'str'>
    123
    <class 'int'>
    

     

    type()即可查看变量类型

    但是
    a = "123n"
    b = int(a)
    此时是无法用int()转换字符串为数字的。

    num = "c"
    v = int(num,base = 16) 
    print(v)


    注释: v = int(num,base = 16) 将num以16进制看待,将num转为10进制的数字。这里是可以的。

    ②bit_lenghth
    当前数字的二进制,至少用n位表示

    age = 5
    r = age.bit_length()
    #当前数字的二进制,至少占用了n位表示
    print(r)
    

      输出结果

    3
    

      即5在二进制中表示为101,至少需要3个位置来表示



    (2)字符串 str
    a ='hello'
    a= 'ssssdda'

    字符串方法介绍

    a--capitalize()

    # capitalize() 首字母大写
    test = "lingou"
    v1 = test.capitalize( )
    print(v1)
    

      

    输出结果

    Lingou
    

      

    b--casefold( )、lower()

    #lower() 所有变小写
    # casefold( ) 所有变小写,与lower相比casefold更牛逼,很多未知(不是英文的,如法文、德文等)的对相应变小写

    #lower() 方法只对ASCII编码,也就是‘A-Z’有效,对于其他语言(非汉语或英文)中把大写转换为小写的情况只能用 casefold() 方法。

    test = "LinGou"
    v2 = test.casefold( )
    print(v2)
    v3 =test.lower()
    print(v3)
    

      输出结果

    lingou
    lingou
    

      

    c--center( )

    #center( ) 设置宽度,并将内容居中,这里的"*"可以不写,默认为空白。
    #这里的30是总宽度,单位字节

    test = "LinGou"
    v4 = test.center(30,"*" )
    print(v4)


    输出结果

    ************LinGou************
    

     

    空白情况

    test = "LinGou"
    v5 = test.center(30 )
    print(v5)


    输出结果

               LinGou            

     注:这个输出结果LinGou左右是有空格的

      



    d--count( )

    #count( ) 去字符串中寻找,寻找子序列的出现次数

    #count(sub[, start[, end]])

    #count( 子序列,寻找的开始位置,寻找的结束位置)

    #count( sub, start=None, end=None) None默认表示此参数不存在

    test = "LinGouLinGengxin"
    v6 = test.count("in" )
    print(v6)
    v7 = test.count("in",3,6)
    #这里的3,6 是对字符串"LinGouLinGengxin"的索引编码,从第三个开始到第六个结束
    #L i n G o u L i n G  e  n  g  x  i  n
    #0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    print(v7)
    v8 = test.count("in",3)#从第3个位置开始找
    print(v8)

    输出结果

    3
    0
    2
    

      

    e--endswith()、startswith()

    #endswith() 以什么什么结尾

    #startswith()以什么什么开始



    test = "LinGouLinGengxin"
    v9 = test.endswith("in" )
    v10 = test.startswith("in")
    print(v9)
    print(v10)


    输出结果

    True
    False
    

      

    f--find()、index()

    #find()从开始往后找,找到第一个之后,获取其索引位置
    #index()功能同上,index找不到,报错,一般建议用find()

    test = "LinGouLinGengxin"
    v11 = test.find("in" )
    v12 = test.find("XING" )
    v13 = test.index("in")
    # v14 = test.index("XING" )
    print(v11)
    print(v12)
    print(v13)
    #print(v14)
    

      

    输出结果

    1
    -1
    1
    

      

    取消v14 = test.index("XING" )和print(v14)的注释后运行程序会直接报错
    因为index找不到"XING",而find()找不到会返回-1


    g--format()

    #format()格式化,将一个字符串中的占位符替换为指定的值
    # { }就是占位符,通过format将占位符替换为指定的值

    test = "I am {name}"
    print(test)
    v15 = test.format(name = "LinGou" )
    print(v15)
    

      


    输出结果

    I am {name}
    I am LinGou
    

      

    -第二个

    test = "I am {name},age{a}"
    print(test)
    v16 = test.format(name = "LinGou",a = 19 )
    print(v16)
    

      

    输出结果

    I am {name},age{a}
    I am LinGou,age19
    

      

    -第三个

    test = "I am {0},age{1}"
    print(test)
    v17 = test.format("LinGou",19 )
    print(v17)
    

      

     

    输出结果

    I am {0},age{1}
    I am LinGou,age19
    

      

    当占位符有数字代表,format函数里不再需要具体的name =""
    这里是按照先后顺序替换的。

    第四个

    #format_map()格式化,传入的值
    # 书写格式{"name":"LinGou","a":19}

    test = "I am {name},age {a}"
    print(test)
    v18 = test.format_map({"name":"LinGou","a":19} )
    v19 = test.format(name = "LinGou",a = "19")
    print(v18)
    print(v19)
    

      


    输出结果

    I am {name},age {a}
    I am LinGou,age 19
    I am LinGou,age 19
    

      分析:这里的v18和v19是等价的,只是书写方式不一样。format_map后面加的是字典。


    h--isalnum( )

    #isalnum( )字符串中是否只包含 字母和数字

    test = "LinGou"
    v20 = test.isalnum( )
    print(v20)
    test2 = "LinGou+"
    v21 = test2.isalnum( )
    print(v21)
    

      


    输出结果

    True
    False
    

      

  • 相关阅读:
    小菜编程成长记(四 业务的封装)
    小菜学Flex2(二 currentState初步使用)
    小菜编程成长记(九 反射——程序员的快乐!)
    小菜编程成长记(一 面试受挫——代码无错就是好?)
    小菜编程成长记(六 关于Flex的争论)
    小菜编程成长记(三 复制VS复用)
    104种木马的清除方法
    细节决定成败打电话和发邮件的细节
    MS SQL Server查询优化方法
    美国西点军校最重要的行为准则:没有任何借口
  • 原文地址:https://www.cnblogs.com/Nicholas0707/p/8542913.html
Copyright © 2011-2022 走看看