python基础

一、输入与输出

1、print打印

(1)打印字符串:%s

>>> name = "yisan"
>>> print ("hello %s,Nice to meet you!!"  %name)
hello yisan,Nice to meet you!!

(2)打印数字:%d

>>> age = 26
>>> print ("You are %d"  %age)
You are 26

(3)若不知道打印内容的类型:%r

>>> n = 100
>>> print ("You print is %r"  %n)
You print is 100
>>> name = "yisan"
>>> age = 26
>>> print ("student info : %s %d"  %(name,age))
student info : yisan 26

2、input输入

n = input("Enter any content:")
print ("your input is %r"  %n)

按F5快捷键运行程序,当运行到input()时,需要用户输入一些信息,用print打印出来(python2中使用:raw_input()代替input()):

Enter any content:tom
your input is 'tom'

3、引号与注释

(1)引号:
python中,不区分单引号(' ')与双引号(" "),都用来表示一个字符串:

>>> print("hello")
hello
>>> print('world')
world

单引号与双引号可以互相嵌套使用,但不能交叉使用:

>>> print("你说:'早上好'")
你说:'早上好'
>>> 
>>> print("你向我微笑'向我问好"。')
      
SyntaxError: invalid character in identifier

(2)注释:

>>> #单行注释
>>> print("hello world")#打印hello world
hello world
多行注释:用"""     """
"""
你好,
早上好
中午好
下午好
晚上好
"""

二、分支与循环

1、if 语句:

>>> a = 2
>>> b = 3
>>> if a > b:
    print("a max")
else:
    print("b max")

    
b max

python中的if语句通过“==”运算符判断相等,通过“!=”判断不相等:

>>> student = "yisan"
>>> if student == "yisan":
    print("yisan,You are on duty today.")
else:
    print("Please call yisan to duty.")

    
yisan,You are on duty today.

python中,用“in”和“not in”表示包含关系:

>>> hi = "Hello,World!!!"
>>> if "Hello" in hi:
    print("Contain")
else:
    print("Not Contain")

    
Contain

if语句可以进行布尔类型的判断:

>>> a = True
>>> if a:
    print("a is True")
else:
    print("a is not True")

    
a is True

demo:

results = 75
if results >=90:
    print("优秀")
elif results>=70:
    print("良好")
elif results>=60:
    print('及格')
else:
    ptiny('不及格')

2、for语句

>>> for i in "Hello,World!!!":
    print(i)

    
H
e
l
l
o
,
W
o
r
l
d
!
!
!
>>> fruits = ['banana','apple','mango']
>>> for fruit in fruits:
    print(fruit)

    
banana
apple
mango

range()函数默认从0开始循环:

>>> for i in range(5):
    print(i)

    
0
1
2
3
4

range()函数也可以设置起始位置和步长,如打印1到10之间的奇数:

>>> for i in range(1,10,2):
    print(i)

    
1
3
5
7
9

三、数组与字典

1、数组

数组用方括号([ ])表示,里面的每一项用逗号(,)隔开

>>> lists = [1,2,3,'a',4]
>>> lists
[1, 2, 3, 'a', 4]
>>> lists[0]
1
>>> lists[3]
'a'
>>> lists[4]
4
>>> lists[4]='b'
>>> lists[4]
'b'
>>> lists.append('c')
>>> lists
[1, 2, 3, 'a', 'b', 'c']

2、字典

字典用花括号({ })表示,里面的项成对出现,一个key对应一个value;key与value之间用(:)分隔;不同的项之间用逗号(,)分隔

>>> dicts = {"username":"yisan",'password':123456}
>>> dicts.keys()
dict_keys(['username', 'password'])
>>> dicts.values()
dict_values(['yisan', 123456])
>>> dicts.items()
dict_items([('username', 'yisan'), ('password', 123456)])
>>> for k,v in dicts.items():
    print("dicts keys is %r"  %k)
    print("dicts values is %r"  %v)

    
dicts keys is 'username'
dicts values is 'yisan'
dicts keys is 'password'
dicts values is 123456

注意:python字典中,key必须独一无二,value可以相同
keys()函数返回字典key的列表
values()函数返回字典中value的列表
items()函数将所有的字典项以列表的方式返回,这些列表中的每一项都包含key和value,但是项在返回时并不会按照他们在字典中的存放顺序。如果想按照存放的顺序输出,可通过下面的方式:

#通过zip方法合并两个List为Dictionary
#遍历会按原先的顺序
keys = ["b","a","c","e","d"]
values = ["2","1","3","5","4"]
for key,value in zip(keys,values):
    print(key,value)

输出结果:
=======RESTART: C:/Users/川/Desktop/test.py ========
b 2
a 1
c 3
e 5
d 4

四、函数、类和方法

1、函数

在python中,通过def关键字来定义函数:

>>> def add(a,b):
    print(a+b)

>>> add(3,5)
8
>>> def add(a,b):
    return a+b

>>> add(2,5)
7
>>> def add(a=1,b=2):
    return a+b

>>> add()
3
>>> add(3,5)
8

2、类和方法

python中,用class关键字来创建类

class A(object):   #python3中object可以不用声明
    def add(self,a,b):
        return a+b
count = A()
print(count.add(3,5))

输出结果:
============ RESTART: C:/Users/川/Desktop/test.py ============
8

上面创建了一个A类,在类下面创建了一个add()方法,方法的创建使用def关键字,方法的第一个参数必须是存在的,一般习惯命名为“self”,但是调用这个方法时,不需要为这个参数传值。

一般在创建类时会首先声明初始化方法init():

class A(object):
    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)
    def add(self):
        return self.a+self.b
