Python基础篇(四)-- 流程控制

28 篇文章 51 订阅
订阅专栏

        做任何事都要遵循一定的原则,程序设计也是如此,需要利用流程控制实现与用户的交流,并根据用户的需求决定程序“做什么”,“怎么做”。流程控制对于任何一门编程语言来说都是至关重要,它提供了控制程序如何执行的方法。按照执行流程划分,Python程序也可分为 3 大结构,即顺序结构、选择(分支)结构和循环结构。

1 程序结构

1.1 顺序结构

        我们看到的代码都是顺序执行的,也就是先执行第1条语句,然后是第2条、第3条……一直到最后一条语句,这称为顺序结构。顺序结构就是让程序按照从头到尾的顺序依次执行每一条Python代码,不重复执行任何代码,也不跳过任何代码。

1.2 选择结构

        在Python中,可以使用if……else……语句对条件进行判断,然后根据不同的结果执行不同的代码,这称为选择结构或者分支结构。
        Python中的if……else……语句可以细分为三种形式,分别是if语句、if……else……语句和if……elif……else语句,它们的语法和执行流程如表1所示。

表 1 if else 分支语句的三种形式
语法格式 if 表达式:
    代码块
if 表达式:
     代码块 1
else:
     代码块 2
if 表达式 1:
     代码块 1
elif 表达式 2:
     代码块 2
……
else:
     代码块 n
执行流程 if语句执行流程 if else语句执行流程 if elif else语句执行流程

        Python中,if语句、if……else……语句和if……elif……else语句之间可以相互嵌套。因此,在开发程序时,需要根据场景需要,选择合适的嵌套方案。需要注意的是,在相互嵌套时,一定要严格遵守不同级别代码块的缩进规范。

温馨提示:

  • “表达式”可以是一个单一的值或者变量,也可以是由运算符组成的复杂语句,形式不限,只要它能得到一个值就行。不管“表达式”的结果是什么类型,if……else……都能判断它是否成立(真或者假)。
  • 每个条件后面要使用冒号:,表示接下来是满足条件后要执行的语句块。
  • 使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
  • 在Python中没有switch – case语句。
1.3 循环结构

        循环有两种:

  • 一直重复,直到条件不满足时才结束的循环,称为条件循环。while循环
  • 重复一定次数的循环,称为计次循环。for循环

1. while循环
        while语句执行的具体流程为:首先判断条件表达式的值,其值为真(True)时,则执行代码块中的语句,当执行完毕后,再回过头来重新判断条件表达式的值是否为真,若仍为真,则继续重新执行代码块……如此循环,直到条件表达式的值为假(False),才终止循环。while循环结构的执行流程如下图所示。


图1 while循环的执行流程图

        温馨提示: (1)代码块注意冒号和缩进(通常缩进 4 个空格),否则Python解释器会报SyntaxError错误(语法错误)。(2)在使用while循环时,一定要保证循环条件有变成假的时候,否则这个循环将成为一个死循环。所谓死循环,指的是无法结束循环的循环结构。(3)在Python中没有do...while循环。

2. for循环
        for循环,它常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。执行流程如下图所示。


图2 for循环的执行流程图

        for循环的语法格式如下:

for 迭代变量 in 字符串|列表|元组|字典|集合:
     代码块

(1)数值循环
        在使用 for 循环时,最基本的应用就是进行数值循环。比如说,想要实现从 1 到 100 的累加,可以执行如下代码:

# -*- coding:utf-8 -*-
print("计算1+2+...+100的结果为:", end="")
# 保存累加结果的变量
result = 0
# 逐个获取从1到100这些值,并做累加操作
for i in range(101):
    result += i
print(result)

运行结果为:计算1+2+…+100的结果为:5050

(2)遍历列表和元组
        当用for循环遍历list列表或者tuple元组时,其迭代变量会先后被赋值为列表或元组中的每个元素并执行一次循环体。

# -*- coding:utf-8 -*-
my_list = [1, 2, 3, 4, 5]
for ele in my_list:
    print("ele=", ele)

程序运行结果为: ele= 1 ele= 2 ele= 3 ele= 4 ele= 5

        使用内置enumerate函数进行遍历,可以得到元素对应的索引,语法格式如下:

for index,item in enumerate(list):
	print(index, item)

