手记

Python入门:新手必读的简单教程

概述

本文介绍了Python入门的相关知识,包括Python的安装、环境配置、基本语法、流程控制、函数与模块以及面向对象编程等内容。此外,还通过实战应用展示了Python在简单项目、数据处理与分析以及Web开发中的具体应用。通过学习本篇文章,读者可以全面了解Python编程的基础知识和实际应用。

Python简介与安装

Python是什么

Python是一种高级编程语言,由Guido van Rossum在1989年圣诞节期间开始设计并发布。Python的设计哲学强调代码的可读性和简洁性,使得Python成为一种易于学习和使用的语言。Python通过其简单的语法和清晰的代码结构,能够快速开发出高质量的应用程序。

Python是一种解释型语言,这意味着它不需要编译过程。Python代码可以直接在解释器中运行,这使得Python非常适合于快速原型开发和脚本编写。同时,Python可以作为一种脚本语言嵌入到其他语言中,如C或C++,以扩展这些语言的功能。

Python的应用领域

Python的应用领域非常广泛,包括但不限于:

  • Web开发:使用Django、Flask等框架开发Web应用。
  • 数据科学:数据分析、机器学习、数据可视化等。
  • 科学计算:物理、化学、生物学等领域的科学研究。
  • 自动化测试:编写测试脚本,提高软件开发效率。
  • 游戏开发:编写简单的游戏逻辑或控制界面。
  • 网络爬虫:从网页中抓取和解析数据。
  • 人工智能:开发深度学习模型,使用TensorFlow、PyTorch等库。
  • 云计算开发:开发和管理云服务和基础设施。
  • 物联网应用:通过Python控制物联网设备。
  • 软件开发:进行软件自动化测试和构建工具。

Python的版本选择与下载

Python有多个版本,主要分为两个大版本:Python 2.x和Python 3.x。Python 2.x版本已经停止维护,建议学习Python 3.x版本。Python 3.x版本提供了更好的语法、更丰富的库以及更完善的文档支持。因此,本文档将主要介绍Python 3.x版本的安装与使用。

Python环境的安装方法

  1. Windows系统

    • 访问Python官方网站下载页面,选择Python 3.x版本。
    • 点击下载链接,选择适合Windows系统的安装程序。
    • 运行安装程序,选择默认设置进行安装。
    • 选择“Add Python to PATH”选项,以便在命令行中直接使用Python。
  2. macOS系统

    • 打开Mac App Store,搜索并安装Xcode工具。
    • 访问Python官方网站下载页面,选择Python 3.x版本。
    • 点击下载链接,选择适合macOS系统的安装程序。
    • 运行安装程序,选择默认设置进行安装。
  3. Linux系统
    • 打开终端,输入以下命令安装Python 3:
      sudo apt-get update
      sudo apt-get install python3
    • 安装完成后,可以使用python3命令来运行Python。

Python环境配置

安装完成后,可以通过以下命令检查Python是否安装成功:

python3 --version

如果安装成功,将显示Python版本信息。接下来,可以配置Python环境:

  1. 安装IDE(集成开发环境)
    • 可以选择安装PyCharm、VS Code等IDE,它们提供了Python开发所需的工具和环境。
    • 例如,在VS Code中安装Python插件,可以从扩展市场搜索“Python”并点击安装。
  2. 配置环境变量

    • 在Windows系统中,可以通过控制面板或系统环境变量设置来添加Python的安装路径。
    • 在macOS和Linux系统中,可以通过shell配置文件(如.bashrc.zshrc)来设置环境变量。
  3. 安装包管理器pip

    • pip是Python的包管理工具,用于安装和管理第三方库。
    • 安装完成后,可以使用以下命令检查pip版本:
      pip3 --version
  4. 安装常用库
    • 可以通过pip安装常用的Python库,例如:
      pip3 install numpy
      pip3 install pandas
      pip3 install matplotlib
      pip3 install requests