count = A('4',5)
print(count.add())

输出结果:
============ RESTART: C:/Users/川/Desktop/test.py =============
9

当调用A类时,首先执行init()方法进行初始化,将输入的参数类型转化为int类型,用来保证程序的容错性。add()方法可以直接拿初始化方法init()的self.a和self.b两个数进行计算

2、继承

class A():
    def add(self,a,b):
        return a+b

class B(A):
    def sub(self,a,b):
        return a-b
print(B().add(4,5))
print(B().sub(5,4))

输出结果:
============RESTART: C:/Users/川/Desktop/test.py =============
9
1

B类继承了A类,所以B类 拥有了add()方法,从而B类可以直接调用add()方法

五、模块

1、引用模块

在python中,通过import...或from...import...的方式引用模块,例如:

import time
print(time.ctime())

输出结果:
===========RESTART: C:\Users\川\Desktop\test.py =============
Sat Jun 24 21:48:34 2017

或:

from time import ctime
print(ctime())

输出结果:
============RESTART: C:\Users\川\Desktop\test.py =============
Sat Jun 24 21:50:45 2017

又如:

from time import *
print(ctime())
print("休眠两秒")
sleep(2)
print(ctime())

输出结果:
============RESTART: C:\Users\川\Desktop\test.py ===========
Sat Jun 24 21:53:43 2017
休眠两秒
Sat Jun 24 21:53:45 2017

星号“*”表示模块下的所有方法

2、模块调用

python中,既可以调用系统模块,也可以调用自己创建的模块:
创建一个目录project,并在目录下创建两个文件:
project/
|----pub.py
|__count.py

在pub.py文件中创建add函数:

pub.py:

def add(a,b):
    return a+b

在count.py中调用pub.py文件中的函数add():

count.py:

from pub import add
print(add(4,5))

输出结果:
=============RESTART: D:\project\count.py =================
9

以上就实现了跨文件的函数调用。

3、跨目录模块调用(1)

如果调用文件与被调用文件在一个目录下面,则可以非常方便的调用。如果被调用的文件与调用文件不在同一个目录下呢?假设文件目录结构如下:
project/
|-----model/----pub.py
|
|_____count.py

count.py

from model.pub import add
print(add(4,5))

输出结果:
==============RESTART: D:\project\count.py =================
9

4、跨目录调用(2)

当项目变得复杂之后,需要涉及多个文件目录之间的调用,结构如下:

图片.png

count.py

class A():
    def add(self,a,b):
        return a+b

new_count.py

from count import A
class B(A):
    def sub(self,a,b):
        return a-b
result = B().add(2,5)
print(result)

输出结果:
============ RESTART: D:\project\model\new_count.py ============
7

test.py

from model import new_count
test = new_count.B()
test.add(2,5)

输出结果:
Traceback (most recent call last):
  File "D:\project\test.py", line 1, in <module>
    from model import new_count
  File "D:\project\model\new_count.py", line 1, in <module>
    from count import A
ImportError: No module named 'count'

执行test.py时,会报错,提示在new_count.py中找不到“count”模块,是因为:
站在new_count.py的位置,执行“from count import A”时,可以找到“count”文件,但是站在test.py的位置执行“from count import A”时,就找不到“count”文件了。
修改test.py文件如下:

import sys
sys.path.append("./model")  #将model目录添加到系统变量path下
from model import new_count
test = new_count.B()
test.add(2,5)

输出结果:
================RESTART: D:\project\test.py ==================
7

六、异常

1、认识异常

如下异常情况:

>>> open("abc.txt",'r')
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    open("abc.txt",'r')
FileNotFoundError: [Errno 2] No such file or directory: 'abc.txt'

提示:No such file or directory: 'abc.txt'(没有abc.txt这样的文件或目录),可以用python提供的try...except...语句来 接受并处理这个异常:

>>> try:
    open("abc.txt",'r')
    except FileNotFoundError:     
    print("异常了!")

输出结果:   
异常了!

又如:

try:
    print(aa)
except NameError:
    print("这是一个name异常!")

输出结果:
=============RESTART: C:\Users\川\Desktop\test.py =============
这是一个name异常!

在python中,所有的异常类型都继承Exception,所以可以使用它来接受所有类型的异常:

try:
    open("abc.txt",'r')