(3)遍历字典
        在使用for循环遍历字典时,经常会用到和字典相关的 3 个方法,即items()keys() 以及 values(),它们各自的用法可以参考 字典元素访问。当然,如果使用 for 循环直接遍历字典,则迭代变量会被先后赋值为每个键值对中的键。

# -*- coding:utf-8 -*-
my_dict = {'A': 65, 'B': 66, 'C': 67}
# 直接遍历字典,和遍历字典 keys() 方法的返回值是相同的
for ele in my_dict:
    print('ele1=', ele)

for ele in my_dict.values():
    print("ele2=", ele)

for ele in my_dict.items():
    print("ele3=", ele)

程序运行结果为:ele1= A ele1= B ele1= C
ele2= 65 ele2= 66 ele2= 67
ele3= (‘A’, 65) ele3= (‘B’, 66) ele3= (‘C’, 67)

        补充:Python中,无论是while循环还是for循环,其后都可以紧跟着一个else代码块,它的作用是当循环条件为False跳出循环时,程序会最先执行else 代码块中的代码。

3. 循环嵌套
        Python不仅支持if语句相互嵌套,whilefor循环结构也支持嵌套。所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如for里面还有forwhile里面还有while,甚至while中有for或者for中有while也都是允许的。

        当 2 个(甚至多个)循环结构相互嵌套时,位于外层的循环结构常简称为外层循环或外循环,位于内层的循环结构常简称为内层循环或内循环。

        循环嵌套结构的代码,Python解释器执行的流程为:

  1. 当外层循环条件为True时,则执行外层循环结构中的循环体;
  2. 外层循环体中包含了普通程序和内循环,当内层循环的循环条件为True时会执行此循环中的循环体,直到内层循环条件为False,跳出内循环;
  3. 如果此时外层循环的条件仍为True,则返回第 2 步,继续执行外层循环体,直到外层循环的循环条件为False
  4. 当内层循环的循环条件为False,且外层循环的循环条件也为False,则整个嵌套循环才算执行完毕。

        循环嵌套的执行流程图如图 3 所示:


图3 循环嵌套的执行流程图

        嵌套循环执行的总次数 = 外循环执行次数 * 内循环执行次数

2 其他语句

        在实际开发中,有时候我们会先搭建起程序的整体逻辑结构,但是暂时不去实现某些细节,而是在这些地方加一些注释,方面以后再添加代码,但是Python提供了一种更加专业的做法,就是空语句passpass语句,表示空语句。它不做任何事情,一般起到占位作用。使用pass语句比使用注释更加优雅。

1. assert断言函数
        assert语句,又称断言语句,可以看做是功能缩小版的if语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python解释器会报AssertionError错误。语法格式为:

assert 表达式

        assert会令程序崩溃,为什么还要使用它呢?这是因为,与其让程序在晚些时候崩溃,不如在错误条件出现时,就直接让程序崩溃,这有利于我们对程序排错,提高程序的健壮性。常用于检查用户的输入是否符合规定,还经常用作程序初期测试和调试过程中的辅助工具。

2. break用法
        break语句可以立即终止当前循环的执行,跳出当前所在的循环结构。无论是while循环还是for循环,只要执行 break语句,就会直接结束当前正在执行的循环体。

# -*- coding:utf-8 -*-
new_str = "Python,Java,Go"
for ele in new_str:
    if ele == ',':
        # 终止循环
        break
    print(ele, end="")

print("\n执行循环体外的代码")

运行结果为:Python
执行循环体外的代码

        break语句一般会结合if语句进行搭配使用,表示在某种条件下,跳出循环。如果使用嵌套循环,break语句将跳出最内层的循环。

        for循环后也可以配备一个 else 语句。这种情况下,如果使用 break 语句跳出循环体,不会执行 else 中包含的代码。

# -*- coding:utf-8 -*-
new_str = "Python,Java,Go"
for ele in new_str:
    if ele == ',':
        # 终止循环
        break
    print(ele, end="")
else:
    print("执行else语句中的代码")
print("\n执行循环体外的代码")

运行结果为:Python
执行循环体外的代码

        从输出结果可以看出,使用 break 跳出当前循环体之后,该循环后的 else 代码块也不会被执行。但是,如果将 else 代码块中的代码直接放在循环体的后面,则该部分代码将会被执行。

        另外,对于嵌套的循环结构来说,break 语句只会终止所在循环体的执行,而不会作用于所有的循环体。举个例子:

# -*- coding:utf-8 -*-
new_str = "Python,Java,Go"
for i in range(3):
    for j in new_str:
        if j == ",":
            break
        print(j, end="")
    print("\n跳出内循环")

运行结果为:
Python
跳出内循环
Python
跳出内循环
Python
跳出内循环

        分析上面程序,每当执行内层循环时,只要循环至 new_str 字符串中的逗号( , )就会执行 break 语句,它会立即停止执行当前所在的内存循环体,转而继续执行外层循环。

        在嵌套循环结构中,如何同时跳出内层循环和外层循环呢?最简单的方法就是借用一个 bool 类型的变量。

new_str = "Python,Java,Go"
flag = False
for i in range(3):
    for j in new_str:
        if j == ",":
            # 在break前,修改flag的值
            flag = True
            break
        print(j, end="")
    print("\n跳出内循环")
    if flag == True:
        print("跳出外层循环")
        break

输出结果为:
Python
跳出内循环
跳出外层循环

        可以看到,通过借助一个 bool 类型的变量 flag,在跳出内循环时更改 flag 的值,同时在外层循环体中,判断 flag 的值是否发生改动,如有改动,则再次执行 break 跳出外层循环;反之,则继续执行外层循环。

3. continue用法
        continue语句只会终止执行本次循环中剩下的代码,直接从下一次循环继续执行。