通过以上步骤,Python环境已经配置完成,可以开始学习Python编程了。

Python基本语法

Python代码的基本结构

Python代码的基本结构如下:

  • 代码块通常使用缩进来表示层次结构,一般使用4个空格作为缩进量。
  • Python不使用大括号来表示代码块,而是通过缩进的开始和结束来定义代码的范围。
  • 每行代码可以单独结束,也可以使用分号;来连接多条语句。

示例代码:

# 示例代码
def greet(name):
    if name == 'Alice':
        print('Hello, Alice!')
    elif name == 'Bob':
        print('Hello, Bob!')
    else:
        print('Hello, stranger!')

greet('Alice')
greet('Bob')
greet('Charlie')

Python的注释规则

Python使用#符号来表示单行注释,从#符号开始到该行结束的部分都被视为注释。多行注释可以通过连续使用单行注释实现,或者使用三引号('''""")来包围整个注释内容。

示例代码:

# 单行注释
print('Hello, World!')  # 这是另一条单行注释

'''
这是一个多行注释
可以跨越多行
'''

"""
这也是一个多行注释
可以跨越多行
"""

Python的数据类型与变量

Python提供了多种内置的数据类型,包括整型(int)、浮点型(float)、字符串(str)、布尔型(bool)、列表(list)、元组(tuple)等。

变量

变量用于存储数据,可以通过赋值操作来创建变量。Python中不需要声明变量类型,Python会根据赋值自动推断变量类型。变量名由字母(包括下划线_)、数字和字母组成的字符串,但不能以数字开头。

示例代码:

# 整型
num = 42
print(num, type(num))  # 输出: 42 <class 'int'>

# 浮点型
pi = 3.14
print(pi, type(pi))  # 输出: 3.14 <class 'float'>

# 字符串
name = "Alice"
print(name, type(name))  # 输出: Alice <class 'str'>

# 布尔型
is_student = True
print(is_student, type(is_student))  # 输出: True <class 'bool'>

列表

列表是一种有序的数据集合,可以包含任意类型的元素。列表内的元素可以通过索引(下标)来访问,索引从0开始。

示例代码:

# 创建列表
numbers = [1, 2, 3, 4, 5]
print(numbers)  # 输出: [1, 2, 3, 4, 5]

# 访问列表元素
print(numbers[0])  # 输出: 1
print(numbers[2])  # 输出: 3

# 修改列表元素
numbers[1] = 20
print(numbers)  # 输出: [1, 20, 3, 4, 5]

# 列表操作
numbers.append(6)
print(numbers)  # 输出: [1, 20, 3, 4, 5, 6]
numbers.remove(3)
print(numbers)  # 输出: [1, 20, 4, 5, 6]

元组

元组是一种不可变的数据集合,一旦创建后不能修改其中的元素。元组可以包含任意类型的元素,元素可以通过索引来访问。

示例代码:

# 创建元组
point = (10, 20, 30)
print(point)  # 输出: (10, 20, 30)

# 访问元组元素
print(point[0])  # 输出: 10
print(point[2])  # 输出: 30

# 元组操作
# 元组不能直接修改元素,但可以通过切片来创建新的元组
new_point = point[:2] + (40,)
print(new_point)  # 输出: (10, 20, 40)

字典

字典是一种无序的数据集合,通过键(key)来存储和访问对应的值(value)。字典中的键必须是唯一的,并且通常是不可变类型,如字符串或元组。

示例代码:

# 创建字典
person = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
print(person)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'Beijing'}

# 访问字典元素
print(person['name'])  # 输出: Alice
print(person['age'])  # 输出: 25

# 修改字典元素
person['age'] = 26
print(person)  # 输出: {'name': 'Alice', 'age': 26, 'city': 'Beijing'}

# 字典操作
person['job'] = 'Engineer'
print(person)  # 输出: {'name': 'Alice', 'age': 26, 'city': 'Beijing', 'job': 'Engineer'}

