读书笔记,python基础决断

  Python版本:叁.6.二  操作系统:Windows
 小编:SmallWZQ

Python基础——条件剖断,python基础决断

  Python版本:三.六.二  操作系统:Windows  小编:SmallWZQ

  到近来甘休,Python基础序列的稿子中的程序都是一条一条语句顺序实践的。在本章中,我会注重介绍让程序选取是还是不是实行语句块的方式。

  Python程序为何能够实现小编采取的作用吗?因为它能够遵照规则进行判定是还是不是执行上边包车型的士语句块。

  Python基础——数据类型中讲到的布尔值就与规范判别有着必然的维系。

伍.1 print和import的越多新闻

5.一 print和import的愈来愈多音信

  到近期甘休,Python基础种类的稿子中的程序都以一条一条语句顺序施行的。在本章中,笔者会重视介绍让程序选拔是或不是实践语句块的不二秘籍。

标准化判定

伍.一.一用到逗号输出

5.1.1应用逗号输出

  Python程序为何能够落成自己选拔的意义吗?因为它能够依据标准举办决断是或不是推行上面包车型地铁语句块。

 1.1 语句块

  什么是语句块呢?

  语句块是在条件为真(条件语句)时实践恐怕实践多次(循环语句)的1组语句。在代码前放置空格来缩进语句就能够创制语句块。

  关于缩进:

    使用tab键也能够缩进语句块。Python将二个tab字符解释为到下三个tab字符地点的移动,而一个tab字符地点为八个空格,然则正式且推荐的主意是只用空格,尤其是在每一个缩进需求5个空格的时候。

  在Python中,英文版冒号(:)用来标志语句块的起来,块中的每二个说话都以缩进的(缩进量一样)。当回退到和已经已经关闭的块一样的缩进量时,就代表近来块已经终结了(那个不要忧郁,繁多程序编辑器和合并开采遇到都掌握怎么着缩进语句块,能够扶持用户轻巧把握缩进)!!!

 壹.二 条件和规则语句

  有趣的事中的if语句将在闪亮进场啦~~~

  使用原则语句并非少写了冒号(:),而且必须是英文版本的。

  1. if语句

  对于if语句,若条件决断为真,那么前面包车型大巴语句块就会被施行。若条件推断为假,语句块就会被跳过,不会推行。

1 #if语句
2 age = 20
3 if age >= 18:
4     print('your age is', age)
5     print('adult')

  2. else语句

  else子句只是增添一种选拔(之所以称之为子句是因为它不是独立的言语,而是if的1有个别)。if…else…搭配,若if语句为False,不实行if下的语句块,而去else下的语句块。

1 #if...else...语句
2 age = 3
3 if age >= 18:
4     print('your age is', age)
5     print('adult')
6 else:
7     print('your age is', age)
8     print('teenager')

  3. elif语句

  借使须求检讨四个标准,就足以应用elif,它是else
if的简写,也是if和else语句的一道使用,固然用elif做更密切的判别:

1 #if...elif...elif...else...语句
2 age = 3
3 if age >= 18:
4     print('adult')
5 elif age >= 6:
6     print('teenager')
7 else:
8     print('kid')

  肆. 规格语句计算

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

  5. 注意点

  if语句执行有天性状,它是从上往下判定,如果在有个别判别上是True,把该论断相应的话语推行后,就大要掉多余的elifelse语句,所以,请测试并分解为什么上面包车型地铁程序打印的是teenager:

1 #条件语句执行特点:从上往下判断
2 age = 20
3 if age >= 6:
4     print('teenager')
5 elif age >= 18:
6     print('adult')
7 else:
8     print('kid')

  6. input()运用

  最终看叁个有标题标原则判别。大多同室会用input()读取用户的输入,那样能够本身输入,程序运营得更有意思,更有人性化。其实啊,Error往往出现在不测的地点。不信,来看段代码:

#if语句中使用input()方法
birth = input('birth: ')
if birth < 2000:
    print('00前')
else:
    print('00后')

  输入19九三,结果报错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()

  为何吧?作者在刚接触Python时,用到那里报错也是百思不得其解,一样纠结了许久。直到后来,小编才日渐懂了。

  关于input(),作者在小说《Python基础——输出[print()]与输入[input()]》中已经讲得比较详细了。

  那是因为input()回去的数据类型是strstr不可能直接和整数相比较,必须先把str转变来整数。Python提供了int()函数来成功那件事情。

