第一个PYTHON代码
交互式编程它不需要创建脚本文件,是直接通过 Python 的解释器的交互模式进来编写代码。如下图所示(Win7操作)
下图为一个Python代码内部执行图,可以有助于理解python整个过程
1C:\Users\miao>python -V2Python 2.7.1034C:\Users\miao>python5Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32bit (Intel)] on wi6n327Type"help","copyright","credits"or"license"formore information.8>>>PRint'Hello,World!'9Hello,World!10>>>exit()
通过创建脚本文件,先编译一个文本文件,文件后缀名为.py (注:txt结尾的文件也是可以运行的,但是它在运行后不会生成pyc格式的文件,这样的话如果用户想调用这个程序就不能了)
.pyc速度快,如果.py内容修改,则先执行.py.然后生成.pyc执行
编写内容如下:
1#!/usr/bin python2#-*- coding:utf-8 -*-34print'hello,world'5print'你好,世界!'
执行结果如下:
1E:\软件\python\class_test\days1>python hello.py2hello,world3你好,世界!
python引导\注释
Python 中字符串可以使用单引号( ' ) ,双引号( " ),三引号(''' ''') 来表示,引号的开始与结束必须使用相同的类型。
其中三引号也可以做为注释使用。
1#!/usr/bin python2#-*- coding:utf-8 -*-34print'hello,world'5print"hello,world"67'''8print '你好,世界!'9'''
执行结果如下:
1E:\软件\python\class_test\days1>python hello.py2hello,world3hello,world
从上面可以看出因为我们注释掉了"你好,世界!",所以程序在执行时,没有把它打印出来
三个引号也可以做为换行使用,如下:
1>>>print'''2... a3... b4... c5... d6...'''78a9b10c11d1213>>>
字节码
三种编码类型:ASCII,UNICODE,UTF-8
PYTHON3.0以前默认使用ASCII,如果里面含有汉字,我们在写代码时,可以在上面顶行写一个编码声明:
# -*- coding:utf-8 -*-
PYTHON3.0以后,默认使用UTF-8
变量声明与赋值
1#!/usr/bin/env python2#-*- coding: utf-8 -*-34name ="alex"
如下面这个例子:
1>>> name1='wupeiqi'2>>> name2=name13>>>name14'wupeiqi'5>>>name26'wupeiqi'7>>> name1='123'8>>>name19'123'10>>>name211'wupeiqi'12>>>
变量name1,我们赋予它值'alex'后,它会在内存中开辟一块区域用来存储这个字符串,如果我把变量name2的值赋予name1,虽然它们的结果是一样的,其实它们应该在内存是两块区域,只是PYTHON对它们进行了一个优化,设了一个共享池,它会把同样的值,用的频率高的值放到一个小池子里,方便用户对它的调用.而不用每次读取磁盘.同时还可以加快响应速度
如果是集合的话,name是会跟着变的
C语言里面是没有字符串的,有字符
hello --五个字符组成
C语言中是由字符数组['h','e',...'o']
字符串特性:一旦修改,重新创建
'hello'+'sb'+'alex'
'hello'+
'hello'+'sb'+
'hello'+'sb'+'alex'
python有一个垃圾回收机制,python虚拟机,它会自动清理,我们不用关心
用户交互
这里用到一个参数:raw_input,我们来看下面的例子
1#!/usr/bin env python2#-*- coding:utf-8 -*-34name = raw_input("请输入用户名:")
我们执行这个文件,看一下结果
1E:\软件\python\class_test\days1>python flow_control_1.py2请输入你的名字: 你好
模块调用
import
看如下两个例子:
例一:#!/usr/bin env python#-*- coding:utf-8 -*-importsys#捕获参数printsys.argv
执行
E:\软件\python\class_test\days1>python capture_parameter.py localhost:8001['capture_parameter.py','localhost:8001']
例二:#!/usr/bin python#-*- coding:utf-8 -*-importgetpass
pwd= getpass.getpass(">>>")printpwd
执行
E:\软件\python\class_test\days1>python capture_parameter.py>>>
123E:\软件\python\class_test\days1>python capture_parameter.py>>>wo de mi ma
流程控制
用的两个判断语句:if ... else
if ... elif ....elif...else
可以参考如下两个例子:
例一:#!/usr/bin env python#-*- coding:utf-8 -*-ifname =='alex':print'你猜对了'else:print'你输入的是啥啊?'例二:#!/usr/bin env python#-*- coding:utf-8 -*-#if elsename= raw_input("请输入你的名字:")ifname =='eric':print'普通'elifname =='tony':print'超级'elifname =='alex':print'超神'else:print'你输入错误'
数据类型
两部分:
1.单值
数字
整型: 如3714
长整型:特别大的一个整数
python自动来判断整型,长整型
浮点型:如3.14
复数:z = a + bj
布尔值:True,False
字符串
1>>> name = 13142>>>printtype(name)3<type'int'> ===>整型4>>> name = 1.3145>>>printtype(name)6<type'float'> ===>浮点型7>>> 1=28File"<stdin>", line 19SyntaxError: can't assign to literal10>>> name1 =511>>> name2 = 612>>> name1 <name213True ===>布尔值14>>> name1 >name215False
2.集合
-----列表
name_list = ['alex','seven','eric']
或
name= list( ['alex','seven','eric'] )
例如:>>>name_list[0]'alex'>>> name_list[-1]'eric'
1 >>> name = ['wo','ai','ni']
2 >>> printtype(name)
3 <type 'list'> ===>列表
-----元组
4>>> ages = (11,22,33)5>>>printtype(ages)6<type'tuple'> ===>元祖
-----字典、 哈希表
每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。
键必须独一无二,但值则不必。
值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。
1#!/usr/bin/env python2#-*- utf-8 -*-34person = {'name':'alex','age': 18,'gender':'erci'} ---->字典里面一个元素 .每一个元素都是由一个键值对组成56person['age'] = 20 ---》修改字典7person['love'] ='women' ---》添加字典键值对8delperson['name'] ---》删除字典键值对910print'age is:',person['age']11print'love is:',person['love']12printperson
结果如下:
1E:\软件\python\class_test\days1>python dict.py2ageis: 203loveis: women4{'gender':'erci','age': 20,'love':'women'}
注:列表与元祖的区别
1.元祖不可修改,列表可修改
2.对于切片来说,元祖也是可以执行的
3.元祖不可以增加,修改
4.元祖是括号()表示,列表用中括号[]表示
字符串格式化
%s:字符串 %d:数字
例子如下:
1name ='i am %s'%'alex'2方式一:3>>> name ='i am %s,age %d'%('alex',63)4>>>name5'i am alex,age 63'6方式二:7>>> name ='i am %s,age %d'8>>> name %('alex',76)9'i am alex,age 76'10方式三:11>>> name ='i am {0},age{1}'12>>> name.format('alex',73)13'i am alex,age73'
方式一与方式二是一样的,方式一执行时实际调用的是方式三.
字符串是一个字符数组
索引(也叫下标)
我们先看一下这个例子:
1>>> name ='alex'2>>>name[0]3'a'4>>> name[1]5'l'6>>> name[2]7'e'8>>> name[3]9'x'10>>> name[1:3] --> 这个3是不包含3的,是小于3的,<311'le'12>>> name[0:] -->表示到结尾13'alex'14>>> name[1:]15'lex'16>>> name[-1:] -->负1表示最后一个17'x'
查看一个字符串的长度:print len(name)
注意:下标是从0开始
去除空格
我们这里用到这个strip参数,直接看下面的例子:
1printname.strip() -->去掉两头空格2printname.lstrip() -->去掉左边空格3printname.rstrip() -->去掉右边空格4例如:5>>>printname.strip()6alex7>>>printname.lstrip()8alex9>>>printname.rstrip()10alex
列表增加元素的方法
定义:列表1 name_list1= ['alex','seven','eric']
定义:列表2 name_list2 =name_list1
1>>> name_list1= ['alex','seven','eric']2>>> name_list2 =name_list13>>>name_list14['alex','seven','eric']5>>> name_list1.append('miao')6>>>name_list17['alex','seven','eric','miao']8>>>name_list29['alex','seven','eric','miao']
通过上面我们可以看到:列表是可以增加的,并且列表2会随着列表1的变化而变化.而字符串是和这个不同的
分割与合成
我们这里用一个参数split和join,例子如下:
1>>> name ='zhongsguo'2#把字符串分割成列表3>>> name.split('s')4['zhong','guo']5>>> name1 = name.split('s')6>>>name17['zhong','guo']8#把列表合并成字符串9>>> name2 ='_'.join(name1)10>>>name211'zhong_guo'
几个小的注意点:
str字符串:新加后重新开辟空间
list列表: 修改后,引用地址不变
tuple元祖: 不允许修改
循环
一、for ...in....
1#!/usr/bin/env python2#-*- coding:utf-8 -*-34name_list = ['alex','xiaoyueyue','wenqiang']5foreleinname_list:6printele
二、加if条件的循环
1#!/usr/bin/env python2#-*- coding:utf-8 -*-34name_list = ['alex','xiaoyueyue','wenqiang']5foreleinname_list:6ifele =="xiaoyueyue":7print"find"
三、如果我们要中断跳出整个循环,可以用break
1#!/usr/bin/env python2#-*- coding:utf-8 -*-34name_list = ['alex','xiaoyueyue','wenqiang']5foreleinname_list:6ifele =="xiaoyueyue":7print"find"8
break
四、如果我们要跳出当前条件的for循环,可以用continue
1name_list = ['alex','yue','xiang']2foreleinname_list:3ifele =='qyue':4print'找到你了'5continue--->如果第一个没有找到,重新开始执行找第二个6ifele =='alex':7print'sp'8
break
五、if...elif...else...嵌套循环
1 #!/usr/bin env python
2 #-*- coding:utf-8 -*-
3
4 name1 = 'alex'
5 name2 = 'eric'
6 test = raw_input("请输入你的名字: ")
7
8 if test ==name1:
9 print '你输入的名字是:',name1
10 elif test ==name2:
11 print '你输入的名字是:',name2
12 else:
13 print '你输入的是啥啊?'
结果如下:
1 E:\软件\python\class_test\days1>python flow_control_1.py
2请输入你的名字: eric
3你输入的名字是: eric
4
5 E:\软件\python\class_test\days1>python flow_control_1.py
6请输入你的名字: miao
7你输入的是啥啊?
8
9 E:\软件\python\class_test\days1>python flow_control_1.py
10请输入你的名字: alex
11 你输入的名字是: alex
基本的文件操作
文件里的写,读
步骤:找到文件:文件路径E:\
打开文件:file_obj = (文件路径,'w+'什么形式打开?)
open: open内部会调用file打开文件
文件操作,读写(会传回一个文件句柄)
file_obj.read() #会将所有的内容读入内存
file_obj.readlines() #会将所有的内容读入内存,并且一行一行给你列出.以行为元素的列表
for line in file_obj.xreadlines() #迭代器, 一行一行代入,这个是已经废掉的
for line in file_obj: #每次循环,只读一行,避免全部读入内存
file_obj.write() #会将内容全部写入文件
file_obj.writeline() #会逐行写入文件
file_obj.close() 文件关闭
例如下面这个例子:我们新建一个log.txt文件,要求里面的值全加1后,然后再更新写入文件
1#!/usr/bin/env python2#-*- coding:utf-8 -*-345file_obj = open('E:\软件\python\class_test\days1\log.txt','r+')6line_list =file_obj.readlines()7my_list =[]8foreleinline_list:9line =ele.strip()10value_list = line.split(',')11last_value = int(value_list[-1])12last_value += 113value_list[-1] =str(last_value)14value_str =','.join(value_list)15my_list.append(value_str)16my_str ='\n'.join(my_list)17file_obj.seek(0)18file_obj.write(my_str)19#file_obj.flush()20file_obj.close()
1#!/usr/bin/env python2#-*- coding:utf-8 -*-345file_obj = file('E:\软件\python\class_test\days1\log.txt','r')67#print file_obj.readlines(),#将文件内容赋值给变量line_list8line_list =file_obj.readlines()9#新建一个列表,用来存放转换后结果10my_list =[]1112foreleinline_list:13#把line_list中的值去掉空格,然后赋给变量line14line =ele.strip()15#对line里面的内容,通过,分割成列表16value_list = line.split(',')17#对列表value_list切片取最后值,为了确保无误,我们对取值后的结果转换成整型18last_value = int(value_list[-1])19#按照要求加120last_value += 121#把加1后的列表last_value内容重新软件成字符串22value_list[-1] =str(last_value)23#我们通过合并参数join,用,把字符串转换成列表,并赋给变量value_str24value_str =','.join(value_list)25#因为我们有好多行内容,所以把每次转换后的结果追加存入列表my_list中,方便直接调用26my_list.append(value_str)27#因为我们原来文件中的内容一行一条信息,所以我们新加入的信息加入换行符,并赋给变量my_str28my_str ='\n'.join(my_list)29#把最后更新的结果写入文件中30file_obj.write(my_str)31#清空缓存32file_obj.flush()33#关闭文件34file_obj.close()35363738
View Code