一起学Python 2.1——循环语句
爱编程的晖哥的博客
01-19 793
今天我们来学习Python中的循环语句 在日常生活中,类似一些重复进行的动作我们称为循环 循环有两种类型: 一种是重复一定次数的循环,称为计次循环,如for循环 一种是一直循环,直到不满足条件为止,称为条件循环,只要条件为真,就一直循环,当条件为假时,退出循环,比如while循环 下面对两种循环进行介绍 ...
python for循环流程图_python流程
weixin_39860349的博客
11-24 3029
广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!对于刚开始接触python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了! 接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的!? python基础部分:老话说的好,“万丈高楼平地起!”不管你做什么都一样,何况编程; 或许...
2024-6.python流程控制
最新发布
itwangyang520的博客
04-16 310
一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。同样是正常结束循环时,else子句执行。​ 可以不间断的进行猜数字游戏环节,找到猜对了,结束程序,猜不对,可以不断的进行游戏,并且需要提示用户猜大了还是猜小了。上图中就是一组典型的流程控制操作,很明确的阐述了编程中的因果关系,同一个输入不管执行多少次必然会得到同样的输出结果。​ 2.每一个用户的初始分数为100,每猜错一次扣5分,最后程序结束,统计用户的得分。1.将序列中的元素两两比较,然后实现将序列中的最大值逐一偏移到序列的末尾位置。
python实践第章-流程控制
weixin_44112431的博客
08-10 1090
疯狂python讲义第三章课后习题实践
Python流程控制与字符串案例集锦
zhouwhui 的博客
10-10 884
Python流程控制+字符串操作案例寂集锦 包含回文数、阿姆斯特朗数(自幂数)、水仙花数、完数、素数(质数)、排列组合、数据加密(自定义加密规则)、数据解密、最大公约数、最小公倍数、猴子分桃
python中for循环流程图_Javascript for循环_郭隆邦技术博客
weixin_39878760的博客
11-24 593
自增运算符++,i++;语句每执行一次,变量1增加1.运算符*=, S *= i;语句表示变量S与变量i相乘,然后把成绩赋值给S比较运算符上一节课谈到过,变量是可以改变的,变量的变化就是内存寄存器的状态变化,内存的变化就像你反复擦鞋U盘更改内容for循环结构代码中关键字for构建的循环结构,主要完成的功能就是,首先定义一个变量i,初始值是1,然后判断变量i是否小于11,如果小于11,大括号里面的语...
python中for循环流程图_Python循环语句
weixin_39655362的博客
11-24 2494
Python循环语句前提:如果让你1-100之间的整数,你用程序应该怎么实现。本章节将向大家介绍Python循环语句,程序在一般情况下是按顺序执行的。编程语言提供了各种控制结构,允许更复杂的执行路径。循环语句允许我们执行一个语句或语句组多次,下面是在大多数编程语言中的循环语句的一般形式:Python提供了for循环和while循环循环类型描述while循环在给定的判断条件为true时执行循环体,...
python基础6.zip
06-27
Python语言基础 Python的历史和特点 Python开发环境的搭建 Python的变量、注释和基本数据类型 条件循环语句 条件判断和逻辑运算 循环控制和迭代操作 常见的循环条件语句的应用 字符串和列表 字符串的基本操作...
python基础5.zip
06-27
Python语言基础 Python的历史和特点 Python开发环境的搭建 Python的变量、注释和基本数据类型 条件循环语句 条件判断和逻辑运算 循环控制和迭代操作 常见的循环条件语句的应用 字符串和列表 字符串的基本操作...
python基础4.zip
06-27
Python语言基础 Python的历史和特点 Python开发环境的搭建 Python的变量、注释和基本数据类型 条件循环语句 条件判断和逻辑运算 循环控制和迭代操作 常见的循环条件语句的应用 字符串和列表 字符串的基本操作...
python基础3.zip
06-27
Python语言基础 Python的历史和特点 Python开发环境的搭建 Python的变量、注释和基本数据类型 条件循环语句 条件判断和逻辑运算 循环控制和迭代操作 常见的循环条件语句的应用 字符串和列表 字符串的基本操作...
python基础2.zip
06-27
Python语言基础 Python的历史和特点 Python开发环境的搭建 Python的变量、注释和基本数据类型 条件循环语句 条件判断和逻辑运算 循环控制和迭代操作 常见的循环条件语句的应用 字符串和列表 字符串的基本操作...
python循环语句机制_Python-for循环的内部机制
weixin_39911007的博客
02-21 80
Python中,使用for循环可以迭代容器对象中的元素,这里容器对象包括是列表(list)、元组(tuple)、字典(dict)、集合(set)等。但是,为什么这些对象可以使用for循环进行操作呢?首先,定义一个简单的类尝试一下:class TestRange:def __init__(self, num):self.num = numfor i in TestRange(10):print(i)...
Python循环流程
weixin_30858241的博客
11-04 466
1.for循环 计算1+2+3+……+100的和 1 count = 0 2 i = 1 3 for i in range(101): 4 count+=i 5 print(count) 前n项和公式为:Sn=n*a1+n(n-1)d/2或Sn=n(a1+an)/2。 2.while循环 计算1+3+5+……+99的和 counter = 50sum = 0i =1...
JavaScript的各种for循环
qq_40994735的博客
08-17 636
JavaScript的各种for循环1. 什么是循环?2. 循环三要素3. 不同类型的for循环3.1 for3.2 for in3.3 for of 1. 什么是循环? 《战国策·燕策二》:“此必令其言如循环,用兵如刺蜚绣。”往复回旋。指事物周而复始地运动或变化。意思是转了一圈又一圈,一次又一次地循回。可以简要地将基本思想表述如下:世界是按照极其漫长的时间周期,即所谓的”生成的大年“,周而复始地永恒循回;这个周期因为过于漫长而实际上无法预测,但又不是完全确定的;在这个永恒循环的过程中,世上的一切,
python3 笔记9.程序流程结构--循环结构(while,for)
药药君
10-17 543
#循环结构(2种) while for # 1. while循环:多次循环,当条件为真(True)时,则会运行循环语句,直到条件结果为假(False)时跳出循环。 '''格式: while 条件语句: 循环体语句 ''' a = 1 while a<10: a+=1# 防止while进入死循环,若不加入这句的话,a<10是永远成立的,就会循环打印1 prin...
图解 Python 编程(9) | for循环(附要点速查表·完结)
热门推荐
ShowMeAI研究中心
02-22 1万+
python中,for 循环常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。
Python流程控制语句之循环语句
程序员小十一的博客
01-25 1168
博客中详细介绍了Python循环语句中的while循环和for循环,以及循环嵌套。
python循环结构
qq_69473174的博客
03-12 429
python循环结构
python基础.doc
11-27
Python基础.doc》是一份讲解Python编程基础的文档。Python是一种简洁、易学、高效的编程语言,因此它成为了很多人入门编程的首选语言。 这份文档应该包含了Python的基本语法、变量、数据类型、运算符、流程控制循环语句等内容。首先,它会详细介绍Python的注释规则,以及如何定义和使用变量。变量是存储数据的容器,它可以用于存储不同类型的数据,包括整数、浮点数、字符串等。接下来,文档应该解释各种常见的运算符,如算术运算符、比较运算符和逻辑运算符,以及它们的优先级和使用方法。 然后,文档应该涵盖Python中的条件语句和循环语句。条件语句如if语句和else语句,用于根据条件执行不同的代码块。循环语句如for循环和while循环,用于重复执行某些代码段。在解释这些语句时,应该给出一些实际的例子来帮助读者更好地理解。 此外,文档还应该介绍一些常用的内置函数和字符串操作方法。内置函数是Python提供的一些预先编写好的函数,可以直接使用,如print()和len()等。字符串操作方法主要是对字符串进行切片、连接、替换以及查找等操作。 最后,文档中还应该提供一些练习题或者编程示例,让读者能够通过实践来巩固所学的知识。 总之,《Python基础.doc》是一份详细讲解Python编程基础的文档,内容应该涵盖Python的基本语法、变量、数据类型、运算符、流程控制循环语句等,并配有实例和练习题,以帮助读者更好地理解和掌握Python编程知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
182
原创
1492
点赞
9932
收藏
1198
粉丝
关注
私信
写文章