s = input('birth: ')
birth = int(s)
if birth < 2000:
    print('00前')
else:
    print('00后')

  因而,在编制程序中,条件决断是可怜首要的。条件判定能够让Computer自身做采用,Python的if…elif…else很利索。条件推断从上向下相配,当满意条件时进行相应的块内语句,后续的elif和else都不再执行。

1.3 条件运算符

  条件剖断,if语木帝在判定并精选是或不是实行,而并未过多关系条件本身。

  下边是Python中普及的基准运算符:

Python中的条件运算符
表达式 描述
x == y x 等于 y
x < y x 小于 y
x > y x 大于 y
x >= y x 大于等于 y
x <= y x 小于等于 y
x != y x 不等于 y
x is y x和y是同一个对象
x is not y x和y不是同一对象
x in y x是y容器的成员
x not in y x不是y容器的成员

  在Python中,比较运算和赋值运算是能够延续的——多少个运算符能够连在一齐使用,例如:
0 < age <120。

  有些运算符值得特别关怀:

  1、相等运算符

  倘若想要知道多个内容是还是不是等于,你应该使用非常运算符,即多个等号==。请务必记得是多个等号!!!单个等号只是赋值啊~~~

1 #相等运算符==
2 >>>"python" == "python"
3 True
4 >>>"Python" == "python"
5 False
6 >>>"python" = "python"
7   File "<stdin>", line 1
8 SyntaxError: can't assign to literal
9 #很明显,单个相等运算符是赋值运算符,是用来改变值的,而不能用来比较

  二、is:同一性运算符

  读书笔记,python基础决断。本条概念很不友善,什么是同1性?第二遍接触真是云里雾里啊,真正领会is运算符才知道同一性的真谛。

  乍①看,is运算符和==一样,事实上却比不上。

  示例代码如下:

 1 #同一性运算符:is
 2 #is和==之间的差异
 3 >>>x = y = [1,2,3]
 4 >>>z = [1,2,3]
 5 >>>x == y
 6 True
 7 >>>x == z
 8 True
 9 >>>x is y
10 True
11 >>>y is x
12 True
13 >>>x is z
14 False
15 >>>z is x
16 False

  注:==运算符比较五个对象是或不是等于,is判断双方是或不是一律(同1个目的)。

  叁、in:成员身份运算符

  四、布尔运算符:and、or和not

  5、断言:条件后,加多字符串,解释断言,关键字:assert(在先后中置入检查点)

打字与印刷多少个表达式也是行得通的,只要将它们用逗号隔离就好:

打字与印刷多个表明式也是有效的,只要将它们用逗号隔开分离就好:

  Python基础——数据类型中讲到的布尔值就与原则推断有着一定的联络。

小结

  一. 等号运算符:==,单个等号=为赋值运算符;

  二. 规格推断能够让电脑自个儿做取舍,Python的if…elif…else很灵敏;

  三.
准绳判别从上向下相配,当满足条件时实践相应的块内语句,后续的elif和else都不再实行。

Python版本:叁.陆.二 操作系统:Windows 作者:SmallWZQ
到近来截至,Python基础类别的篇章中的程序都以一条…

>>>print'age:',42
age: 42

  

>>>print'age:',42age: 42

  

基准推断

要同时输出文本和变量值,却又不期望利用字符串格式化:

要同时输出文本和变量值,却又不愿意接纳字符串格式化:

 1.1 语句块

  什么是语句块呢?

  语句块是在原则为真(条件语句)时进行大概试行数十次(循环语句)的一组语句。在代码前放置空格来缩进语句就能够创设语句块。

  关于缩进:

    使用tab键也能够缩进语句块。Python将三个tab字符解释为到下三个tab字符地方的移动,而一个tab字符地点为八个空格,可是正式且推荐的措施是只用空格,特别是在各个缩进须求陆个空格的时候。

  在Python中,英文版冒号(:)用来标识语句块的起来,块中的每三个口舌都是缩进的(缩进量一样)。当回退到和已经已经关闭的块同样的缩进量时,就意味着目前块已经落成了(那么些不要忧郁,很多程序编辑器和合并开荒条件都知晓怎么样缩进语句块,能够帮忙用户轻便把握缩进)!!!

 一.贰 条件和标准语句

  逸事中的if语句将要闪亮上台啦~~~

  使用规范语句并非少写了冒号(:),而且必须是英文版本的。

  1. if语句

  对于if语句,若条件推断为真,那么前边的语句块就会被实践。若条件决断为假,语句块就会被跳过,不会施行。

