• Python语言数据结构和语言结构(2)


    1. Python预备基础

    1.1 变量的命名

      变量命名规则主要有以下几条:

    • 变量名只能包含字母、数字和下划线,其中下划线和字母可以开头,数字不行,即info_1可以,而1_info不行;
    • 变量名内不能包含空格,可以用下划线替代,即info_1,而非info 1;
    • 不能与Python内置关键字和函数名重名,这条在很多语言中都是一致的;
    • 变量名中要言简意赅,即可以用name替代n,student_name比s_n好;
    • 慎用l和o,因为这两个字母容易与1和0混淆;

    1.2 变量的使用

      变量在使用时一定要保证前后一致,如

    info = "Hello World!"
    print(infor)
    

      由于声明变量info,而打印输出的是infor,因此程序会提示infor未定义,出现NameError的错误!

    1.3 程序注释

      Python中的注释方法有多重,单巷注释可以使用“#”,多行或者段落注释可以使用三对' '或者" "来进行,下面注释是等效的:

    # 单行注释
    
    '''
    多
    行
    注
    释
    '''
    
    """
    多
    行
    注
    释
    """
    

    2. Python数据类型

    2.1 字符串

    • 字符串的表示

      Python语言中默认输入类型是字符串,字符串的使用有两种表示方法,即

    info_1 = 'Hello World!'
    info_2 = "Hello World!"
    print(info_1)
    print(info_2)
    

      上述两种方法打印结果相同。

    • 字符串处理方法

      (1) 字符串合并(拼接)方法 — +

      字符串打印中,最常见的是利用 + 进行字符串连接。

    first_info = "Hello"
    last_info = "World"
    print(first_info + " " + last_info + "!")
    *****************************************************
    >> Hello  World!
    

      (2) 字符串处理方法

      字符串有很多处理方法,此处对常用的字符串处理方法进行简要介绍:

    name = 'kung is kung'
    # 字符串首字母大写
    print("1:	",name.capitalize())
    >>> 1:	Kung is kung
    # 字符串字母计数
    print("2:	",name.count('k'))
    >>> 2:	2
    # 字符串字母小写转换
    '''
    lower()虽然也只能将ASCII字符进行转换,即'A-Z'有效,
    针对其他语言字符则只有casefold()有效
    '''
    name_tp_1 = 'KUNG IS KUANG'
    name_tp_2 = 'ß'  # ß是德语单词,小写形式是ss
    print("3:	",name_tp_1.casefold(),'
    ' + name_tp_2.casefold())
    >>> 3:	kung is kuang
            ss
    # 字符串居中
    '''
    center(width,fillchar)中,a表示字符串加上b所提供的字符总长度
    将字符串居中,但存在一下几种情况:
    1. width大于字符串(含空格)长度时
       1.1 width为偶数,字符串长度为偶数,则在两边字符串两
    边等量补齐字符fillchar;
       1.2 width为偶数,字符串长度为奇数,则字符串左边会比
           右边少一个字符
       1.3 width为奇数,字符串长度为偶数,则字符串左边会比
           右边多一个字符
    2. width不大于字符串(含空格)长度时则会返回原字符串 
    '''
    names = 'Kungs'
    print("4:	",name.center(50,'-'),'
    ' + names.center(50,'-'),
                 '
    ' + name.center(51,'-'),'
    ' + name.center(10,'-'))
    >>> 4:	-------------------kung is kung-------------------
            ----------------------Kungs-----------------------
            --------------------kung is kung-------------------
            kung is kung
    # 字符串结尾验证添加
    print("5:	",name.endswith('ng'))
    >>> 5:	True
    # 字符串中'	'字符长度替换
    '''
    假如字符串中没有转义字符'	',则返回原字符
    '''
    names = 'kung	is kung'
    print("6:	",name.expandtabs(tabsize = 3),
          '
    ' + names.expandtabs(tabsize = 3))
    >>> 6:	kung is kung
            kung  is kung
    # 字符串查找
    print("7:	",name.find('i'))   # 切片,返回该字符在字符串中的index
    >>> 7:	5
    print("8:	",name[name.find('i')])
    >>> 8:	i
    print("9:	",name.find('is'))  # 切片,返回所查找字符串首字符的index
    >>> 9:	5
    # 字符串格式化输出
    names = 'my name is {name} and I am {year} old!'
    print("10:	",names.format(name = 'Kung',year = 23))
    >>> 10:	my name is Kung and I am 23 old!
    # 字符串映射格式化输出
    print("11:	",names.format_map({'name':'Kung','year':12}))
    >>> 11:	my name is Kung and I am 12 old!
    # 字符串数字和字母组合判断
    '''
    isalnum()判断范围需要只包含英文字符和数字(True)
    '''
    name = '1.23'
    print("12:	",name.isalnum(),('123' + 'Kung').isalnum())  
    >>> 12:	False True
    # 字符串字母判断
    '''
    字母范围不止英文字母
    '''
    print("13:	",name.isalpha(),'ß'.isalpha())
    >>> 13:	False True
    # 字符串十进制字符判断
    '''
    isdecimal()方法只存在于Unicode对象中,
    因此定义十进制字符只要在字符串前加'u'即可,不加也可
    '''
    print("14:	",name.isdecimal(),'54'.isdecimal(),u'54'.isdecimal())
    >>> 14:	False True True
    # 字符串数字检查
    '''
    isdigit()只有字符串完全为数字时为真
    '''
    print('15:	','1A'.isdigit(),'1'.isdigit())
    >>> 15:	False True
    # 字符串合法标识符判断
    '''
    isidentifier()判断的字符必须以字母(大小写均可)
    或者'_'开头,字符串之间不能有空格
    一般可用作检查变量、函数名、类名、方法名等
    '''
    print('16:	','A12'.isidentifier(),'_A12'.isidentifier(),'12'.isidentifier(),'A 12'.isidentifier())
    >>> 16:	True True False False
    # 字符串数字判断
    '''
    检查数字字符串主要有isdigit()和isnumeric()
    isdigit():
    True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字 
    False: 汉字数字 
    Error: 无
    isnumeric():
    True: Unicode数字,全角数字(双字节),罗马数字,汉字数字 
    False: 无 
    Error: byte数字(单字节)
    '''
    print('17:	','1'.isnumeric(),'一'.isnumeric())
    >>> 17:	True True
    # 字符串空格检查
    '''
    字符串只包含空格,则为True,否则为False
    '''
    print('18:	',' '.isspace(),'Hello World'.isspace())
    >>> 18:	True False
    # 字符串首字母大写检查
    '''
    要求首字母大写,其它为小写
    '''
    print('19:	','My'.istitle(),'Kung Fu'.istitle())
    >>> 19:	True True
    # 字符串可打印检测
    '''
    字符串中都是可打印字符则返回True,否则返回False
    注意,字符串中包含制表符为Faluse
    '''
    print('20:	','My	name'.isprintable(),'My name'.isprintable(),
          '~'.isprintable(),'	'.isprintable())
    >>> 20:	False True True False
    # 字符串大写检测
    '''
    字符串中字符全为大写时为True,否则为False
    '''
    print('21:	','MONTH'.isupper(),'MONTH DAY'.isupper(),
          'Month day'.isupper())
    >>> 21:	True True False
    # 字符串元素连接
    print('22:	','+'.join(['1','2','3']),'
    '+' '.join(['1','2','3']),
          '
    '+''.join(['1','2','3']))
    >>> 22:	1+2+3
            1 2 3
            123
    # 字符串左对齐
    '''
    ljust(width,fillchar)对字符串进行左对齐,
    然后在字符串右侧进行fillchar填充,使得填充
    数量加上字符串长度等于width
    '''
    print('23:	',name.ljust(50,'*'))
    >>> 23:	1.23**********************************************
    # 字符串右对齐
    print('24:	',name.rjust(50,'*'))
    >>> 24:	**********************************************1.23
    # 字符串小写转换
    names = 'My name is Kung!'
    print('25:	',names.lower())
    >>> 25:	my name is kung!
    # 字符串大写转换
    print('26:	',names.upper())
    >>> 26:	MY NAME IS KUNG!
    # 字符串左侧去空
    '''
    lstrip()可以对空格或'
    '转义字符进行去除
    '''
    print('27:	'+'
    name'.lstrip())
    >>> 27:	name       # 正常状态下name应该在下一行
    # 字符串右侧去空
    print('28:	'+'name
    '.rstrip() + '	----')
    >>> 28:	name    ----   # 正常情况下点画线应该在下一行
    print('29:	'+'
    name
    '.strip() + '	----')
    >>> 29:	name    ----
    # 字符串映射转换表
    '''
    maketrans(intab,outtab)中intab要替代的字符组成的字符串
    outtab时相应的映射字符的字符串,就像密码本的功能
    密码转换时使用translate(),对所新添加字符进行转换
    '''
    p = str.maketrans('abced','12345')
    print('30:	'+'adeb'.translate(p))
    >>> 30:	1542
    # 字符串替换
    '''
    当待替换字符在字符串中只有一个时可以直接进行替换,
    当字符串中所要替换字符有多个时,可以制定位置替换
    即通过指定数字要求替换第几个字符,不指定则默认全部替换
    '''
    print('31:	'+'Kung fu'.replace('f','F'))
    >>> 31:	Kung Fu
    print('32:	'+'Kung fu'.replace('u','U',1))
    >>> 32:	KUng fu
    print('33:	'+'Kung fu'.replace('u','U'))
    >>> 33:	KUng fU
    # 字符串中字符最后出现位置
    '''
    rfind()返回字符串中最后一次出现位置的位置
    rfind(str,beg=0,end=len(string))
    同时,find()方法于rfind()的使用方法相同,
    但是find()返回的是首次查找到的字符的位置,
    两种方法中,假如都指定了beg和end,则会检查
    字符是否包含在指定范围内,如果包含查找的字
    符串,则返回index,假如不包含则返回-1
    '''
    print('34:	','Kung fu'.rfind('u'),'
    ','Kung fu'.rfind('u',0,10),
          '
    ','Kung fu'.rfind('u',10,0),'
    ','Kung fu'.find('u',0,10),
          '
    ','Kung fu'.find('u',10,0))
    >>> 34:	6
            6
           -1
            1
           -1
    print('35:	','Kung fu'.rfind('u'),'
    ','Kung fu'.rfind('u',0,5),
          '
    ','Kung fu'.rfind('u',5,0),'
    ','Kung fu'.find('u',0,5),
          '
    ','Kung fu'.find('u',5,0))
    >>> 35:	6
            1
           -1
            1
           -1
    print('36:	','Kung fu fung'.rfind('fu'),
          '
    ','Kung fu fung'.rfind('fu',0,9),
          '
    ','Kung fu fung'.rfind('fu',9,0),
          '
    ','Kung fu fung'.find('fu',0,9),
          '
    ','Kung fu fung'.find('fu',9,0))
    >>> 36:	8
            5
           -1
            5
           -1
    # 字符串切片
    '''
    字符串切片后将以列表形式返回
    split()也可以指定在前几个字符分隔
    '''
    print('37:	','Kung fu fung'.split('u'),
                  'Kung fu fung'.split('u',2),
                  'Kung fu fung'.split(),
                  'Kung fu fung'.split('u')[-1],
                  'Kung  fu  fung'.split(' '))
    >>> 37:	['K', 'ng f', ' f', 'ng'] ['K', 'ng f', ' fung'] 
            ['Kung', 'fu', 'fung'] ng
            ['Kung', '', 'fu', '', 'fung']
    # 字符串转义字符分隔
    '''
    splitlines([keepends])中keepends默认为False
    则会去掉('
    ','
    ','
    '),如果为True,则保留换行符
    '''
    print('38:	','1
    +
    2
    3
    +
    4'.splitlines(),
          '1
    +
    2
    3
    +
    4'.splitlines(True))
    >>> 38:	['1', '+', '2', '3', '+', '4'] 
            ['1
    ', '+
    ', '2
    ', '3
    ', '+
    ', '4']
    # 字符串大小写转换
    '''
    不仅限于英语字符
    '''
    print('39:	','Kung Fu ß'.swapcase())
    >>> 39:	kUNG fU SS
    # 字符串首字母大小
    print('40:	','kung fu ß'.title())
    >>> 40:	Kung Fu Ss
    # 字符串右对齐,前面补0
    '''
    zfill(width)通过指定width,假如字符串长度小于width,
    在字符串前面补0;大于width,原样输出
    '''
    print('41:	','Kung'.zfill(10),'Kung'.zfill(3))
    >>> 41:	000000Kung Kung
    

    2.2 整数

      Python中由于默认输入为字符类型,因此有时需要对数据类型进行转换:

    age_1 = input("please input your age :
    ")
    age_2 = int(age_1)
    
    print(type(age_1),age_1)
    print(type(age_2),age_2)
    *****************************************************
    >> please input your age :
       54
       <class 'str'> 54
       <class 'int'> 54
    

      保证数据类型正确后,整数四则运算必不可少:

    >> 2 + 3
    *****************************************************
    5
    >> 5 - 3
    *****************************************************
    2
    >> 2 * 3
    *****************************************************
    6
    >> 6 / 4
    *****************************************************
    1.5
    >> 3 ** 2
    *****************************************************
    9
    

    2.3 浮点数

    >> 0.1 + 0.1
    *****************************************************
    0.2
    >> 2 * 0.1
    *****************************************************
    0.2
    

    2.4 不同数据整合

      整数和浮点数同存时,整数类型自动转换为浮点类型,但浮点类型或者整数类型数据与字符串类型同存时,需要进行转换,否则将会出错,因此首先需要吧浮点类型或者整数类型数据转换为字符串类型数据,因此将用到str()

    age = 18
    info = "Happy " + str(age) + "th Birthday!"
    print(message)
    

    3. Python条件语句

    3.1 if语句

    if mark > 60 and mark < 70:
    	print("Congratualaton, you get a D level!")
    

      python语言中需要注意的是,不要忘记if最后一行的 :,另外根据条件多少,可以借助逻辑语句来限定条件范围,一般为andor*两个用的较多。

    3.2 if-else语句

    if mark > 60:
        print("Congratualaton, you pass the exam!")
    else:
        print("Sorry,you should have to study hard!")
    

      需要注意,else后也需要加上冒号,而且注意各个代码语句间的级别关系,这个可通过缩进解决。

    3.3 if-elif-else语句

      当条件超过两个时,可以使用多条件判断语句:

    if mark > 90:
        print("Congratualaton, you can get A level!")
    elif mark > 80 and mark < 90:
        print("Very good, you get B level!")
    elif mark > 70 and mark < 80:
        print("Good, you get C level!")
    elif mark > 60 and mark < 70:
        print("Well, you get D level!")
    else:
        print("Sorry, you should have to study hard!")
    

      当然,最后的else语句可以省略,换乘elif亦可。

    4. while循环和for循环

    4.1 while循环

    _number = 10
    while _number > 20:
        _number += 1
    	print(_number)
    

      while循环基本结构如上所示,也需要注意的是在判断条件后不要忘记冒号。

      在使用while循环时,需要注意设置合理的终止条件,避免出现无限循环;另外在使用while循环式,注意布尔运算的使用,可以在一定程度上提高代码的效率,使得代码看起来更整洁,其中布尔值应确保首字母大写,即TrueFalse

    _number = 52
    cond = True
    
    while cond:
        guess_number = int(input("Pleaw input a number:
    "))
        if guess_number > _number:
            print(str(guess_number) + " is big, you can guess a small one!
    ")
        elif guess_number < _number:
            print(str(guess_number) + " is small, you can guess a big one!
    ",)
        else:
            print("Congratulation, you got it!")
            cond = False
    

    4.2 for循环

      首先看一段代码:

    # 代码1
    numbers = 10
    for number in range(numbers):
    	print("***",number)
    
    # 代码2
    numbers = 10
    for number in range(0,numbers,2):
    	print("***",number)
        
    # 代码3    
    numbers = 10
    for number in range(5,numbers,2):
    	print("***",number)
    

      上述三个代码片段,在代码1中,着重关注下for循环的结构,其中为了方便后期记忆和查看代码,for后的临时变量最好与range内的定义变量相关,另外,不要忘记末尾的冒号;代码2和代码3中主要变化的是关键字range的使用,其中可设置首参数,即原码中的起始数字,可设置步长,代码中设置的是2 ,未设置时,程序默认步长为1。

    4.3 breakcontinue

      break的作用是不再执行余下代码,结束当前整个循环,如果嵌套了多层循环,则break终止的是当前所在循环;相对来说continue也是不再执行余下代码,但是是继续执行下个循环。

    _number = 65
    count = 0
    
    while count < 3 :
        guess_number = int(input("guess_number: "))
        
        if guess_number == _number:
            print("you got it!")
            break
        elif guess_number > _number:
            print("The number is bigger! ")
        else:
            print("You think smaller! ")
        count += 1
    
        if count == 3:
            print("Do you want to keep guessing..? ")
            continue_confirm = input("please enter yes or no:	")
            if continue_confirm == 'yes':
                count = 0
            elif continue_confirm == 'no':
                break
            else:
                print("Error input")
    
    for i in range(0,20,2):
        if i < 6 :
            print("loop",i)
        else:
            continue
        print("Check")
    

      Python有列表和字典,这些利用循环处理非常方便,总而言之,还是要先了解好数据结构和语言结构,一步步积累,才能学好下一步!

  • 相关阅读:
    一只特立独行的猪
    每天写出好代码的5个建议
    电脑修好了
    VB编程修改AutoCAD长度型尺寸标注
    前天我放学回家
    VB编程修改AutoCAD坐标型尺寸标注
    VB编程操作AutoCAD尺寸标注样式
    这是一个错误的程序
    2011年6月27日星期二
    2011年6月20日星期一
  • 原文地址:https://www.cnblogs.com/linlongyu/p/9979469.html
Copyright © 2020-2023  润新知