py17day01

一、python简介

  -Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议[2]  。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

二、python与其他语言对比

  -Python & C:

    Python 跨平台,Linux all,S60,Windows,OSX,FreeBSD,这点是C#无法相比

    Python开源,绝大多数资源都是开源的,C#则相反;

    Python是解释型语言,C#需要编译(如asp.net);

  -Python & Java:

    开源方向来说,Python更有优势,Java(虽然最近Java已经开源了,但有一些开源协议上面的版权受限);

    Python更简洁,Java过于庞大复杂(如Web服务器)

    如 Python & C# 的第三点

  -Python & c++,perl:

    Python更容易学习,语法简单,语意化,易懂

  -Python & php: 

    php是世界上最好的语言!

  -Python & Ruby:

    Ruby 小日本做的 

三、python分类

  -cpython:由c语言所写的python解释器,解释顺序是由python代码转成c字节码,再转成机械码,解释过程为逐行解释。

  -pypy:不同于cpython的逐行解释,一行一行执行,pypy解释过程为全部转换为为c字节码后,再统一执行。

  -其它python(如jpython等):由py代码转化为其他语言字节码,在转化为机械码执行。

四、python基础

  -python默认以.py结尾,文件开头标注:

    #!/usr/bin/env python   ----------->第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

    #-*- coding:utf-8 -*-     ----------->第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

  -linux下也可以直接赋予权限执行:

    chmod 755 1.py

    ./1.py

  -编码:
    -ASCII码:python早起版本只持ascii码,因为ascii码一个字符只占8位,故最多只有2**8=256个字符

    如:字母A用ascii编码是十进制的65,二进制的01000001 

    -万国码(Unicode) :后期支持万国码,一个字符占16位

    如:A 00000000 01000001  中文占24位 如: 01001110 00101101

    -utf-8,对万国码压缩 :UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,

      汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

    -gbk,gb2312 :A 01000001, 10000000 00000000 00000010 。    

字符ASCIIUnicodeUTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

如中文:龙
utf-8,需要使用三个字节来表示 24 10000000 00000000 00000010
gbk, 需要使用二个字节来表示 16 00100110 00000010

-在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:

    >>> print('包含中文的str')
    包含中文的str

对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

>>> ord('A')
65
>>> ord('')
20013
>> chr(66)
'B'
>>> chr(25991)
''

-由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes

     -Python对bytes类型的数据用带b前缀的单引号或双引号表示:

x = b'ABC'

 

     -要注意区分'ABC'b'ABC',前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。

     -以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:    

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

     纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes

     bytes中,无法显示为ASCII字符的字节,用\x##显示

     -反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:    

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

    -申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码:

-关于IDE:pycharm的使用:

  -文件编码:Editor > File Encodings

  -文件模板:Editor > File and Code Templates > Python Script

  -滑动鼠标滚轮改变代码大小:Editor > General > Change font size(Zoom) with Ctrl+Mouse Wheel

  -快捷键:  

    ctrl + ?:一次实现多行#注释

-py中注释:
#  单行注释
""" """  多行注释

-.pyc文件:

此文件为对应.py文件转换好的字节码文件

五、变量、输入、输出

  -变量:

    变量名可以为字母,数字(不能开头),下划线,不能使用python内置关键字

  -输入,输出:

 1 >>> v = input('-->')
 2 --> value
 3 >>> import getpass
 4 >>> p = getpass.getpass('-->')
 5 Warning: Password input may be echoed.
 6 --> password
 7 >>> print(v)
 8 value
 9 >>> print(p)
10 password

六、条件语句、循环语句

  -条件语句:

    -if....else:

 1 >>> name = input("name:")
 2 name: dylan
 3 >>> passwd = input("password:")
 4 password: 123
 5 >>> if name == 'dylan' and passwd == '123':
 6 ...     print("login successful")
 7 ... else:
 8 ...     print("login failed")
 9 ...     
10 login successful

    -if....elif....else:

>>> name = input("name:")
name: elaine
>>> passwd = input("password:")
password: 123
>>> if name == 'dylan' and passwd == '123':
...     print("dylan login successful")
... elif name == 'elaine' and passwd == '123':
...     print("elaine login successful")
... else:
...     print("login failed")
...     
elaine login successful

  -循环语句:
    -while 条件:

      continue # 立即开始下次循环

      break # 跳出所有循环

  -练习:

    1、使用while循环输入 1 2 3 4 5 6 8 9 10

>>> n = 1
>>> while n < 11:
...     print(n)
...     n+=1

    2、求1-100的所有数的和