Python的运算符与表达式

Python支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等。运算符用于执行基本的数学、逻辑等操作,并返回相应的结果。

算术运算符

算术运算符用于执行基本的数学运算,包括加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)、幂运算(**)等。

示例代码:

# 加法
result = 10 + 5
print(result)  # 输出: 15

# 减法
result = 10 - 5
print(result)  # 输出: 5

# 乘法
result = 10 * 5
print(result)  # 输出: 50

# 除法
result = 10 / 5
print(result)  # 输出: 2.0

# 取模
result = 10 % 3
print(result)  # 输出: 1

# 幂运算
result = 2 ** 3
print(result)  # 输出: 8

比较运算符

比较运算符用于比较两个值的关系,返回布尔值(TrueFalse),包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

示例代码:

# 等于
result = 10 == 10
print(result)  # 输出: True

# 不等于
result = 10 != 11
print(result)  # 输出: True

# 大于
result = 10 > 9
print(result)  # 输出: True

# 小于
result = 10 < 9
print(result)  # 输出: False

# 大于等于
result = 10 >= 10
print(result)  # 输出: True

# 小于等于
result = 10 <= 9
print(result)  # 输出: False

逻辑运算符

逻辑运算符用于组合或修改布尔值,包括逻辑与(and)、逻辑或(or)、逻辑非(not)等。

示例代码:

# 逻辑与
result = True and False
print(result)  # 输出: False

# 逻辑或
result = True or False
print(result)  # 输出: True

# 逻辑非
result = not True
print(result)  # 输出: False

通过以上示例,我们可以看到Python的基本语法和常见数据类型,为后续的学习打下基础。

Python流程控制

Python的条件语句

Python中提供了多种条件语句,包括ifelifelse,用于执行基于条件的代码块。条件语句的基本结构如下:

  • if语句:检查一个条件,如果条件为True,则执行相应的代码块。
  • elif语句:在if条件为False的情况下,检查另一个条件,如果条件为True,则执行相应的代码块。
  • else语句:在所有ifelif条件都为False的情况下,执行相应的代码块。

示例代码:

# 示例代码
age = 25
if age < 18:
    print("未成年")
elif age >= 18 and age < 60:
    print("成年")
else:
    print("老年")

# 输出: 成年

Python的循环语句

Python提供了多种循环语句,包括for循环和while循环,用于重复执行特定的代码块。

for循环

for循环用于遍历序列(如列表或字符串)中的每一个元素。for循环的基本结构如下:

for item in sequence:
    # 执行代码块

示例代码:

# 示例代码
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

# 输出:
# apple
# banana
# cherry

while循环

while循环用于在条件为True的情况下重复执行代码块。while循环的基本结构如下:

while condition:
    # 执行代码块

示例代码:

# 示例代码
count = 0
while count < 5:
    print(count)
    count += 1

# 输出:
# 0
# 1
# 2
# 3
# 4

Python的分支结构

分支结构是指程序在遇到某些条件时根据条件的真假执行不同的代码块。Python中通过ifelifelse语句实现分支结构。分支结构的基本结构如下:

  • if语句:检查一个条件,如果条件为True,则执行相应的代码块。
  • elif语句:在if条件为False的情况下,检查另一个条件,如果条件为True,则执行相应的代码块。
  • else语句:在所有ifelif条件都为False的情况下,执行相应的代码块。

示例代码:

# 示例代码
score = 85
if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 70:
    print("中等")
else:
    print("差")

# 输出: 良好

通过上述示例,我们可以看到Python中条件语句和循环语句的使用方法,这些概念是编写复杂程序时不可或缺的。

Python函数与模块

Python的函数定义与调用

函数是组织代码、提高可读性和可重用性的基本单元。Python中通过def关键字来定义函数。函数定义的基本结构如下:

def function_name(parameters):
    # 函数体
    return value
  • function_name:函数的名称,需要符合Python的命名规则。
  • parameters:函数的参数,可以有多个参数,参数之间用逗号,分隔。
  • return:返回语句,可选,用于返回函数的执行结果。

