• python初学--day1


    第一个PYTHON代码

    交互式编程它不需要创建脚本文件,是直接通过 Python 的解释器的交互模式进来编写代码。如下图所示(win7操作)

    下图为一个Python代码内部执行图,可以有助于理解python整个过程

     1 C:Usersmiao>python -V
     2 Python 2.7.10
     3 
     4 C:Usersmiao>python
     5 Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on wi
     6 n32
     7 Type "help", "copyright", "credits" or "license" for more information.
     8 >>> print 'Hello,World!'
     9 Hello,World!
    10 >>>exit()

    通过创建脚本文件,先编译一个文本文件,文件后缀名为.py (注:txt结尾的文件也是可以运行的,但是它在运行后不会生成pyc格式的文件,这样的话如果用户想调用这个程序就不能了)

    .pyc速度快,如果.py内容修改,则先执行.py.然后生成.pyc执行

    编写内容如下:

    1 #!/usr/bin python
    2 #-*- coding:utf-8 -*-
    3 
    4 print 'hello,world'
    5 print '你好,世界!'

    执行结果如下:

    1 E:软件pythonclass_testdays1>python hello.py
    2 hello,world
    3 你好,世界!

    python引导注释

    Python 中字符串可以使用单引号( ' ) ,双引号( " ),三引号('''  ''') 来表示,引号的开始与结束必须使用相同的类型。
    其中三引号也可以做为注释使用。

    1 #!/usr/bin python
    2 #-*- coding:utf-8 -*-
    3 
    4 print 'hello,world'
    5 print "hello,world"
    6 
    7 '''
    8 print '你好,世界!' 
    9 '''

    执行结果如下:

    1 E:软件pythonclass_testdays1>python hello.py
    2 hello,world
    3 hello,world

    从上面可以看出因为我们注释掉了"你好,世界!",所以程序在执行时,没有把它打印出来

    三个引号也可以做为换行使用,如下:

     1 >>> print '''
     2 ... a
     3 ... b
     4 ... c
     5 ... d
     6 ... '''
     7 
     8 a
     9 b
    10 c
    11 d
    12 
    13 >>>

    字节码

    三种编码类型:ASCII,UNICODE,UTF-8

    PYTHON3.0以前默认使用ASCII,如果里面含有汉字,我们在写代码时,可以在上面顶行写一个编码声明:

    # -*- coding:utf-8 -*-

    PYTHON3.0以后,默认使用UTF-8

    变量声明与赋值

    1 #!/usr/bin/env python
    2 # -*- coding: utf-8 -*-
    3  
    4 name = "alex"

    如下面这个例子:

     1 >>> name1='wupeiqi'
     2 >>> name2=name1
     3 >>> name1
     4 'wupeiqi'
     5 >>> name2
     6 'wupeiqi'
     7 >>> name1='123'
     8 >>> name1
     9 '123'
    10 >>> name2
    11 '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 python
    2 #-*- coding:utf-8 -*-
    3 
    4 name = raw_input("请输入用户名: ") 

    我们执行这个文件,看一下结果

    1 E:软件pythonclass_testdays1>python flow_control_1.py
    2 请输入你的名字: 你好

    模块调用

    import 

    看如下两个例子:

    例一:
    
    #!/usr/bin env python
    #-*- coding:utf-8 -*-
    
    import sys
    #捕获参数
    print sys.argv
    
    执行
    E:软件pythonclass_testdays1>python capture_parameter.py localhost:8001
    ['capture_parameter.py', 'localhost:8001']
    
    例二:
    #!/usr/bin python
    #-*- coding:utf-8 -*-
    
    import getpass
    pwd = getpass.getpass(">>>")
    print pwd
    
    执行
    E:软件pythonclass_testdays1>python capture_parameter.py
    >>>
    123
    
    E:软件pythonclass_testdays1>python capture_parameter.py
    >>>
    wo de mi ma

    流程控制

    用的两个判断语句:if ... else

                              if ... elif ....elif...else

    可以参考如下两个例子:

    例一:
    #!/usr/bin env python
    #-*- coding:utf-8 -*-
    
    if name == 'alex':  
        print '你猜对了'
    else:
        print '你输入的是啥啊?' 
    
    例二:
    #!/usr/bin env python
    #-*- coding:utf-8 -*-
    
    
    #if  else
    
    name = raw_input("请输入你的名字: ")
    if name == 'eric':
        print '普通'
    elif name == 'tony':
        print '超级'
    elif name == 'alex':
        print '超神'
    else:
        print '你输入错误'
    数据类型
    两部分:
        1.单值
                    数字 
                        整型: 如3714
                        长整型:特别大的一个整数
                    python自动来判断整型,长整型
                        浮点型:如3.14
                        复数:z = a + bj
                 布尔值:True,False
                字符串
     1 >>> name = 1314
     2 >>> print type(name)
     3 <type 'int'>   ===>整型
     4 >>> name = 1.314
     5 >>> print type(name)
     6 <type 'float'>  ===>浮点型
     7 >>> 1=2
     8   File "<stdin>", line 1
     9 SyntaxError: can't assign to literal
    10 >>> name1 =5
    11 >>> name2 = 6
    12 >>> name1 < name2
    13 True           ===>布尔值
    14 >>> name1 > name2
    15 False

        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 >>> print type(name)
    3 <type 'list'>    ===>列表

                 -----元组           

    4 >>> ages = (11,22,33)
    5 >>> print type(ages)
    6 <type 'tuple'>  ===>元祖

              -----字典、  哈希表

    每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。

    键必须独一无二,但值则不必。

    值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。

     1 #!/usr/bin/env python
     2 #-*- utf-8 -*-
     3 
     4 person = {'name':'alex','age': 18,'gender': 'erci'}  ---->字典里面一个元素  .每一个元素都是由一个键值对组成
     5 
     6 person['age'] = 20    ---》修改字典
     7 person['love'] = 'women'  ---》添加字典键值对
     8 del person['name']   ---》删除字典键值对
     9 
    10 print 'age is:',person['age']
    11 print 'love is:',person['love']
    12 print person  

     结果如下:

    1 E:软件pythonclass_testdays1>python dict.py
    2 age is: 20
    3 love is: women
    4 {'gender': 'erci', 'age': 20, 'love': 'women'}
    注:列表与元祖的区别
    1.元祖不可修改,列表可修改
    2.对于切片来说,元祖也是可以执行的
    3.元祖不可以增加,修改
    4.元祖是括号()表示,列表用中括号[]表示

    字符串格式化

    %s:字符串  %d:数字

    例子如下:

     1 name = 'i am %s' % 'alex'
     2 方式一:
     3 >>> name = 'i am %s,age %d' %('alex',63)
     4 >>> name
     5 '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的,<3
    11 'le'
    12 >>> name[0:] --> 表示到结尾
    13 'alex'
    14 >>> name[1:]
    15 'lex'
    16 >>> name[-1:] -->负1表示最后一个
    17 'x'

    查看一个字符串的长度:print len(name)

    注意:下标是从0开始

    去除空格 

    我们这里用到这个strip参数,直接看下面的例子:

     1 print name.strip() -->去掉两头空格 
     2 print name.lstrip() -->去掉左边空格 
     3 print name.rstrip() -->去掉右边空格 
     4 例如:
     5 >>> print name.strip()
     6 alex
     7 >>> print name.lstrip()
     8 alex
     9 >>> print name.rstrip()
    10    alex

    列表增加元素的方法

    定义:列表1     name_list1= ['alex','seven','eric']

    定义:列表2     name_list2 =name_list1

    1 >>> name_list1= ['alex','seven','eric']
    2 >>> name_list2 = name_list1
    3 >>> name_list1
    4 ['alex', 'seven', 'eric']
    5 >>> name_list1.append('miao')
    6 >>> name_list1
    7 ['alex', 'seven', 'eric', 'miao']
    8 >>> name_list2
    9 ['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 >>> name1
     7 ['zhong', 'guo']
     8 #把列表合并成字符串
     9 >>> name2 = '_'.join(name1)
    10 >>> name2
    11 'zhong_guo'
    几个小的注意点:
    str字符串:新加后重新开辟空间
    list列表:  修改后,引用地址不变
    tuple元祖: 不允许修改
    循环
    一、for ...in....
    1 #!/usr/bin/env python
    2 # -*- coding:utf-8 -*-
    3 
    4 name_list = ['alex', 'xiaoyueyue', 'wenqiang']
    5 for ele in name_list:
    6     print ele

    二、加if条件的循环

    1 #!/usr/bin/env python
    2 # -*- coding:utf-8 -*-
    3 
    4 name_list = ['alex', 'xiaoyueyue', 'wenqiang']
    5 for ele in name_list:
    6     if ele == "xiaoyueyue":
    7         print "find"

    三、如果我们要中断跳出整个循环,可以用break

    1 #!/usr/bin/env python
    2 # -*- coding:utf-8 -*-
    3 
    4 name_list = ['alex', 'xiaoyueyue', 'wenqiang']
    5 for ele in name_list:
    6     if ele == "xiaoyueyue":
    7         print "find"
    8         break

    四、如果我们要跳出当前条件的for循环,可以用continue

    1 name_list = ['alex','yue','xiang']
    2 for ele in name_list:
    3     if ele == 'qyue':
    4         print '找到你了'
    5         continue       --->如果第一个没有找到,重新开始执行找第二个
    6     if ele == 'alex':
    7         print '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:软件pythonclass_testdays1>python flow_control_1.py
     2 请输入你的名字: eric
     3 你输入的名字是: eric
     4 
     5 E:软件pythonclass_testdays1>python flow_control_1.py
     6 请输入你的名字: miao
     7 你输入的是啥啊?
     8 
     9 E:软件pythonclass_testdays1>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 python
     2 # -*- coding:utf-8 -*-
     3 
     4 
     5 file_obj = open('E:软件pythonclass_testdays1log.txt', 'r+')
     6 line_list = file_obj.readlines()  
     7 my_list =[]
     8 for ele in line_list:
     9     line = ele.strip()
    10     value_list = line.split(',')
    11     last_value = int(value_list[-1])
    12     last_value += 1
    13     value_list[-1] = str(last_value)
    14     value_str = ','.join(value_list)
    15     my_list.append(value_str)
    16 my_str = '
    '.join(my_list)
    17 file_obj.seek(0)
    18 file_obj.write(my_str)
    19 #file_obj.flush()
    20 file_obj.close()
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 
     5 file_obj = file('E:软件pythonclass_testdays1log.txt', 'r')
     6 
     7 #print file_obj.readlines(),#将文件内容赋值给变量line_list
     8 line_list = file_obj.readlines()  
     9 #新建一个列表,用来存放转换后结果
    10 my_list =[]
    11 
    12 for ele in line_list:
    13     # 把line_list中的值去掉空格,然后赋给变量line
    14     line = ele.strip()
    15     #对line里面的内容,通过,分割成列表    
    16     value_list = line.split(',')
    17     #对列表value_list切片取最后值,为了确保无误,我们对取值后的结果转换成整型    
    18     last_value = int(value_list[-1])
    19     #按照要求加1    
    20     last_value += 1
    21     #把加1后的列表last_value内容重新软件成字符串    
    22     value_list[-1] = str(last_value)
    23     #我们通过合并参数join,用,把字符串转换成列表,并赋给变量value_str    
    24     value_str = ','.join(value_list)
    25     #因为我们有好多行内容,所以把每次转换后的结果追加存入列表my_list中,方便直接调用    
    26     my_list.append(value_str)
    27 #因为我们原来文件中的内容一行一条信息,所以我们新加入的信息加入换行符,并赋给变量my_str
    28 my_str = '
    '.join(my_list)
    29 #把最后更新的结果写入文件中
    30 file_obj.write(my_str)
    31 #清空缓存
    32 file_obj.flush()
    33 #关闭文件
    34 file_obj.close()
    35 
    36 
    37 
    38     
    View Code
     
          
  • 相关阅读:
    ASP.Net Cms
    GetHashCode函数所存在的陷阱
    NH的系统架构
    Icomparable<T> 和 Icomparaer<T> 实现顺序关系
    《创业法典》:用流程图告诉你如何创业
    创业之前,网站先行
    杨卫华:新浪微博的架构发展历程
    技术开发人员为什么会无奈苦逼?
    使用面向对象的、完整的单点登录功能
    SilverLight之我见
  • 原文地址:https://www.cnblogs.com/miaoxg/p/4912105.html
Copyright © 2020-2023  润新知