>>> sum = 0
>>> n = 1
>>> while n < 101:
...     sum+=n
...     n+=1
... print(sum)
5050

    3、输出 1-100 内的所有奇数

>>> n = 1 
>>> while n < 101:
...     if n%2 == 1:
...         print(n)
...         n+=1
...     else:
...         n+=1

    4、输出 1-100 内的所有偶数

>>> n = 1 
>>> while n < 101:
...     if n%2 == 0:
...         print(n)
...         n+=1
...     else:
...         n+=1

    5、求1-2+3-4+5 ... 99的所有数的和

>>> n = 1
>>> num = 0
>>> while n < 100:
...     if n%2 == 1:
...         num+=n
...         n+=1
...     else:
...         num-=n
...         n+=1
...         
>>> print(num)
50

    6、用户登陆(三次机会重试)

n = 3
while n > 0:
    name = input("Enter your name:")
    pwd = input("Enter your password:")
    if name == 'Elaine' and pwd == '123':
        print("Login successful!")
        break
    else:
       n-=1
       print("Name or password is wrong!You have %s chances left!"%n)

七、运算

  -运算符:

    http://www.runoob.com/python/python-operators.html

>>> if 1 == 1 or 1 > 2 and 1 == 4:
...     print('True')
... else:
...     print('False')
...     
True

>>> if 1 == 1 and 1 > 2 or 4 == 4:
...     print('True')
... else:
...     print('False')
...     
True

 

八、数据类型

  -Python数据类型
    -整数 int:
      创建:
        a = 123
        a = int(123)
      转换:
        age = "18"
        new_age = int(age)
    -布尔值 :
      创建:
        a = True
        b = False
      转换:
        数字转换,只有0是False,其他True
        字符串, 只有""是False,其他True
      ........  

    -字符串:

      创建:

        a = "dylan"

        a = str('dylan')

      转换:

        age = 19

        new_age = str(age)

      字符串的拼接:

>>> name = 'dylan'
>>> gender = 'boy'
>>> new_str = name + gender
>>> print(new_str)
dylanboy

      字符串格式化 :

        %运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,

        后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

        常见占位符:

%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
>>> s = "My name is %s,I'm %s years old now."
>>> print(s%('Dylan',29))
My name is Dylan,I'm 29 years old now.

      判断子序列是否在其中:

        因为是字符串,故可以使用成员运算符来判断。

      移除空白:

>>> val = ' dylan '
>>> val.lstrip()
'dylan '
>>> val.rstrip()
' dylan'
>>> val.strip()
'dylan'

      分割:

        str.split(str="", num=string.count(str))          str--分隔符,num--分割次数

>>> str1 = 'dylan 28 18000 1 2 3 4'
>>> str1.split(' ',1)
['dylan', '28 18000 1 2 3 4']
>>> str1.split(' ',3)
['dylan', '28', '18000', '1 2 3 4']

      长度(字符):

>>> name = 'dylan'
>>> len(name)
5

      索引:

>>> name[0]
'd'
>>> name[1]
'y'
>>> name[-1]
'n'

      切片:

>>> str2 = 'MyNameIsDylan'
>>> str2[0:2]  #从0开始到2(不取2)
'My'
>>> str2[3:5]  #从3开始到5
'am'
>>> str2[5:]   #从5到最后
'eIsDylan'
>>> str2[5:-2]  #从5到-2(不取-2)
'eIsDyl'
>>> str2[-2:]  # 从-2到最后
'an'
>>> str2[::2]  #从头到尾,步长为2
'MNmIDln'
>>> str2[2:8:2]  #从2到8,步长为2
'NmI'
>>>s = 'abcdefgh'   #s[::-1]表示从右往左,以步长为1进行切片
>>>s[::-1]  
 'hgfedcba'  
>>>s[::2]  # s[::2] 表示从左往右以步长为2进行切片
 'aceg' 

 

    -列表:
      创建:
        a = ['dylan','elaine']
        a = list(['dylan','elaine'])

      索引:
        val = a[0]

      长度:
        val = len(a)

      切片:
        和字符串类似

>>> abc = ['a','b','c','d','e','f']
>>> abc[0:-1:2]
['a', 'c', 'e']
>>> abc[::2]
['a', 'c', 'e']

      追加:

>>> abc.append('abcdef')
>>> abc
['a', 'b', 'c', 'd', 'e', 'f', 'abcdef']

      插入:

>>> abc.insert(2,'abc')
>>> abc
['a', 'b', 'abc', 'c', 'd', 'e', 'f', 'abcdef']
>>> abc.insert(0,'0')
>>> abc
['0', 'a', 'b', 'abc', 'c', 'd', 'e', 'f', 'abcdef']

      删除:

>>> abc.remove('abc')
>>> abc
['0', 'a', 'b', 'c', 'd', 'e', 'f', 'abcdef']

      更新:

>>> abc[7] = 'ghijkl'
>>> abc
['0', 'a', 'b', 'c', 'd', 'e', 'f', 'ghijkl']

    -字典:
      创建:

        d = {'name':'dylan','pwd':'123'}

      
索引获取值:

>>> d = {'name':'dylan','pwd':'123'}
>>> d['name']
'dylan'

      增加key,value:

        针对存在的key,则修改其对应的value

>>> d['age'] = 29
>>> d
{'pwd': '123', 'name': 'dylan', 'age': 29}
>>> d['name'] = 'elaine'
>>> d
{'pwd': '123', 'name': 'elaine', 'age': 29}

      删除:

>>> del d['age']
>>> d
{'pwd': '123', 'name': 'elaine'}

      for循环遍历字典的操作:

>>> dict = {'a':1,'b':2,'c':3,'d':4,'e':5}
>>> for i in dict:print(i)
d
a
c
b
e
>>> for i in dict.keys():print(i)
d
a
c
b
e
>>> for i in dict.values():print(i)
4
1
3
2
5
>>> for key,value in dict.items():print(key,value)
d 4
a 1
c 3
b 2
>>> print(len(dict))
5

      字典嵌套:

>>> dict = {
    "河北": {
        "石家庄": ["鹿泉", "藁城", "元氏"],
        "邯郸": ["永年", "涉县", "磁县"],
    },
    "河南": {
        "郑州": ["登封", "新密", "新郑"],
        "许昌": ["禹州", "襄城", "长葛"],
    },
    "山西": {
        "太原": ["太原", "古交", "清徐"],
        "大同": ["左云", "阳高", "天镇"],
    }
}
>>> dict["山西"]["大同"][2]
'天镇'

九、文件操作

  -db.txt

dylan|123|0|0
elaine|123|10000000000089114|3
admin|123|99999999761000|3

 

  -打开文件并读取其中内容操作:

>>>f1=open('D:\python\python3\s17day1_dylan_wu_homework\db.txt','r')
>>> data = f1.read()
>>> f1.close()
>>> print(data)
dylan|123|0|0
elaine|123|10000000000089114|3
admin|123|99999999761000|3
>>> type(data)
<class 'str'>

  -构成新user_list对其中用户元素进行修改:

>>> user_info_list = data.split('\n')  #去掉换行符
>>> print(user_info_list)
['dylan|123|0|0', 'elaine|123|10000000000089114|3', 'admin|123|99999999761000|3']  #得到user_info_list
>>> user_list = []  #定义一个空列表
>>> for i in user_info_list:
...     temp = i.split('|')  #去掉'|',得到temp列表
...     dic = {'name':temp[0],'pwd':temp[1],'balance':temp[2],'locked':temp[3]}  #构成用户信息字典
...     user_list.append(dic)  #构成用户信息总表
...     
>>> user_list
[{'locked': '0', 'name': 'dylan', 'balance': '0', 'pwd': '123'}, {'locked': '3', 'name': 'elaine', 'balance': '10000000000089114', 'pwd': '123'}, {'locked': '3', 'name': 'admin', 'balance': '99999999761000', 'pwd': '123'}]
>>> user_list[1]['locked'] = '2'  #修改用户锁定次数
>>> user_list
[{'locked': '0', 'name': 'dylan', 'balance': '0', 'pwd': '123'}, {'locked': '2', 'name': 'elaine', 'balance': '10000000000089114', 'pwd': '123'}, {'locked': '3', 'name': 'admin', 'balance': '99999999761000', 'pwd': '123'}]

  -将修改后的user_list还原为字符串:

>>> user_str = ''  #定义一个空字符串
>>> for e in user_list:
...     l = [e['name'],e['pwd'],e['balance'],e['locked']]  #将字典中的用户元素还原为列表
...     new_str = '|'.join(l) + '\n'  #还原为用户字符串
...     user_str+=new_str
...     
>>> user_str
'dylan|123|0|0\nelaine|123|10000000000089114|2\nadmin|123|99999999761000|3\n'  #得到用户字符串

  -写入文件:

>>> f2 = open('D:\python\python3\s17day1_dylan_wu_homework\db.txt','w')
>>> f2.write(user_str)
72
>>> f2.close()

 

posted @ 2017-04-23 16:36  Dylan_Wu  阅读(160)  评论(0)    收藏  举报