热门文章

  • sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类 77621
  • 矩阵篇(三)-- 矩阵的普通乘积、Hadamard 积、Kronecker 积及其性质 46729
  • Arduino基础篇(五)-- 如何快速上手串口通信(Serial) 40833
  • Arduino基础篇(四)-- 如何玩转Arduino的PWM 35022
  • Arduino基础篇(六)-- 如何使用Arduino的IIC总线(Wire) 29305

分类专栏

  • Math 20篇
  • Artificial Intelligence
  • Machine Learning 26篇
  • Deep Learning 13篇
  • Pytorch and Sklearn 18篇
  • Programming Language
  • Python 28篇
  • Software Foundations
  • Algorithm and Data Structure 15篇
  • Computer Networking 17篇
  • MySQL 4篇
  • Embedded Software 1篇
  • Arduino 16篇
  • ROS 8篇
  • LC and PAT 30篇
  • Development Kit 1篇
  • Git 4篇
  • Personal Blog 6篇
  • Linux 7篇
  • Paper Reading 3篇
  • Skills 4篇
  • AIGC

最新评论

  • Latex 基本操作

    m0_59760635: 博客背景好可爱,内容也格式很舒服,赞一个。表情包

  • Arduino基础篇(九)-- 无刷直流电机转速和方向控制

    Reverse fate: 终于解决了控制无刷的震动问题,原因是pwm的频率不对导致无刷电机旋转时震动大还会导致发热,原本频率太低现在17.8khz实现静音低速旋转,感谢博主的文章表情包表情包表情包

  • ROS基础篇(一)-- 最新学习路线,快从这里开始

    又错哪了: 网站寄了

  • Python基础篇(九)-- 正则表达式

    dandellion_: 1.7 转义字符那里,不转义也是对的,字符集合内的元字符不用转义的

  • 《计算机网络—自顶向下方法》 Wireshark实验(六):IP 协议分析

    lann*: 数据分组 MTU=1400,分组出的数据长度1420了,不对吧

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 生成对抗网络简介
  • Latex 基本操作
  • Python数据分析(四)-- 操作Excel文件
2024年1篇
2023年67篇
2022年74篇
2021年54篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长路漫漫2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司张掖SEO按天收费推荐布吉建网站价格巴中关键词按天扣费沈阳百度竞价包年推广公司同乐seo优化多少钱晋中百度seo哪家好吉祥网站优化按天扣费价格南充网站排名优化推荐黔西南网站建设报价黑河网站优化按天扣费报价无锡关键词排名包年推广公司桂林品牌网站设计公司西安关键词排名包年推广多少钱信阳网站排名优化推荐大庆seo网站优化哪家好南山SEO按天收费价格商洛网站优化按天收费报价松岗建站哪家好平凉网站优化按天扣费哪家好萍乡建网站多少钱黄南企业网站建设推荐常德百度竞价包年推广和田seo优化玉树网站排名优化哪家好兰州百度网站优化排名公司汕头营销网站哪家好兰州百度网站优化排名报价宜春网站建设设计黔西南SEO按天计费多少钱随州企业网站建设歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化