• 初识python(条件判断、循环控制、循环次数限制、常用数据类型、字符串格式化、列表常用操作、二进制运算、嵌套循环)


    第一天学习

    1、pycharm使用遇到的问题:

    如果想运行程序A,一定要右键去执行程序A,而不能直接左下角run,那样的话可能会出现运行之前其他程序

    pycharm小技巧:

    1、多行全选,shift+tab整体往前缩进一个tab

    2、多行全选,tab整体向后缩进一个tab

    3、多行全选,ctrl+/注释所选代码,再次按ctrl+/注释取消所选代码

    4、pycharm中切换3.5和2.7:file菜单-settings-project pycharmPreject--project interpreter选项,可以切换2.7和3.5版本

    参考:http://jingyan.baidu.com/article/fec4bce25f677df2618d8be8.html

    python2.7和3.5两个版本同时安装(windows),liniux下自带python(2.6需要升级到2.7)

    1、官网下载这2个版本

    2、分别安装到c盘的根目录下,去不同的名字,例如c:python2.7  c:python3.5

         安装3.5的时候,有个选择勾选后,就不用单独配置环境变量了,会自动加环境变量

    3、2.7版本安装完后,需要手动配置环境变量

         【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】

        如:原来的值;C:python27,切记前面有分号
    4、环境变量配置完毕后,在cmd下输入python进入的版本是2.7,输入python3进入的版本是3.5
    参考:http://jingyan.baidu.com/article/b87fe19e94ca95521935686e.html
     
    python2.7和3.5的语法主要区别
    3.5中
    1. 1 / 2 =0.5(2.7中 1/2=0)
    2.print(),必须加上小括号(2.7可以不加小括号,也可以加)
    3.raw_input没了,变成了input---这里输入的都是字符串,2.7中的input相当于3.5中的eval(input())
    4.class Foo:经典类没了,只能是新式类class Foo(object)
     
    变量起名:
    1.显式(通俗易懂)    只能字母,数字,下划线
    2.nums_of_alex_gf = 19 #下划线
    3.NumsOfAlexGf = 2   #驼峰
     
    变量命错误(注意):
    1  .names-of-alex-gf = 22   #错误- 减号
    2.5name = 数字不能开头,
    3.!name 特殊字符不能有 上一排
    4.name of teacher = 不能有空格
    5.关键字声明变量名 ['and','class'......]
     

    输入(把用户输入的东西存入内存)

    输入 3.5写法是input  2.7是raw_input(2.7的input,输入的字符串必须是字符串,"sun"才行,输入sun不行
    # 但是raw_input是可以输入jack)
    # 3.5的input相当于2.7的 raw_input()

    流程控制(if-elsewhileforreakcontinue)
    需求:猜数lucky num  num=6 ,猜的数字比6大,打印猜的数太大,猜的数字比6小,打印猜的数太小,
    # 三次输入错误,锁定,要求用for来实现
    num = 6

    for i in range(3):
    s = int(input('请输入数字:'))#必须放入循环里面才能实现多次
    if s > num:
    print('太大了')
    elif s < num:
    print('太小了')
    else:
    print('猜对了')
    break#跳出整个循环
    else:#上面的循环正常执行完毕,else才会执行,如果是不正常退出(break),else不会执行
    print('3次输入错误,锁定')

    continnue和break的区别:

    1、break是跳出整个循环,跳出后,while或者for后面的else也不会执行

    2、continue不是跳出整个循环,而是只是跳出当前这次循环(也叫当前迭代),回到循环条件判断处,继续下次循环

    #简单的嵌套循环(两层或者多层循环)
    # for j in range(2):
    #     for i in range(10):
    #         if i<5:
    #             continue  #跳出本次迭代,继续下一次迭代
    #         if j>1:
    #             break  #跳出整个循环
    #         print i

    #如何实现一次跳出多层循环(尤其是多层都是死循环的情况),break一次只能跳出一层循环

    loop1 = 0
    loop2 = 0
    while True:
        loop1 += 1
        print "loop1:",loop1
        break_flag = False  #设置一个跳出flag,用于控制外循环跳出
        while True:
            loop2 += 1
            if loop2 == 5:
                break_flag = True  #跳出内循环前,先把跳出flag置为True
                break   #跳出内循环(第一层),但是外循环还是在循环
            print "loop2:",loop2
        if break_flag:   #外循环跳出的条件具备了 注意这里的if必须和内循环的while同级,而不能在内循环代码块中
            print "内循环跳出了,外循环也该跳出了"
            break   #跳出外循环 

    循环小结:

    #输入正确跳出整个循环的的方式:

        # 1 break

        # 2 flag

    #指定3次数锁定的方式

        # 1 while count<3 count=0 count += 1   else:

      # 2 for i in range(2)  else:

    字符串

    字符串格式化

    #1字符串格式化--推荐下面这个(不推荐加号拼接,浪费内存)   %s字符串  %d数字(%s也能表示字符串) %f浮点数
    name = raw_input("name:").strip()  #strip()去掉两边的空格  参数默认是去空格  strip("A") 去掉两边的"A"
    age  = raw_input("age:").strip()
    job = raw_input("job:").strip()
    msg = """
    information of %s:
        name:%s
        age:%s
        job:%s
    """  % (name,name,age,job)  #这里是4个参数,两个name
    print msg
    # 输出
    # information of jack:
    #     name:jack
    #     age:15
    #     job:it

    字符串拆分

    name_str = "jack_tom_bob"
    print  name_str.split("_")  #['jack', 'tom', 'bob'] (字符串变列表,对字符串进行切片)

    列表

    #列表的作用是为了在一个变量中存储多个信息

    #1列表和字符串、元组间的互相转换

    name_str = "jack_tom_bob"

    print  name_str.split("_")  #['jack', 'tom', 'bob'] (字符串变列表)

    name_list = ["jack","18","jack","tom","jack","18"]  #创建列表

    print tuple(name_list)  #('jack', '18', 'jack', 'tom', 'jack', '18')  #列表转换成元组

    str1 = "_".join(name_list)   #jack_18_jack_jack_18(列表变字符串)

    print str1

    print dir(name_list)  #输出列表中包含的内置方法,主要关注不是2个下划线开头的 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__',  '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__',  '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__',  '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__',    '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__',  

    'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    #列表切片:

    name_list = ['jack','18','sex','nan','ff','ee','cc']
    print(name_list[:3])
    print(name_list[1:4])
    print(name_list[:-1])
    print(name_list[:6:2])
    print(name_list[:])

    name_list = ['jack','18','sex','18']
    name_list1 = ['ff','ee','cc']

    name_list.append('cc')

    print (name_list = ['jack','18','sex','nan','cc']) #增加元素到列表,最后一位
    print(name_list.count('18'))   #18在列表中次数    2次

    name_list.extend(name_list1)
    print(name_list) #['jack','18','sex','18','ff','ee','cc'] 将列表name_list1 合并到nam_list里面

    print(name_list.index('sex')) #列表中元素的索引 2

    name_list1 = ['ff','ee','cc']
    name_list1.insert(1,'cc')
    print(name_list1) # 在索引是1的地方插入一个元素['ff', 'cc', 'ee', 'cc']
    name_list1.pop()       #删除最后一个元素 ['ff', 'ee']  
    name_list1.remove('ff')      #删除"ff"这个元素  ['ee', 'cc']
    name_list1.reverse()         #列表元素进行反转   ['cc', 'ee', 'ff']
    name_list1.sort()           #按照asci顺序排序列表的所有元素  ['cc', 'ee', 'ff']


    #需求:如何删除一个拥有比如400w个元素的列表中的指的元素,例如:"jack"        参考  http://www.cnblogs.com/wangtp/articles/5079839.html

    for i in range(name_list.count("jack")):

    # 思路:先计算列表中想要删除的字符串"jack"一共是多少个count,如果是3个, 那么遍历列表的时候,删除remove3次"jack"即可    

      name_list.remove("jack")

    print name_list

    name_list = ["jack","18","jack","jack","18"]

    for i in range(3):    

      name_list.remove("jack")

    print name_list

    
    

    元组

    
    

    #元组和列表的区别:元组是只读的,不能修改

    
    

    tuple_name = (1,3)  #创建元组

    
    

    print dir(tuple_name)  #显示元组的内置方法

    
    

    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__',  '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',  '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',  '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',  'count', 'index']

    
    

    print list(tuple_name)  #[1, 3]  元组转换成列表

     
    
    

    位运算

    
    

    # a = 60            # 60 = 0011 1100
    # b = 13            # 13 = 0000 1101
    # c = 0
    # c = a & b;        # 12 = 0000 1100   位与"&" 2个都是真1,结果才是真1
    # print "Line 1 - Value of c is ", c

    # c = a | b;        # 61 = 0011 1101    或"|"只有一个是真1,结果就是真1
    # print "Line 2 - Value of c is ", c

    # c = a ^ b;        # 49 = 0011 0001     异或"^" 只有一真1一假0,结果就是真1
    # print "Line 3 - Value of c is ", c

    # c = ~a;           # -61 = 1100 0011    #相当于1取反是0,,0取反是1
    # print "Line 4 - Value of c is ", c

    # c = a << 2;       # 240 = 1111 0000  #左移2位
    # print "Line 5 - Value of c is ", c

    # c = a >> 2;       # 15 = 0000 1111   #右移两位
    # print "Line 6 - Value of c is ", c

    文件操作(写、读、追加、光标移动)

    打开文件:# #   

    file_obj = file("文件路径","模式") #      

    obj = open("文件路径","模式") # #

    打开文件的模式有:# #

    r,以只读方式打开文件 # 

    w,打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 # 

    a,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。 #      也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 # 

    w+,打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 # #

    读取文件的内容: # #

    一次性加载所有内容到内存 # obj.read() # # #

    一次性加载所有内容到内存,并根据行分割成字符串,每个行字符串作为列表的一个元素 # obj.readlines() # # #

    每次仅读取一行数据,遍历文件的每行 # for line in obj:# #   print line # # 写文件的内容: # obj.write('内容')

    关闭文件句柄:# #

    obj.close() # obj = open("log","w")   #

    写的模式新建一个文件对象

    obj.write("first ")    #

    写入2行文本

    obj.write("second line ")  # 是换行符

    obj = open("log","a")   #追加的模式往文件追加2行 obj.write("third ")    #追加写入2行文本 obj.write("fourth line ")

    obj = open("log","r")   #只读的模式,将文件内容读入到内存 #

    print obj.read()  #读出文件所有的内容 #

    print obj.readlines()    #每个行字符串作为列表的一个元素,包含换行符(空格和换行符可以用strip去掉) #['first ', 'second line ', 'third ', 'fourth line ']

    for i in obj:    

      print i,  #这里加上逗号,可以去掉空行 print obj.tell()  #40 显示光标目前的位置,是第40个字符

    # 文件的光标定位 #

    obj.seek(0)   光标回到文件的最开始处 #

    obj.tell()   显示当前光标在文件的位置 #

    #文件的光标的移动

    # obj.seek(0)   #光标回到文件最开始处,第二个参数可以不写,默认就是文件开始0

    # obj.seek(0,0)  #光标回到文件最开始处

    obj.seek(12,0) #光标回到以文件0开始,第12个字符处

    print obj.tell()

    obj.seek(6,1)  #光标从当前位置1开始,第6个字符处

    print obj.tell()

    obj.seek(3,2)  #光标从文件最后2开始,第3个字符处

    print obj.tell()  #0 显示光标目前的位置,是第0个字符

    # seek小结

    # 第二个参数,0代表文件开始,1代表文件当前,2代表文件结尾

    # 第一个参数,代表位移的字符个数

     
     


     
    
    
     


     





     
     

     

  • 相关阅读:
    Neo.Geo系统视频硬件结构模拟 v2.0
    [原创] CPS1模拟器开发日志
    在博客园发现恶意群体回复打广告的
    [原创] Neo.Geo系统视频硬件结构模拟
    在 ASP.NET 中执行 URL 重写(读书笔记)
    c#中什么情况下用(int)什么情况下用Convert.ToInt32
    ASP.NET 例程完全代码版(7)——2.0中实现自配置的成员角色管理库
    Request.UrlReferrer详解
    .NET中获取电脑名、IP及用户名方法
    ASP.NET 2.0中的跨页面提交
  • 原文地址:https://www.cnblogs.com/jiayuxin/p/5143855.html
Copyright © 2020-2023  润新知