Python:基础知识(一)


输入

input():接收命令行下输入

1)在py2下:如果你输的是一串文字,要用引号''或者""引起来,如果是数字则不用。

2)在py3下:相当于py2的raw_input(),得到的都是字符串,而非数值

 


 

if语法

 if 条件:

       选择执行的语句

elif 条件:

       选择执行的语句

else:

       选择执行的语句

 

特别说明:条件后面的冒号不能少,同样必须是英文字符。

特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格。python用这种方法替代了其他很多编程语言中的{}。你也可以选择1/2/3...个空格或者按一下tab键,但必须整个文件中都统一起来。千万不可以tab和空格混用,不然就会出现各种莫名其妙的错误。所以建议都直接用4个空格。

以缩进代替{},第一个缩进 为{,第一个不缩进为}

例:

   thisIsLove = input()
   if thisIsLove:
       print "再转身就该勇敢留下来"

 

break:跳出循环

continue:进入下次循环


while语法

while 条件:

  选择执行的语句

 

注意:循环体内的语句,缩进相同。if也是如此。

break:跳出循环

continue:进入下次循环


 

for循环语法

  for  变量   in  序列  :

    循环执行体

  for i in range(1, 101):

       print i

  for ... in ...   #for循环的本质是对一个序列中的元素进行递归

  for i in range(a, b)  #从a循环至b-1

  for count in range(0,n)  #循环n次

  range(1, 101)表示从1开始,到101为止(不包括101),取其中所有的整数

 

示例 :

如果想让这5个*在同一行,python2的话就在print语句后面加上逗号

for i in range(0, 5):

   print '*',

python3需要加上end参数:

for i in range(0, 5):

   print('*', end=' ')

 示例:

第二个print的缩进和内层的for是一样的,这表明它是外层for循环中的语句,每次i的循环中,它会执行一次。

print()没有写任何参数,是起到换行的作用

 


 模块

通过函数,可以在程序里重用代码;通过模块,则可以重用别的程序中的代码。

模块可以理解为是一个包含了函数和变量的py文件。在你的程序中引入了某个模块,就可以使用其中的函数和变量。

1、import  模块名       

import random:import语句告诉python,我们要用random模块中的内容。然后便可以使用random中的方法(调用方式“模块名.方法名”),比如:

random.randint(1, 10)

random.choice([1, 3, 5])

想知道random有哪些函数和变量,可以用dir()方法:dir(random)

2、 from 模块名 import 方法或变量名

from 模块名 import 方法或变量名  as 方法或变量别名

场景:如果只是用到模块中的一个函数或变量时

调用方式:方法名(或变量名),不需要加模块名。

例:

1)from math import pi

   print(pi)

2)from math import pi as math_pi

      print(math_pi)

 

random

 from 模块名 import 方法名

  from random import randint

  randint产生随机数:

    randint(5, 10)将会产生一个5到10之间(包括5和10)的随机整数


 

变量

  变量命名规则:

    1、必须以字母下划线(_)开头其余部分可以是字母、下划线(_)或数字(0-9)

    2、大小写敏感

判断变量的数据类型的两种方法

一、Python中的数据类型有数字、字符串,列表、元组、字典、集合等。有两种方法判断一个变量的数据类型

1、isinstance(变量名,类型)

 

2、通过与其他已知类型的常量进行对比:type()


 