1 #if语句
2 age = 20
3 if age >= 18:
4     print('your age is', age)
5     print('adult')

  2. else语句

  else子句只是扩张一种选用(之所以称为子句是因为它不是单身的语句,而是if的1某些)。if…else…搭配,若if语句为False,不实行if下的语句块,而去else下的语句块。

1 #if...else...语句
2 age = 3
3 if age >= 18:
4     print('your age is', age)
5     print('adult')
6 else:
7     print('your age is', age)
8     print('teenager')

  3. elif语句

  借使急需检查八个尺码,就足以应用elif,它是else
if的简写,也是if和else语句的同步利用,就算用elif做更密切的决断:

1 #if...elif...elif...else...语句
2 age = 3
3 if age >= 18:
4     print('adult')
5 elif age >= 6:
6     print('teenager')
7 else:
8     print('kid')

  四. 尺度语句总计

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

  5. 注意点

  if语句实践有性景况,它是从上往下剖断,尽管在有个别推断上是True,把该论断相应的言辞施行后,就忽略掉多余的elifelse语句,所以,请测试并分解为啥上面的先后打字与印刷的是teenager:

1 #条件语句执行特点:从上往下判断
2 age = 20
3 if age >= 6:
4     print('teenager')
5 elif age >= 18:
6     print('adult')
7 else:
8     print('kid')

  6. input()运用

  最终看二个有失常态的口径判定。诸多校友会用input()读取用户的输入,那样能够协和输入,程序运营得更风趣,更有人性化。其实啊,Error往往出现在不测的地点。不信,来看段代码:

#if语句中使用input()方法
birth = input('birth: ')
if birth < 2000:
    print('00前')
else:
    print('00后')

  输入19九三,结果报错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()

  为啥吧?小编在刚接触Python时,用到那里报错也是百思不得其解,同样纠结了旷日持久。直到后来,作者才渐渐懂了。

  关于input(),笔者在小说《Python基础——输出[print()]与输入[input()]》中已经讲得相比详细了。

  那是因为input()回去的数据类型是strstr不可能直接和整数相比较,必须先把str调换到整数。Python提供了int()函数来成功那件业务。

s = input('birth: ')
birth = int(s)
if birth < 2000:
    print('00前')
else:
    print('00后')

  因而,在编程中,条件判断是可怜首要的。条件判别能够让Computer本人做选拔,Python的if…elif…else很利索。条件判定从上向下相称,当满意条件时举办相应的块内语句,后续的elif和else都不再试行。

1.叁 条件运算符

  条件判别,if语句龙在判定并选用是还是不是推行,而并没有过多关系条件本人。

  下边是Python中广泛的原则运算符:

Python中的条件运算符
表达式 描述
x == y x 等于 y
x < y x 小于 y
x > y x 大于 y
x >= y x 大于等于 y
x <= y x 小于等于 y
x != y x 不等于 y
x is y x和y是同一个对象
x is not y x和y不是同一对象
x in y x是y容器的成员
x not in y x不是y容器的成员

  在Python中,相比较运算和赋值运算是能够延续的——多少个运算符能够连在一齐使用,例如: 0 < age <120。

  有个别运算符值得尤其关爱:

  壹、相等运算符

  若是想要知道多个内容是不是等于,你应有使用相当运算符,即多少个等号==。请务必记得是三个等号!!!单个等号只是赋值啊~~~

