zoukankan      html  css  js  c++  java
  • 初识python

    python之路第一篇

    python入门

    1.第一个python代码:

    在Linux /home/py 目录下新建hello.py

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    print "Hello,World"
    

    执行代码:

     python hello.py
    

    2.捕获参数:

    捕获参数,并存入到 集合

    print sys.argv
    

    3.模块导入:

    import hello
    

    4.python编译:

    经过编译 成字节码文件 .pyc文件,反编译成 .py
    如果.pyc 和 .py 内容相同,则.pyc 优先级高,否则,先查找.py,再重新编译生成 .pyc 文件

    5.变量:

    声明变量:

    name = "Hello,World"
    

    变量命名规则:

    1)变量名只能以 数字、字母、下划线组成

    2)第一个字符只能为字母、下划线;不能为数字

    3)不要使用内置变量名

    name1 = "test1"
    name1 = name2
    

    修改 name1 = "123"

    name2 的值会跟着变吗?

    答案是:不变

    原因很简单:变量赋值时,会在内存中申请一块内存指针空间,将test1 赋值给 name1,相当于开辟了一块内存指针空间来存放 字符串test1,同时将 name2 = name1,相当于将 name2也同样指向这块内存指针空间,如果这个时候将字符串 “123”赋值给 name1,就相当于重新在内存中开辟一块内存指针来存储字符串 “123”,而name2 指针还是第原来的内存指针空间,所以name2的值并不会随着name1的改变而变化。

    字符串特性:一旦修改,重新创建

    以下是分配两块地址池的:

    id1 = 7
    id2 = 7
    

    id(id1),id(id2) 指针地址一样,同一块内存指针池(看起来一样,是内部进行优化的,相当于在内部循环了一遍,当循环了一遍之后,发现有一个id1也是这个地址,于是也将id2指向这个地址,实际上是开辟两块指针空间的)

    如果缓冲池过大,就会新开辟一块空间,缓冲池就会将多的扔掉

    id1 = 700
    id2 = 700 
    

    id(id1),id(id2) 指针地址不一样

    6.流程控制:

    user_name = raw_input("please enter Your name:")
    if user_name == "Allen":
        print "one!"
    elif user_name == "yyh":
        print "Two!"
    elif user_name == "ali":
        print "Three!"
    else:
        print "Invalid User!"
    

    7.数据类型,分为两部分:

    1)、单值

       a.数字 :
       	整型、长整型、浮点、复数
      -  
      
      b.布尔值:
       	真或假 、1 或 0
      -  
      
      c.字符串:
      	   “hello wolrd”
    

    2)、集合:
    列表、元组、字典、哈希表

    3)、字符串:

    万恶的字符串拼接:

    python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的
    空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
    

    a).字符串传值:
    字符串格式化:

       name = "I'm %s" % 'allen'
       name = "I'm %s, age: %d" % ('allen',25)
    
       其中%s,%d 是占位符,%s代表字符串,%d 代表数字 ,% 后面的值是实际传入的参数,用来替换%s,和%d的值
       
       name = "I'm {0},age:{1}"
       new_name = name.format('allen',25)
       print new_name
    

    b) 打印字符串:

       print 'name'   #使用单引号
       print "name"   #使用双引号
       print """      #使用三引号,打印多行
       I'm is allen,
       age is 25
       """
    

    c) 字符串切片:

       name = "allen"
       name[0]   #打印索引为0的值,输出值:a
       name[0:2] #打印索引从0 到 2 的值,不包括2(即<),输出值为:al
       name[-1]  #打印最后一个,输出值:n
       name[:-1] #打印索引从0开始至倒数第二个字符,不包括自己,输出值:alle
    

    d) 统计长度

       len(name) #统计字符串长度 
    

    e) 去除两边的字符

       name.strip()  #去除两边的空格
       name.lstrip()  #去除左边的空格
       name.rstrip()  #去除右边的空格
    

    f) 分割

       name = "allen,25,wonderful"
       name.split(',')
    

    8.列表:

    a) 创建列表:
    
    name_list = ['allen','yyh','ali','25']
    
    name_list = list(['allen','yyh','ali',25])
    
    b)  追加
    
    name_list.append('hello')
    
    c) 删除
    
     del name_list[0]
    
    d) john (列表变成字符串)
    
     "".join(name_list) 
    
    e) in (包含,判断元素是否在列表中)
    
     "allen" in name_list
    

    9.元组 (没有增删改),其他和列表一样

    ("allen","ali","yyh")
    

    总结:

    列表(list),字符串(str),元组(tuple)

    共同点:
    切片、索引、len() 、in

    不同点:
    str:重新开辟空间
    list:修改后,不变

    元组(tuple):
    不允许修改

    10.for 循环:

    name_list =  ['allen','yyh','ali','25']
    
    for item in name_list:
    
        if item == "yyh":
    
            print "diu diu ..."
    
            continue
    
        if item == "ali":
    
            print "welcome to here!"
    
            break   # 跳出循环
    

    11.while 循环:

    while 条件:
        print "ok ok ok"
    while True:  # 死循环
        print 'true'
    
    flag = True   #标记位
    while flag:
    
        print "ok ok ok"
        flag = False
    

    12.字典,键值对 (字典无序,特殊的for循环)

    person = {
        "name":"allen",
        "age":"25",
        "gender":"man",
    }
    
    #person['name']
    for k,v in person.items():  #字典无序
        print k,v 
    
    person.keys()  #所有key
    person.values() #所有value
    person.items()  #所有元素  
    

    13.运算符

    a) 算数运算:+ - * / % ** //
    b) 比较运算:==  !=  < >   >=  <=
    c) 赋值运算:=  +=  -=  *=  /=  %=  **/  //=
    d) 逻辑运算:and  or  not
    e) 成员运算:in  not in
    f) 身份运算:is  is not    
    g) 位运算:& | ^ ~  >> <<
    

    14.文件操作:

    file_list = open('filename.txt','r')
    
    or
    
    file_list = file('filename.txt','r')
    
    for line in file_list.read():
       print line  # 全量读
    
    for line in file_list.readlines():
        print line  # 读取所有行,(列表)
    
    for line in file_list.xreadlines():
        print line # 一行一行读(每次只读一行)
    

    需求:将用户每登陆一次,记录一次登陆次数(通过操作文件实现)

    log.txt文件内容格式如下:

    allen;123;1
    yyh;456;2

     # 需要在本地建立这个文件: login_count.txt  保存内容为: yyh;456;0 
     file_obj = file('login_count.txt','r+')
     line_list = file_obj.readlines
    
     my_list = []
     #my_list = ['allen;123;1','yyh';123;2]
     for ele in line_list:
        #"allen;123;1
    "
        line = ele.strip()
        #"allen;123;1"
        value_list = line.split(';')
        #["allen","123","1"]
        last_value = int(values_list[-1])
        #最后一个数,转换成整型
        last_value += 1
        #1 += 1 --> last_value +1
        value_list[-1] = str(last_value)
        #更新后的列表
        #["allen","123","2"]
        value_str = ';'.join(value_list)
        #"allen;123;2
        #"yyh;123;3"
        my_list.append(value_str) 
        #my_list = ["allen;123;2","yyh;123;3"]
     file_obj.seek(0)
     my_str = '
    '.join(my_list)
     file_obj.write(my_str)
     file_dbj.close()
    作者:杨英华
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    【题解】P2262 [HNOI2004]FTP服务器
    关于大模拟
    CodeForces 666E Forensic Examination
    Bzoj3233 [Ahoi2013]找硬币
    Bzoj4350 括号序列再战猪猪侠
    UOJ#31 【UR #2】猪猪侠再战括号序列
    UOJ#21 【UR #1】缩进优化
    51nod1667 概率好题
    [CodeChef
    51nod1245 Binomial Coefficients Revenge
  • 原文地址:https://www.cnblogs.com/yangyinghua/p/4984901.html
Copyright © 2011-2022 走看看