except Exception:
    print("异常了!!")

输出结果:
===========RESTART: C:\Users\川\Desktop\test.py ==============
异常了!!

从python2.5版本之后,所有异常类型都有了新的基类BaseException。Exception同样也继承自BaseException,所以我们也可以使用BaseException来接收所有类型的异常:

try:
    open("abc.txt",'r')
    print(123)
except BaseException:
    print("异常了!!!")

输出结果:
============ RESTART: C:\Users\川\Desktop\test.py =============
异常了!!!

对于上面的例子,打印异常时,我们并不知道到底哪一行代码起了异常,可以通过下面的方法让python直接告诉我们异常的原因:

try:
    open("abc.txt",'r')
    print(123)
except BaseException as msg:
    print(msg)

输出结果:
=========== RESTART: C:\Users\川\Desktop\test.py ==============
[Errno 2] No such file or directory: 'abc.txt'

我们在BaseException后面定义了msg变量来接收异常信息,并通过print将其打印出来。此处写法与python2有所不同,在python2中用逗号“,”代替“as”
python中常见的异常如下表所示:

| 异常 | 描述 |
|----------------------|------------------------------------------------------------- :|
|BaseException |新的所有异常类型的基类 |
|Exception |所有异常类型的基类,但继承BaseException类 |
|AssertionError |assert语句失败 |
|FileNotFoundError|试图打开一个不存在的文件或目录 |
|AttributeError |试图访问的对象没有属性 |
|OSError |当系统函数返回一个系统相关的错误,包括I/O故障,如找不到文件或磁盘已满时,引发此异常 |
|NameError |使用一个还未赋值对象的变量 |
|IndexError |当一个序列超出了范围 |
|SyntaxError |当解析器遇到一个语法错误时引发 |
|KeyboardInterrupt|Ctrl+C被按下,程序被强行终止 |
|TypeError |传入的对象类型与要求不符 |

2、更多异常用法

下面来学习异常的更多用法:try....except与else配合使用:

try:
    aa = "异常测试"
    print(aa)
except BaseException as msg:
    print(msg)
else:
    print("没有异常!")

输出结果:
============RESTART: C:\Users\川\Desktop\test.py ==============
异常测试
没有异常!

else语句只有在没有异常的情况下才会被执行,但是有些情况下,无论是否出现异常,操作都希望被执行,如文件的关闭、锁的释放、把数据库连接返还给连接池等操作 ,可以通过使用try...except...finally...语句来实现这样的需求:

try:
    print(aa)
except Exception as e:
    print(e)
finally:
    print("不管是否异常,我都会被执行。")

输出结果:
============ RESTART: C:\Users\川\Desktop\test.py =============
name 'aa' is not defined
不管是否异常,我都会被执行。

又如:

try:
    aa = "异常测试"
    print(aa)
except Exception as e:
    print(e)
finally:
    print("不管是否异常,我都会被执行。")

输出结果:
=============RESTART: C:\Users\川\Desktop\test.py ==============
异常测试
不管是否异常,我都会被执行。

3、抛出异常

print()方法只能打印错误信息,python中提供了raise方法来抛出一个异常信息:

from random import randint
#生成一个1到9之间的随机整数
number = randint(1,9)
if number %2 ==0:
    raise NameError("%d is even" %number)
else:
    raise NameError("%d is odd" %number)

输出结果:
============= RESTART: C:\Users\川\Desktop\test.py ============
Traceback (most recent call last):
  File "C:\Users\川\Desktop\test.py", line 5, in <module>
    raise NameError("%d is even" %number)
NameError: 6 is even

通过randinnt()方法随机生成1到9之间的整数,然后判断这个数字时奇数还是偶数,最后通过raise抛出NameError异常。(注:判断奇偶数与NameError之间没有任何关系,这里只是演示如何通过raise抛出各种类型的异常)

续:

1、全局变量global的用法

python 中使用 global 来设置全局变量,如下:

global a
a=1
def change():
  print(a)

也就是说,声明一个全局变量,首先要在方法外的地方声明一个变量,然后在方法内使用它的时候,先要对这个变量声明下 global , 然后再进行修改,否则会人会你声明的是一个方法内的局部变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入...
    小小不懂11阅读 3,411评论 2 30
  • 本教程基于Python 3,参考 A Byte of Python v1.92(for Python 3.0) 以...
    yuhuan121阅读 3,047评论 1 6
  • Python 基础教程 实例(Python 2.0+) 实例(Python 3.0+) Python 简介 Pyt...
    纵我不往矣阅读 64,725评论 0 23
  • @贰拾贰画生 感谢简明Python教程 输入输出 输入:raw_input string = raw_input(...
    贰拾贰画生阅读 2,628评论 4 21
  • 冬悄悄走进了南国, 四季不分的广东, 莫名地寒意侵袭。 昨日还是夏裙飞扬, 今日已是棉衣果腹! 这就是南国的冬。 ...
    木棉清雨阅读 140评论 0 0