1 #相等运算符==
2 >>>"python" == "python"
3 True
4 >>>"Python" == "python"
5 False
6 >>>"python" = "python"
7   File "<stdin>", line 1
8 SyntaxError: can't assign to literal
9 #很明显,单个相等运算符是赋值运算符,是用来改变值的,而不能用来比较

  贰、is:同壹性运算符

  本条概念很不协和,什么是同一性?第贰遍接触真是云里雾里啊,真正领悟is运算符才知道同壹性的真理。

  乍1看,is运算符和==同样,事实上却分歧。

  示例代码如下:

 1 #同一性运算符:is
 2 #is和==之间的差异
 3 >>>x = y = [1,2,3]
 4 >>>z = [1,2,3]
 5 >>>x == y
 6 True
 7 >>>x == z
 8 True
 9 >>>x is y
10 True
11 >>>y is x
12 True
13 >>>x is z
14 False
15 >>>z is x
16 False

  注:==运算符相比较四个对象是或不是等于,is判断双方是或不是1致(同一个目的)。

  三、in:成员身份运算符

  四、布尔运算符:and、or和not

  伍、短路逻辑

  短路???条件表明式中的布尔运算符就有其一特性。什么是短路逻辑吗?如下所示:

  条件表明式:a and
b,该表明式什么时候回到True呢?即a与b同时为真,若a推断为False,则无论b是真是假,该表达式都为为False。

  事实上,纵然x为假,条件表明式会重返x的值,不然重回y的值。那种行为被称之为短路逻辑。而堵塞逻辑一样适用于or运算符。

>>> name='Gumby'

>>> salutation='Mr.'

>>> greeting='Hello.'

>>>print greeting,salutation,name

Hello. Mr. Gumby

  

如果在结尾处加上逗号,那么接下去的语句会与前一条语句在一如既往行打字与印刷:

print ‘Hello,’,
print ‘world!’

Hello, world!

5.1.2 把某件事作为另壹件事导入

>>> name='Gumby'>>> salutation='Mr.'>>> greeting='Hello.'>>>print greeting,salutation,nameHello. Mr. Gumby

  

假定在结尾处加上逗号,那么接下去的语句会与前一条语句在同样行打字与印刷:

print ‘Hello,’,
print ‘world!’

Hello, world!

伍.一.2 把某件事作为另壹件事导入

小结

  1.
等号运算符:==,单个等号=为赋值运算符;

  2. Python的准绳判别if…elif…else很灵巧;

  三. 口径剖断从上向下相称;

  肆. 堵塞逻辑适用于布尔运算符(and,or)。

从模块导入函数:

从模块导入函数:

import somemodule

from somemodule import somefunctian

from somemodule import somefunction,anotherfunction,yetanotherfunction

from somemodule import*

可以在讲话末尾扩张3个as子句,在该子句后交由名字,或为整个模块提供外号:

>>> import math as foobar

>>> foobar.sqrt(4)

2.0

  

import somemodule

from somemodule import somefunctian

from somemodule import somefunction,anotherfunction,yetanotherfunction

from somemodule import*

能够在讲话末尾扩充2个as子句,在该子句后提交名字,或为整个模块提供别称:

>>> import math as foobar>>> foobar.sqrt2.0

  

也足感到函数提供小名:

美高梅开户网址,也得以为函数提供外号:

>>> from math import sqrt as foobar

>>> foobar(4)

2.0

  

  

5.2赋值

>>> from math import sqrt as foobar>>> foobar2.0

  

  

5.2赋值

伍.二.一行列解包

伍.二.一系列解包

四个赋值操作能够而且打开:

三个赋值操作可以而且开始展览:

>>> x,y,z=1,2,3

>>> print x,y,z

1 2 3

>>> x,y=y,x

>>> print x,y,z

2 1 3

  

队列解包(sequence
unpacking)或可选代解包–将多少个值的队列解开,然后嵌入变量的系列中:

>>> values=1,2,3

>>> values

(1, 2, 3)

>>> x,y,z=values

>>> x

1

  

当函数也许措施再次回到元组(只怕其余连串或可迭代对象)时,那脾气子越发有用。固然需求获得(和删除)字典中随便的键-值对,能够行使popitem方法,这么些艺术将键-值作为元组再次回到。那么这些元组就足以间接赋值到四个变量中:

>>> x,y,z=1,2,3>>> print x,y,z1 2 3>>> x,y=y,x>>> print x,y,z2 1 3

  

