• Python3 语法简明教程


    0 前言

    本文是本人学习菜鸟教程的Python 3教程后,整理学习笔记而成。

    本文主要给本人查询语法之用,也可供有C/C++基础的其他读者参阅Python 3的语法。OI/ACM选手大多使用C++,大学生学习的第一种语言一般是C;本文主要针对这些读者编写。

    本文只包含Python 3的基本用法,大部分内容来自菜鸟教程,但未包含菜鸟教程的全部内容。如果有错误之处,敬请批评指正。

    1 输出语句、注释

    本节内容包括:

    1. print()的用法;
    2. Python 3的语法特点;
    3. 单行、多行注释的写法。

    学习本节内容后你将掌握:

    编写Hello World程序,并编写注释。

    练习题

    洛谷 P1000 超级玛丽游戏

    1.1 输出语句

    print()是常用的输出语句,可以将字符串打印到控制台中。

    print('Hello, Python!')
    
    • 1

    注意到print()语句后没有分号。与C/C++相比,Python代码具有以下特点:

    1. 语句后分号可加可不加。 特别地,如果一行有多个语句,则它们都必须加分号;
    2. 不使用大括号{},使用缩进控制代码层次。 处于统一代码块的代码,缩进必须对齐。

    此外,在Python中,'"没有区别。

    1.2 单行、多行注释

    单行注释以#开头,多行注释的开始和结束都是'''"""

    # 第一个注释
    # 第二个注释
    '''
    第三注释
    第四注释
    '''
    """
    第五注释
    第六注释
    """
    print ("Hello, Python!")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2 变量与对象、输入语句

    本节内容包括:

    1. 对象的类型;
    2. 变量的定义、赋值、删除等;
    3. 几种数字类型和运算符;
    4. input()的用法。

    学习本节内容后你将掌握:

    1. 用Python处理简单数据,并进行简单数学计算;
    2. 从键盘读入数据;
    3. 数字类型强制转换。

    练习题

    洛谷 P1001 A+B Problem
    洛谷 P1932 A+B A-B A*B A/B A%B Problem

    2.3部分参考了此链接

    2.1 变量与对象

    在Python中,变量没有类型,变量所指的对象才有类型。这与C/C++不同。

    Python中的变量不需要声明。每个变量在使用前都必须赋值。

    a=2		#int
    b=2.9	#float
    c="hi!"	#string
    d=1+2j	#complex
    e=True	#bool
    
    • 1
    • 2
    • 3
    • 4
    • 5

    不再需要一个变量以后,可以删除它。

    del a, b
    
    • 1

    2.2 数字类型和运算符

    Python有int, float, bool, complex几种数字类型。可以用type()判断变量的类型。

    >>> a, b, c, d = 20, 5.5, True, 4+3j
    >>> print(type(a), type(b), type(c), type(d))
    <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
    
    • 1
    • 2
    • 3

    也可以用isinstance()判断。

    >>> a = 111
    >>> isinstance(a, int)
    True
    
    • 1
    • 2
    • 3

    Python的除法和C/C++相比略有不同。

    1. x//y,x除以y,结果向下取整。比如-9//2=-57.5//3.5=2.0
    2. x/y,若x,y是实数,则永远返回一个浮点数;否则返回复数(实数部分则不一定是浮点数)。

    此外,x**y表示x的y次方,相当于pow(x, y)。比如10**3=1000

    2.3 输入语句

    input()是常用的输入语句,可以给出提示信息,并从键盘中读入字符串。

    str=input('Please input a string...')
    
    • 1

    请看以下示例。

    a = input("Enter a number: ")
    b = input("Enter another number: ")
    
    print("aType: ", type(a))
    print("bType: ", type(b))
    
    result = a + b
    print("resultValue: ", result)
    print("resultType: ", type(result))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    Enter a number: 100↙
    Enter another number: 45↙
    aType:  <class 'str'>
    bType:  <class 'str'>
    resultValue:  10045
    resultType:  <class 'str'>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    本例中我们输入了两个整数,希望计算出它们的和,但是事与愿违,Python只是它们当成了字符串,+起到了拼接字符串的作用,而不是求和的作用。

    为了解决这个问题,可以用类似C/C++中的强制转换,把string类对象转为int类对象。

    a=int(a)
    b=int(b)
    
    • 1
    • 2

    除了int(),Python还有ord(), chr()

    ord() 将字符转换为对应的 ASCII 码,相当于C/C++的int()
    chr() 将 ASCII 码转换为对应的字符,相当于C/C++的char()

    3 条件控制、循环语句

    本节内容包括:

    1. 条件控制语法;
    2. 循环语句语法。

    学习本节内容后你将掌握:

    1. if, while...else, for...else的语法;
    2. for语句的迭代格式。

    练习题

    洛谷 P1035 [NOIP2002 普及组] 级数求和

    3.1 条件控制

    if语句格式如下。

    if condition_1:
        statement_block_1
    elif condition_2:
        statement_block_2
    else:
        statement_block_3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.2 循环语句

    Python没有do...while,有while...elsefor...else

    3.2.1 while…else

    while condition:
    	statement1
    else:
    	statement2
    
    • 1
    • 2
    • 3
    • 4

    其中else部分可省略。

    else的部分只会在依靠whilecondition跳出循环以后才会执行。如果whilebreak语句结束,则else部分不会执行。比如:

    a=1
    while True:
        print(a)
        a=a+1
        if(a>3):
            break
    else:
        print('else')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1
    2
    3
    
    • 1
    • 2
    • 3

    3.2.2 for…else

    与C/C++不同的是,python 的 for 只需给出变量的变化范围集合(sequence),而无需给出遍历方式(例如从1到n)。

    for <variable> in <sequence>:
        <statements>
    else:
        <statements>
    
    • 1
    • 2
    • 3
    • 4

    比如:

    sites = ["Baidu", "Google","Runoob","Taobao"]
    for site in sites:
        print(site)
    
    • 1
    • 2
    • 3
    word = 'runoob'
    for letter in word:
        print(letter)
    
    • 1
    • 2
    • 3
    for number in range(1, 6):
        print(number)
    else:
      print("Finally finished!")
    
    • 1
    • 2
    • 3
    • 4

    range(st, ed, step) 能生成一个等差数列,范围是 [ s t , e d ) [st,ed) [st,ed),公差是 s t e p step step(不指定则为1)。因此上述代码的运行结果是:

    1
    2
    3
    4
    5
    Finally finished!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4 字典

    本节内容包括:

    字典的用法。

    学习本节内容后你将掌握:

    字典的定义、赋值、修改、迭代。

    练习题

    洛谷 P2580 于是他错误的点名开始了

    字典(Dictionary)是key -> value无序的映射集合。类似于C/C++的map,但不要求keyvalue的类型分别一致。

    dict={}
    dict['hello']=1
    dict[2]='world'
    dt={2:'This is ',1:'another dictionary'}
    
    print(dict['hello']);
    print(dict[2]);
    print(dt);
    print(dt.keys());
    print(dt.values());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    字典可以迭代,比如:

    dt={2:'This is ',1:'another dictionary'}
    for i in dt.keys():
        print(dt[i],end=' ')
    
    • 1
    • 2
    • 3
    This is  another dictionary 
    
    • 1

    5 元组、列表

    本节内容包括:

    元组、列表的用法。

    学习本节内容后你将掌握:

    1. 元组的定义、赋值、迭代等。
    2. 列表的定义、 赋值、修改、迭代等。

    练习题

    P1459 [USACO2.1] 三值的排序 Sorting a Three-Valued Sequence
    P1162 填涂颜色

    5.1 元组

    元组是一种只读的列表,在定义后便不可更改,类似于const版本的C/C++的list

    元组可以被双向索引,如下图所示。非负数代表正向索引,负数代表反向索引。
    在这里插入图片描述

    tup=('Google','Runoob',1997,2000,26.8,0)
    print(tup[2])
    print(tup[-2])
    
    • 1
    • 2
    • 3

    a+b表示首尾相接,a*4表示a+a+a+a。此外,元组也可以迭代:

    for x in (1, 2, 3): 
        print (x, end=" ")
    
    • 1
    • 2

    len(t)可以求元组t的元素个数。

    5.2 列表

    list.append()可以在列表末尾插入一个元素,del可以删除一个元素。

    list.append('Baidu')
    del list[2]
    
    • 1
    • 2

    其余与元组类似。

    6 集合、推导式

    本节内容包括:

    1. 集合的用法;
    2. 表达式的用法。

    学习本节内容后你将掌握:

    1. 集合的定义、赋值、运算等;
    2. 表达式的语法和用法。

    6.1 集合

    顾名思义,每种元素在集合中至多只能出现一次。

    >>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
    >>> print(basket)                      # 这里演示的是去重功能
    {'orange', 'banana', 'pear', 'apple'}
    >>> 'orange' in basket                 # 快速判断元素是否在集合内
    True
    >>> 'crabgrass' in basket
    False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    下面展示两个集合间的运算。

    >>> a = set('abracadabra')
    >>> b = set('alacazam')
    >>> a                                  
    {'a', 'r', 'b', 'c', 'd'}
    >>> a - b                              # 集合a中包含而集合b中不包含的元素
    {'r', 'd', 'b'}
    >>> a | b                              # 集合a或b中包含的所有元素
    {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
    >>> a & b                              # 集合a和b中都包含了的元素
    {'a', 'c'}
    >>> a ^ b                              # 不同时包含于a和b的元素
    {'r', 'd', 'b', 'm', 'z', 'l'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    set.add(x)x加入集合set中,set.discard(x)x从集合set删除。

    此外,还有 len()clear()x in set 等。

    6.2 推导式

    推导式可以用简短的代码描述一类对象,就像数学中的集合的一种定义方法
    { x ∣ 一个推导式 } \{x|一个推导式\} {x一个推导式}

    推导式有两种格式。

    表达式 for 变量 in 列表
    表达式 for 变量 in 列表 if 条件
    
    • 1
    • 2

    对列表、字典、集合、元组都适用。举例如下:

    >>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
    >>> new_names = [name.upper() for name in names if len(name)>3]
    >>> print(new_names)
    ['ALICE', 'JERRY', 'WENDY', 'SMITH']
    
    • 1
    • 2
    • 3
    • 4
    listdemo = ['Google','Runoob', 'Taobao']
    # 将列表中各字符串值为键,各字符串的长度为值,组成键值对
    >>> newdict = {key:len(key) for key in listdemo}
    >>> newdict
    {'Google': 6, 'Runoob': 6, 'Taobao': 6}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    >>> setnew = {i**2 for i in (1,2,3)}
    >>> setnew
    {1, 4, 9}
    
    • 1
    • 2
    • 3
    >>> a = (x for x in range(1,10))
    >>> a
    <generator object <genexpr> at 0x7faf6ee20a50>  # 返回的是生成器对象
    
    >>> tuple(a)       # 使用 tuple() 函数,可以直接将生成器对象转换成元组
    (1, 2, 3, 4, 5, 6, 7, 8, 9)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    领域驱动设计:分布式架构关键设计10问
    FFmpeg编译安装(windows环境)以及在vs2022中调用
    500mA 线性锂电充电芯片 DP4054/DP4054H完全兼容替代TP4054
    Vue + Element UI 前端篇(十一):第三方图标库
    机械臂速成小指南(十四):多项式插值轨迹规划
    (附源码)springboot码头作业管理系统 毕业设计 341654
    JAVA毕业设计098—基于Java+Springboot的在线教育课程视频(源码+数据库)
    DAO 中常见的投票治理方式
    「C++ 内存管理篇 1」C++动态内存分配
    SpringCloudGateway--自动路由映射
  • 原文地址:https://blog.csdn.net/YangHao5/article/details/133011693