示例代码:

# 示例代码
def greet(name):
    return f"Hello, {name}!"

print(greet("Alice"))  # 输出: Hello, Alice!

Python的参数传递

Python支持多种参数传递方式,包括位置参数、关键字参数、默认参数和可变参数等。

位置参数

位置参数是调用函数时按照参数在定义函数时出现的顺序来传递的参数。

示例代码:

# 示例代码
def add(a, b):
    return a + b

result = add(3, 4)
print(result)  # 输出: 7

关键字参数

关键字参数是通过参数名来传递参数的,可以忽略参数的顺序。

示例代码:

# 示例代码
def greet(name, message):
    return f"{name}: {message}"

print(greet(message="Hello", name="Alice"))  # 输出: Alice: Hello

默认参数

默认参数是在定义函数时为其设置一个默认值,调用函数时可以不传递该参数,直接使用默认值。

示例代码:

# 示例代码
def greet(name="Alice"):
    return f"Hello, {name}!"

print(greet())  # 输出: Hello, Alice!
print(greet("Bob"))  # 输出: Hello, Bob!

可变参数

可变参数允许传递不定数量的参数,分为可变位置参数(使用*args)和可变关键字参数(使用**kwargs)。

示例代码:

# 示例代码
def print_args(*args, **kwargs):
    print("位置参数:", args)
    print("关键字参数:", kwargs)

print_args(1, 2, 3, a=4, b=5)
# 输出:
# 位置参数: (1, 2, 3)
# 关键字参数: {'a': 4, 'b': 5}

Python的内置模块与第三方库介绍

Python提供了丰富的内置模块,这些模块包含了许多常用的功能,如数学运算、文件操作、日期和时间处理等。

内置模块示例

示例代码:

import math

# 使用math模块中的pi常量
print(math.pi)  # 输出: 3.141592653589793

# 使用math模块中的sqrt函数
print(math.sqrt(16))  # 输出: 4.0

import datetime

# 获取当前日期和时间
current_time = datetime.datetime.now()
print(current_time)  # 输出: 当前日期和时间

第三方库介绍

除了内置模块,Python还提供了大量的第三方库,这些库可以扩展Python的功能,满足各种应用需求。常见的第三方库包括NumPy、Pandas、Matplotlib、Requests等。

  • NumPy:用于科学计算的库,包括数组操作、线性代数、傅里叶变换等。
  • Pandas:用于数据处理和分析的库,提供了DataFrame等数据结构。
  • Matplotlib:用于数据可视化,提供了多种图表类型。
  • Requests:用于HTTP请求的库,简化了Web开发中的请求操作。

示例代码:

# 使用NumPy和Pandas进行数据处理
import numpy as np
import pandas as pd

# 创建NumPy数组
arr = np.array([1, 2, 3, 4, 5])
print(arr)  # 输出: [1 2 3 4 5]

# 创建Pandas DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
print(df)
# 输出:
#        Name  Age         City
# 0     Alice   25      Beijing
# 1       Bob   30     Shanghai
# 2   Charlie   35    Guangzhou

# 删除缺失值
df.dropna(inplace=True)

# 处理重复数据
df.drop_duplicates(inplace=True)

# 格式化数据
df['Age'] = df['Age'].astype(int)

# 统计分析
mean_age = df['Age'].mean()
print(mean_age)  # 输出: 平均年龄

# 数据可视化
import matplotlib.pyplot as plt

df['Age'].plot(kind='bar')
plt.show()

Python的内置模块示例

示例代码:

import requests

# 发送GET请求
response = requests.get("https://api.github.com")
print(response.status_code)  # 输出: 200

# 发送POST请求
data = {"key": "value"}
response = requests.post("https://httpbin.org/post", json=data)
print(response.json())  # 输出: {'key': 'value'}