队列解包(sequence
unpacking)或可选代解包–将八个值的行列解开,然后放到变量的队列中:

>>> values=1,2,3>>> values>>> x,y,z=values>>> x1

  

当函数或许措施重回元组(大概此外类别或可迭代对象)时,这么些特点越发有用。假若需求获得字典中专断的键-值对,能够行使popitem方法,那个艺术将键-值作为元组再次来到。那么这些元组就足以一直赋值到三个变量中:

>>> scoundrel={'name':'robin','girlfriend':'marion'}>>> key,value=scoundrel.popitem()>>> key'girlfriend'>>> value'marion'

  

 

它同意函数重返一个之上的值并且打包成元组,然后通过1个赋值语句很轻巧开始展览走访。所解包的行列中的成分数量必须和停放在赋值符号=右边的变量数量完全壹致,不然Python会在赋值时引发那么些:

>>> scoundrel={'name':'robin','girlfriend':'marion'}

>>> key,value=scoundrel.popitem()

>>> key

‘girlfriend’

>>> value

‘marion’

  

>>> x,y,z=1,2Traceback (most recent call last):File "<input>", line 1, in <module>ValueError: need more than 2 values to unpack

  

它同意函数重回3个上述的值并且打包成元组,然后经过五个赋值语句很容易进行访问。所解包的队列中的成分数量必须和停放在赋值符号=左边的变量数量完全壹致,不然Python会在赋值时引发那么些:

五.贰.二链式赋值

>>> x,y,z=1,2

Traceback (most recent call last):

File ““, line 1, in

ValueError: need more than 2 values to unpack

  

链式赋值(chained assignment)是将同1个值赋给三个变量的走后门。

伍.二.二链式赋值

x=y=somefunction()

链式赋值(chained assignment)是将同三个值赋给八个变量的近便的小路。

和下边语句的效劳是1律的:

x=y=somefunction()

y=somefunction()

和下边语句的成效是平等的:

x=y

y=somefunction()

瞩目下边包车型大巴说话和上面包车型客车语句不必然等价:

x=y

x=somefunction()

注意上面的语句和上面包车型地铁语句不自然等价:

y=somefunction()

x=somefunction()

伍.二.叁增量赋值

y=somefunction()

此地未有将赋值说明式写为x=x+1,而是将表明式运算符放置在赋值运算符的左手,写成x+=壹。那种写法叫做增量赋值(augmented
assignment),对于*、/、%等职业运算符都适用.

伍.二.叁增量赋值

>>> x=2>>> x+=1>>> x*=2>>> x6

  

五.3语句块:缩排的野趣

此处未有将赋值表明式写为x=x+1,而是将表明式运算符放置在赋值运算符的左手,写成x+=一。那种写法叫做增量赋值(augmented
assignment),对于*、/、%等专门的职业运算符都适用.

语句块是在条件为真时实施也许实施数十次的1组语句。在代码前停放空格来缩进语句就能够成立语句块。使用tab字符也得以缩进语句块。Python将二个tab字符解释为到下三个tab字符地点的位移,而3个tab字符地方为七个空格,可是正式且推荐的方法是只用空格,尤其是在种种缩进需求5个空格的时候。

>>> x=2

>>> x+=1

>>> x*=2

>>> x

6

  

伍.三语句块:缩排的童趣

五.4标准和规格语句

语句块是在基准为真(条件语句)时实行或然试行数11次(循环语句)的1组语句。在代码前放置空格来缩进语句就能够成立语句块。使用tab字符也能够缩进语句块。Python将多个tab字符解释为到下一个tab字符位置的运动,而3个tab字符地方为八个空格,不过正式且推荐的措施是只用空格,特别是在种种缩进必要陆个空格的时候。

伍.四.1那便是布尔变量的效力

伍.4规格和标准语句

上面包车型地铁值在作为布尔表明式的时候,会被解释器看作假(false}:

伍.4.一这就是布尔变量的效能

False None 0 ”” () [] {}

上边包车型地铁值在作为布尔表达式的时候,会被解释器看作假(false}:

换句话说,也便是行业内部值False和None、全数项目标数字0(包涵浮点型、长整型和任何体系)、空体系(举个例子空字符串、元组和列表)以及空的字典都为假。别的的百分之百都被批注为真,包蕴特殊值True.