转义符\,三个引号(''')

 

\的用途:1)转义,2)在源码换行(在代码中换行,而不影响输出的结果)

在源码中换行,比如:

"this is the\

same line"

这个字符串仍然只有一行,和"this is thesame line"是一样的,只是在代码中换了行。当你要写一行很长的代码时,这个会派上用场(只是在源码中换行,实际数据不换行)。

 

三个引号(''')或者("""):在三个引号中,可以方便地使用单引号和双引号(不需要转义符\),并且可以直接换行(实际数据中换行)

'''

"What's your name?" I asked.

"I'm Han Meimei."

'''


 

字符串格式化

 

1、str():将数字转化为字符串

num = 18

print ('My age is' + num)

2、%:对字符串进行格式化

1)%d:替换整数,%dw会被%后面的整数替换

num=19

2)%f:替换小数,%.2f会保留2位小数

3)%s:替换字符串

 

 4)使用tuple元组替换多个。

 

 


 

类型转换

int(x) #把x转换成整数

float(x) #把x转换成浮点数

str(x) #把x转换成字符串

bool(x) #把x转换成bool值

 

在python中,其他类型转成 bool 类型时,以下值会被认为是False:

   为0的数字,包括0,0.0

   空字符串,包括'',""

   表示空值的None

   空集合,包括(),[],{}

其他的值都认为是True

None是python中的一个特殊值,表示什么都没有,它和0、空字符、False、空集合都不一样。

在if、while等条件判断语句里,判断条件会自动进行一次bool的转换。比如

   a = '123'

   if a:

       print 'this is not a blank string'

这在编程中是很常见的一种写法。效果等同于

if bool(a)      或者     if a != ''


函数

关键字def,格式如下:

def sayHello():

   print 'hello world!'

 

return是函数的结束语句,return后面的值被作为这个函数的返回值。函数中任何地方的return被执行到的时候,这个函数就会结束。

 

函数参数默认值

def hello(name = 'world'):

   print 'hello ' + name

以上函数,name 参数可忽略

 

函数的参数传递

def func(arg1, arg2):

  print arg1, arg2

1、按参数位置匹配。如:func(3, 7)

2、指定形参的名称。如:func(arg2=3, arg1=7)

3、如果参数有默认值,则可只传部分参数,按位置匹配(在前)和按参数名匹配可以结合使用。如:

def func(arg1=1, arg2=2, arg3=3):

  print arg1, arg2, arg3

调用:

func(2, 3, 4)

func(5, 6)

func(arg2=8)

func(arg3=9, arg1=10)

func(11, arg3=12)

4、任意数量的参数 def func(*args),把参数作为 tuple 传入函数内部。如:

def calcSum(*args):

  sum = 0

  for i in args:

    sum += i

  print sum

调用:

calcSum(1,2,3)

calcSum(123,456)

calcSum() 

输出:

6

579

0

  在变量前加上星号前缀(*),调用时的参数会存储在一个 tuple(元组)对象中,赋值给形参。在函数内部,需要对参数进行处理时,只要对这个 tuple 类型的形参(这里是 args)进行操作就可以了。因此,函数在定义时并不需要指明参数个数,就可以处理任意参数个数的情况。需要注意,tuple 是有序的,所以 args 中元素的顺序受到赋值时的影响。

5、func(**kargs) 把参数以键值对字典的形式传入。如:

 

def printAll(**kargs):

  for k in kargs:

    print k, ':', kargs[k]

 调用:

printAll(a=1, b=2, c=3)

printAll(x=4, y=5)

输出:

a : 1

c : 3

b : 2

y : 5

x : 4

  字典是无序的,所以在输出的时候,并不一定按照提供参数的顺序。同样在调用时,参数的顺序无所谓,只要对应合适的形参名就可以了。于是,采用这种参数传递的方法,可以不受参数数量、位置的限制。

6、参数调用方式混合使用。例:

def func(x, y=5, *a, **b):

  print x, y, a, b

 

在混合使用时,首先要注意函数的写法,必须遵守先后顺序:无默认值形参,默认值形参,元组形参,字典形参。

带有默认值的形参(arg=)须在无默认值的形参(arg)之后;元组参数(*args)须在带有默认值的形参(arg=)之后;字典参数(**kargs)须在元组参数(*args)之后。可以省略某种类型的参数,但仍需保证此顺序规则。

 

调用时也需要遵守先后顺序 :不指定参数名,指定参数名。

指定参数名称的参数要在无指定参数名称的参数之后;不可以重复传递,即按顺序提供某参数之后,又指定名称传递。

 

在函数被调用时,参数的传递过程为:不指定参数名匹配,指定参数名匹配,多余的不指定参数名为元组参数,多余的指定参数名为字典参数。

1.按顺序把无指定参数的实参赋值给形参;

2.把指定参数名称(arg=v)的实参赋值给对应的形参(非元组、非字典);

3.将多余的无指定参数的实参打包成一个 tuple 传递给元组参数(*args);

4.将多余的指定参数名的实参打包成一个 dict 传递给字典参数(**kargs)。

示例:

def func(x, y=5, *a, **b):

print x, y, a, b

调用:

func(1)

func(1,2)

func(1,2,3)

func(1,2,3,4)

func(x=1)

func(x=1,y=1)

func(x=1,y=1,a=1)

func(x=1,y=1,a=1,b=1) --a=1是字典参数

func(1,y=1)

func(1,2,3,4,a=1)

func(1,2,3,4,k=1,t=2,o=3) 

输出:

1 5 () {}

1 2 () {}

1 2 (3,) {}

1 2 (3, 4) {}

1 5 () {}

1 1 () {}

1 1 () {'a': 1}

1 1 () {'a': 1, 'b': 1}

1 1 () {}

1 2 (3, 4) {'a': 1}

1 2 (3, 4) {'k': 1, 't': 2, 'o': 3}

 


列表list

list是以[]包围、逗号分隔的一组数据,数据之间的类型可以不同。

l = [1, 1, 2, 3, 5, 8, 13]

l = [365, 'everyday', 0.618, True]

列表以for遍历 for i in l:

range(1,10)在py2中产生一个list;在py3中返回一个可以循环遍历的range对象,可以通过list()函数转换成列表。

1、以索引访问,从0开始

print(I[0])

I[0]='a'

1)如果索引为负数,则表示从后往前倒数:

l[-1]表示l中的最后一个元素。

l[-3]表示倒数第3个元素。

2)切片操作符,以:分隔的一对数字

冒号前的数字表示开始位置(从0开始),冒号后的数字表示 结束位置。[起始位置:结束位置),即包含起始位置,不包含结束位置

l = [365, 'everyday', 0.618, True]

l[1:3]得到的结果是['everyday', 0.618]

如果不指定第一个数,切片就从列表第一个元素开始。

如果不指定第二个数,就一直到最后一个元素结束。

都不指定,则返回整个列表的一个拷贝。

l[:3]

l[1:]

l[:]

切片中的数字可以为负数。

l[1:-1]  得到['everyday', 0.618]

 

2、向list添加元素:append()方法

I.append('xx')

3、删除list中的元素:del命令

del I[2]


list与字符串

 

字符串分隔成list: split()

split默认是按照空白字符(包括空格、换行符\n、制表符\t)进行分割,得到一个list。另外可以揎分割符。

 

list连接成字符串:join()

join()是连接符的方法,参数是list

s = ';'

li = ['apple', 'pear', 'orange']

fruit = s.join(li)

print(fruit)

得到结果'apple;pear;orange'。

 ';'.join(['apple', 'pear', 'orange'])

 


 

 字符串的遍历与访问,与list类似

 遍历

通过for...in可以遍历字符串中的每一个字符。

word = 'helloworld'

for c in word:

   print c

 索引访问

通过[]加索引的方式,访问字符串中的某个字符。

print word[0]

print word[-2]

 切片

通过两个参数,截取一段子串,具体规则和list相同。

print word[5:7]

print word[:-5]

print word[:]

连接字符

join方法也可以对字符串使用,作用就是用连接符把字符串中的每个字符重新连接成一个新字符串。

newword = ','.join(word)


 字典

基本格式是(key是键,value是值):

d = {key1 : value1, key2 : value2 }

键要注意的是:

1.键必须是唯一的;

2.键只能是简单对象,比如字符串、整数、浮点数、bool值。lis就不能作为键,但是可以作为值。

访问规则:

1、python字典中的键/值对没有顺序,无法用索引访问字典中的某一项,而是要用键来访问。

  d[key] 

  d.get(key)

      字典类的get方法是按照给定key寻找对应项,如果不存在这样的key,就返回空值None。

2、通过for...in遍历(遍历的变量中存储的是字典的键):

for name in score:

   print score[name]

例:

score = {

   '萧峰': 95,

   '段誉': 97,

   '虚竹': 89

}

改变某一项的值:score['虚竹'] = 91

增加一项(给一个新键赋值):score['慕容复'] = 88

删除一项:del score['萧峰']

新建一个空的字典:d = {}


 元组

元组(tuple)也是一种序列,和list类似,只是元组中的元素在创建之后就不能被修改。

如:

postion = (1, 2)

geeks = ('Sheldon', 'Leonard', 'Rajesh', 'Howard')

都是元组的实例。它有和list同样的索引、切片、遍历等操作

例:

def get_pos(n):

    return (n/2, n*2)

得到这个函数的返回值有两种形式,一种是根据返回值元组中元素的个数提供变量:

x, y = get_pos(50)

print x

print y

还有一种方法是用一个变量记录返回的元组:

pos = get_pos(50)

print pos[0]

print pos[1]

 


 

异常处理 try ... except ...

try:

   f = file('non-exist.txt')

   print 'File opened!'

   f.close()

except:

   print 'File not exists.'


 

文件操作

打开文件:f = open('data.txt')

open('文件名')

文件名可以用文件的完整路径,也可以是相对(代码的)路径。

python默认是以只读模式打开文件。如果想要写入内容,在打开文件的时候需要指定打开模式为写入f = open('output.txt', 'w')

  • 'w'就是writing,以这种模式打开文件,原来文件中的内容会被你新写入的内容覆盖掉,如果文件不存在,会自动创建文件。
  • 不加参数时,open为你默认为'r',reading,只读模式,文件必须存在,否则引发异常。
  • 还有一种模式是'a',appending。它也是一种写入模式,但你写入的内容不会覆盖之前的内容,而是添加到文件中。

注:py2里可以使用 open 或 file 方法打开文件,py3 只能使用 open

读取文件:data = f.read() 

read() #把文件内所有内容读进一个字符串中

readline() #读取一行内容

readlines() #把内容按行读取至一个list中

写入文件:f.write('a string you want to write')

  必须以w或a模式打开文件,才能写入

关闭文件:f.close()


 

pass语句

 pass是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句。

实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*- 

# 输出 Python 的每个字母
for letter in 'Python':
   if letter == 'h':
      pass
      print '这是 pass 块'
   print '当前字母 :', letter

print "Good bye!"

以上实例执行结果:

当前字母 : P
当前字母 : y
当前字母 : t
这是 pass 
当前字母 : h
当前字母 : o
当前字母 : n
Good bye!

 

posted @ 2018-07-22 16:53  闲汉  阅读(1084)  评论(0编辑  收藏  举报