通过上述示例,我们可以看到Python中函数定义和调用的基本方法,以及一些常见的内置模块和第三方库的功能。

Python面向对象编程

Python中的类与对象

面向对象编程(Object-Oriented Programming,OOP)是Python中的一种编程范式,它通过定义类(Class)和对象(Object)来组织代码。类是对象的模板,定义了对象的属性和方法(函数),而对象是类的实例,可以拥有自己的属性值和方法。

定义类

定义一个类的基本语法如下:

class ClassName:
    def __init__(self, parameters):
        # 初始化方法
        self.attribute = parameters

    def method(self, parameters):
        # 类方法
        pass
  • __init__:初始化方法,用于创建对象时的初始化操作。self参数表示对象本身。
  • attribute:对象的属性,通过self关键字在方法中访问和修改。
  • method:类的方法,定义了对象的行为。

示例代码:

# 示例代码
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print(f"我的名字是 {self.name}, 年龄是 {self.age}")

# 创建对象
person = Person("Alice", 25)
person.introduce()  # 输出: 我的名字是 Alice, 年龄是 25

Python的继承与多态

继承是面向对象编程中的一个重要概念,它允许子类(子类)继承父类(父类)的属性和方法。Python中定义继承的基本语法如下:

class SubClassName(ParentClassName):
    # 子类可以重定义父类的方法,也可以添加新的方法

单继承

示例代码:

# 示例代码
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print(f"{self.name} is speaking")

class Dog(Animal):
    def speak(self):
        print(f"{self.name} is barking")

# 创建对象
animal = Animal("Cat")
animal.speak()  # 输出: Cat is speaking

dog = Dog("Dog")
dog.speak()  # 输出: Dog is barking

多态

多态是指在不同的类中定义相同的方法名,使得这些方法可以有不同的实现。Python中的多态性允许我们通过对象来调用方法,而不需要关心对象的具体类型。

示例代码:

# 示例代码
def make_speak(animal):
    animal.speak()

animal = Animal("Cat")
dog = Dog("Dog")

make_speak(animal)  # 输出: Cat is speaking
make_speak(dog)  # 输出: Dog is barking

Python的封装性与类属性

封装性是面向对象编程的另一个重要特性,它通过限制对象的属性和方法的访问来保护对象的内部状态,提高代码的安全性和可维护性。Python中可以通过__前缀来定义私有属性和方法,使它们不能从外部直接访问。

私有属性

示例代码:

# 示例代码
class Person:
    def __init__(self, name):
        self.name = name
        self.__age = 0  # 私有属性

    def set_age(self, age):
        self.__age = age

    def get_age(self):
        return self.__age

# 创建对象
person = Person("Alice")
person.set_age(25)
print(person.get_age())  # 输出: 25

类属性

类属性是属于整个类的属性,而不是特定的实例。类属性可以在类定义中直接定义,所有实例共享同一个类属性。

示例代码:

# 示例代码
class Counter:
    count = 0  # 类属性

    def __init__(self):
        Counter.count += 1

# 创建对象
counter1 = Counter()
counter2 = Counter()

print(Counter.count)  # 输出: 2

Python的多态性与方法重载

Python中的面向对象编程还支持多态性,允许一个对象根据上下文的不同表现不同的行为。此外,Python虽然不支持方法重载,但可以通过定义不同的函数来实现类似的功能。

方法重载

在Python中,可以通过定义不同的函数来实现类似方法重载的效果。例如,可以定义一个函数,根据传入参数的不同,执行不同的逻辑。

示例代码:

class Calculator:
    def add(self, x, y):
        return x + y

    def add(self, x, y, z):
        return x + y + z

calc = Calculator()
print(calc.add(1, 2, 3))  # 输出: 6

通过上述示例,我们可以看到Python中面向对象编程的基本概念,包括类与对象的定义、继承与多态的应用,以及封装性的实现。

Python实战应用

Python的简单项目应用