False None 0 ”” () [] {}

5.肆.2 条件实践和if语句

换句话说,也等于正式值False和None、全体品种的数字0(包罗浮点型、长整型和任何门类)、空连串(举例空字符串、元组和列表)以及空的字典都为假。别的的整体都被解说为真,包罗出色值True.

if语句,它能够落成标准化试行。即只要条件
(在if和冒号之间的表达式)剖断为真,那么前面包车型的士语句块就会被执行。要是条件为假,语句块就不会被实施.

伍.四.2 条件实施和if语句

name=raw_input('what is your name?:')if name.endswith:print 'hello, Mr.jack'

  

5.4.3 else子句

name=raw_input('what is your name?:')if name.endswith:print 'hello, Mr.jack'else:print 'hello, stranger'

  

if语句,它能够完成标准实施。即只要条件
(在if和冒号之间的表明式)剖断为真,那么后边的语句块就会被实施。假如条件为假,语句块就不会被奉行.

5.4.4 elif子句

name=raw_input('what is your name?:')
if name.endswith('jack'):
print 'hello, Mr.jack'

  

5.4.3 else子句

name=raw_input('what is your name?:')
if name.endswith('jack'):
print 'hello, Mr.jack'
else:
print 'hello, stranger'

  

设若急需检查多个标准,就能够运用elif,它是“else
if的简写,也是if和else子句的一齐利用—-也正是颇具规范的else子句。

5.4.4 elif子句

num=input('enter a number:')if num>0:print 'the number is positive'elif num<0:print 'the number is negtive'else:print 'the number is zero'

  

如果供给检讨多个标准,就能够选拔elif,它是“else
if的简写,也是if和else子句的联手使用—-也正是富有标准的else子句。

五.四.5更扑朔迷离的标准

num=input('enter a number:')
if num>0:
print 'the number is positive'
elif num<0:
print 'the number is negtive'
else:
print 'the number is zero'

  

一.相比较运算符

伍.四.5更复杂的标准

美高梅开户网址 1

1.相比较运算符

二.相等运算符

美高梅开户网址 2

假定想要知道多少个东西是或不是等于,应该利用非凡运算符,即两个等号==

2.相等运算符

  1. is:同1性运算符

一经想要知道七个东西是或不是等于,应该使用卓殊运算符,即多少个等号==

>>> x=y=[1,2,3]>>> z=[1,2,3]>>> x==yTrue>>> x==zTrue>>> x is yTrue>>> x is zFalse

  

x和z相等却区别等,为什么吗?因为is运算符是决断同一性而不是相等性的。变量x和y都被绑定到同壹个列表上,而变量z被绑定在其余二个具备一样数值和顺序的列表上。它们的值只怕也正是,不过却不是同2个对象。

  1. is:同1性运算符

四.in:成员身价运算符

>>> x=y=[1,2,3]

>>> z=[1,2,3]

>>> x==y

True

>>> x==z

True

>>> x is y

True

>>> x is z

False

  

x和z相等却分歧样,为啥吧?因为is运算符是剖断同1性而不是相等性的。变量x和y都被绑定到同一个列表上,而变量z被绑定在其余二个颇具同样数值和各类的列表上。它们的值大概相当,可是却不是同一个目的。

5.字符串和系列相比

四.in:成员身份运算符

陆.布尔运算符

五.字符串和类别相比

5.4.7断言

6.布尔运算符

只要急需确认保障程序中的有个别条件一定为真才干让程序日常办事来讲,assert语句就有用了,它能够在先后中置入检查点。

5.4.7断言

>>> age=10>>> assert 0<age<100>>> age=-1>>> assert 0<age<100Traceback (most recent call last):File "<input>", line 1, in <module>AssertionError

  

美高梅开户网址 3

假若急需确定保障程序中的有些条件一定为真才能让程序平常办事以来,assert语句就有用了,它能够在先后中置入检查点。

>>> age=10

>>> assert 0<age<100

>>> age=-1

>>> assert 0<age<100

Traceback (most recent call last):

File "<input>", line 1, in <module>

AssertionError

  

美高梅开户网址 4

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图