Python可以用于开发各种类型的项目,包括Web应用、数据分析、自动化脚本等。接下来,我们将通过一个简单的项目应用来演示Python的应用过程。

项目概述

我们将开发一个简单的Web应用,使用Flask框架来实现用户注册和登录的功能。这个项目将包括用户模型、数据库、视图函数、路由和模板等部分。

安装Flask

首先,需要安装Flask框架。可以使用pip命令来安装Flask:

pip install flask

创建项目结构

项目结构如下:

simple_flask_app/
│
├── app.py
├── models.py
└── templates/
    └── register.html
  • app.py:应用主文件,包含Flask应用的初始化和路由定义。
  • models.py:用户模型文件,定义用户相关的数据结构。
  • templates/:模板文件夹,包含HTML模板文件。

用户模型

models.py文件中定义用户模型:

from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt

db = SQLAlchemy()
bcrypt = Bcrypt()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)

    def __init__(self, username, password):
        self.username = username
        self.password = bcrypt.generate_password_hash(password).decode('utf-8')

    def verify_password(self, password):
        return bcrypt.check_password_hash(self.password, password)

创建应用

app.py文件中创建Flask应用并定义路由:

from flask import Flask, render_template, request, redirect, url_for
from models import db, User
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db.init_app(app)
bcrypt = Bcrypt(app)

@app.route('/')
def index():
    return "欢迎使用简单Flask应用"

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        user = User(username, password)
        db.session.add(user)
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('register.html')

if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

创建模板文件

templates文件夹中创建register.html模板文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <h1>用户注册</h1>
    <form method="post" action="{{ url_for('register') }}">
        <label>
            用户名:
            <input type="text" name="username" required>
        </label>
        <br>
        <label>
            密码:
            <input type="password" name="password" required>
        </label>
        <br>
        <input type="submit" value="注册">
    </form>
</body>
</html>

运行应用

确保所有依赖项已安装,然后运行应用:

python app.py

打开浏览器,访问http://127.0.0.1:5000/register,可以看到用户注册页面,并可以测试注册功能。

Python的数据处理与分析

Python在数据处理和分析领域有着广泛的应用,包括数据清洗、统计分析、可视化等。本节将介绍使用Pandas进行复杂数据处理的示例。

数据处理与分析示例

示例代码:

import numpy as np
import pandas as pd

# 创建DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)

# 读取CSV文件
df_csv = pd.read_csv('data.csv')

# 删除缺失值
df_csv.dropna(inplace=True)

# 处理重复数据
df_csv.drop_duplicates(inplace=True)

# 格式化数据
df_csv['Age'] = df_csv['Age'].astype(int)

# 统计分析
mean_age = df_csv['Age'].mean()
print(f"平均年龄: {mean_age}")

# 数据可视化
import matplotlib.pyplot as plt

df_csv['Age'].plot(kind='bar')
plt.show()

Python的Web开发入门

Python在Web开发领域有着广泛的应用,主要包括Flask、Django等框架。本节将介绍使用Flask进行Web开发的基本步骤和常见操作。

安装Flask

首先,需要安装Flask框架。可以使用pip命令来安装Flask:

pip install flask

创建应用

创建一个简单的Flask应用,包括路由和视图函数。

示例代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "欢迎访问主页"

@app.route('/about')
def about():
    return "欢迎访问关于页面"

@app.route('/hello/<name>')
def hello(name):
    return f"欢迎访问{name}页面"

if __name__ == '__main__':
    app.run(debug=True)

运行应用

确保所有依赖项已安装,然后运行应用:

python app.py

打开浏览器,访问http://127.0.0.1:5000/,可以看到主页,访问http://127.0.0.1:5000/about,可以看到关于页面,访问http://127.0.0.1:5000/hello/Alice,可以看到Alice页面。

通过上述示例,我们可以看到Python在简单项目应用、数据处理与分析、Web开发等方面的强大功能和灵活性。

0人推荐
随时随地看视频
慕课网APP