码迷,mamicode.com
首页 > 编程语言 > 详细

Python疗程一day1:Python简介和入门

时间:2016-05-10 20:16:31      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

sys

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import sys
 
print(sys.argv)
 
 
#输出
$ python test.py helo world
[‘test.py‘‘helo‘‘world‘]  #把执行脚本时传递的参数获取到了

  

os

1
2
3
4
5
6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import os
 
os.system("df -h"#调用系统命令

完全结合一下  

1
2
3
import os,sys
 
os.system(‘‘.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行

自己写个模块

python tab补全模块

import sys
import readline
import rlcompleter

if sys.platform == darwin and sys.version_info[0] == 2:
    readline.parse_and_bind("bind ^I rl_complete")
else:
    readline.parse_and_bind("tab: complete")  # linux and python3 on mac

for mac

 

写完保存后就可以使用了

1
2
3
4
5
localhost:~ jieli$ python
Python 2.7.10 (default, Oct 23 201518:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help""copyright""credits" or "license" for more information.
>>> import tab

你会发现,上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里啦,基本一般都放在一个叫 Python/2.7/site-packages 目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。

  

九、.pyc是个什么鬼?

1. Python是一门解释型语言?

我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

  

2. 解释型语言和编译型语言 

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

 

3. Python到底是什么 

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java

java hello

 

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。

4. 简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

 

十、数据类型初识 

1、数字

2 是一个整数的例子。
长整数 不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子。

int(整型)

  在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
  在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
  浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
  复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
 
2、布尔值
  真或假
  1 或 0
3、字符串
"hello world"
万恶的字符串拼接:
  python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串格式化输出
1
2
3
4
name = "alex"
print "i am %s " % name
  
#输出: i am alex

PS: 字符串是 %s;整数 %d;浮点数%f

字符串常用功能:
  • 移除空白
  • 分割
  • 长度
  • 索引
  • 切片
4、列表
创建列表:
1
2
3
name_list = [‘alex‘‘seven‘‘eric‘]
name_list = list([‘alex‘‘seven‘‘eric‘])

基本操作:

  • 索引
  • 切片
  • 追加
  • 删除
  • 长度
  • 切片
  • 循环
  • 包含
5、元组(不可变列表)
创建元组:
1
2
3
ages = (1122334455)
ages = tuple((1122334455))
 
6、字典(无序)
创建字典:
1
2
3
person = {"name""mr.wu"‘age‘18}
person = dict({"name""mr.wu"‘age‘18})

常用操作:

  • 索引
  • 新增
  • 删除
  • 键、值、键值对
  • 循环
  • 长度

十一、数据运算  

算数运算:

技术分享

比较运算:

技术分享

赋值运算:

技术分享

逻辑运算:

技术分享

成员运算:

技术分享

身份运算:

技术分享

位运算:

技术分享

运算符优先级:

技术分享

更多内容:猛击这里

  

十二、表达式if ... else

场景一、用户登陆验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 提示输入用户名和密码
  
# 验证用户名和密码
#     如果错误,则输出用户名或密码错误
#     如果成功,则输出 欢迎,XXX!
 
 
#!/usr/bin/env python
# -*- coding: encoding -*-
  
import getpass
  
  
name = raw_input(‘请输入用户名:‘)
pwd = getpass.getpass(‘请输入密码:‘)
  
if name == "alex" and pwd == "cmd":
    print("欢迎,alex!")
else:
    print("用户名和密码错误")

场景二、猜年龄游戏

在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了

  

外层变量,可以被内层代码使用
内层变量,不应被外层代码使用

 

十三、表达式for loop

最简单的循环10次

1
2
3
4
5
6
#_*_coding:utf-8_*_
__author__ = ‘Alex Li‘
 
 
for in range(10):
    print("loop:", i )

输出:

1
2
3
4
5
6
7
8
9
10
loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9

需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环

1
2
3
4
for in range(10):
    if i<5:
        continue #不往下走了,直接进入下一次loop
    print("loop:", i )

需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出

1
2
3
4
for in range(10):
    if i>5:
        break #不往下走了,直接跳出整个loop
    print("loop:", i )

 

十四、while loop   

 有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。

海枯石烂代码

1
2
3
4
5
count = 0
while True:
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)
    count +=1
    

 

其实除了时间,没有什么是永恒的,死loop还是少写为好 

上面的代码循环100次就退出吧

 

 

 

回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。

  

  

 

作业一:博客

 

作业二:编写登陆接口

  • 输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后锁定

 

作业三:多级菜单
  • 三级菜单
  • 可依次选择进入各子菜单
  • 所需新知识点:列表、字典

  

  

  

 

 

  

  

 

  

 

 

  

  

 

  

 
 
好文要顶 关注我 收藏该文 技术分享 技术分享
0
0
 
(请您对文章做出评价)
 
« 上一篇:Python Select 解析
posted @ 2016-05-06 12:46 金角大王 阅读(225) 评论(1)  编辑 收藏

 

九、流程控制

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

需求一、用户身份认证

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import getpass
name = raw_input("请输入用户名:")
pwd = raw_input("请输入密码:")
if name == "tianshuai" and pwd == "123":
    print "登录成功"
else:
    print "登录失败"

测试:

1
2
3
4
5
6
7
8
9
root@tim:/home/tim# python tianshuai.py
请输入用户名:tianshuai
请输入密码:
登录成功
root@tim:/home/tim# python tianshuai.py
请输入用户名:tianshuai
请输入密码:
登录失败
root@tim:/home/tim#

 

需求二、根据用户输入内容输出其权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python
#-*- coding:utf-8 -*-
‘‘‘
tianshuai--->普通用户
eric--->管理用户
alex--->超级用户
‘‘‘
name = raw_input("请输入用户名:")
  
if name == "tianshuai":
    print "普通用户"
elif name == "eric":
    print "管理用户"
elif name == "alex":
    print "超级用户"
else:
    print "没有此用户"

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
root@tim:/home/tim# python tianshuai.py
请输入用户名:tianshuai
普通用户
root@tim:/home/tim# python tianshuai.py
请输入用户名:eric
管理用户
root@tim:/home/tim# python tianshuai.py
请输入用户名:alex
超级用户
root@tim:/home/tim# python tianshuai.py
请输入用户名:lksjdfsdf
没有此用户
root@tim:/home/tim#

for i in range(100)    and   for i in xrange(1,100)

需求一、猜数字游戏

有3次机会,如果3次中没有猜中给予提示,3次都没有猜中,鼓励!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import random   #随机模块
rand_num = random.randrange(10)
  
for in range(3):
    guess_num = int(raw_input("请猜测数字:"))
    if guess_num == rand_num:
        print "太棒了你猜对了"
        break
    elif guess_num > rand_num:
        print "你猜测的有点大了,请尝试小点的数字"
    else:
        print "你猜测的有点小了,请尝试大点的数字"
else:
    print "不要灰心,这次只是运气不好,请下次尝试"
  
print "这个真正的数字是:%" % rand_num

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
root@tim:/home/tim# python tianshuai.py
请猜测数字:8
你猜测的有点大了,请尝试小点的数字
请猜测数字:7
你猜测的有点大了,请尝试小点的数字
请猜测数字:6
你猜测的有点大了,请尝试小点的数字
不要灰心,这次只是运气不好,请下次尝试
这个真正的数字是:6
root@tim:/home/tim# python tianshuai.py
请猜测数字:5
太棒了你猜对了
这个真正的数字是:5

while 循环

他的原理是:当条件为真的时候运行,当条件为假的时候停止!

没有一个规定次数,不设置条件永远循环下去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
count = 0
while True:
    count +=1
    print "loop",count
    time.sleep(3)
#这个循环3秒钟自+1 ,后无线循环只要这个条件为”真“,就无限循环下去
那看下下面的例子
#!/usr/bin/env python
#-*- coding:utf-8 -*-
  
import time
cout = 0
  
while cout < 3:
    cout +=1
    print "shuai",cout
    time.sleep(3)
      
#这个循环每3秒循环一次,当条件cout < 3的时候为真(自己设置的条件),当cout 不小于3的时候为假(false)停止。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
import random
rand_num = random.randrange(10)
try_cout = 0
  
while try_cout < 3:
    guess_num = int(raw_input("请输入猜测的数字:"))
    if guess_num > 10:
        print "输入的数字超出范围了"
        continue
    if guess_num == rand_num:
        print "哇!太棒了你猜对了"
        break
    elif guess_num < rand_num:
        print "你猜的数字有点小了,请尝试大点的数字"
    else:
        print "你猜的数字有点大了,请尝试小点的数字"
  
    try_cout +=1
else:
    print "不要灰心你,这次只是运气不好,请下次尝试"
print "这个真正的数字是:%d"  % rand_num
#当执行到guess_num> 10 如果你输入的是大于10的数字那么将会执行continue,就会跳出档次循环,没有执行try_cout +=1 所以没有计数!

 

注:continue 是跳出当前循环,break是跳出整个循环!

有个需求,我想返回我的上层怎么做,用标识位!如下面的例子:

 

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
while True:
    print "我是第一层"
    while True:
        print "我是第二层"
        while True:
            print "我是第三层"

 

 

这就是个死循环,当执行到第三个循环的时候就无限循环,这里有人回想,用break行不行,不行如下:

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
while True:
    print "我是第一层"
    break
    while True:
        print "我是第二层"
        break
        while True:
            print "我是第三层"
            break

这个的输出结果:

1
2
root@tim:/home/tim# python tianshuai.py
我是第一层

就只执行了第一个循环就跳出,不我们想要的效果,那就用到“标志位”了,工作中也有很多地方用到他:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
count = 0
while True:
    print "我是第一层"
    jump_1_flag = False
    while True:
        print "我是第二层"
        jump_2_flag = False
        while True:
            count += 1
            print "我是第三层"     
            if count > 3:
                jump_2_flag = True
                break
        if jump_2_flag:
            print "第三层跳到我这里来了,我也要跳到第一层"
            jump_1_flag = True
            break
          
    if jump_1_flag:
        print "第二层和第三层跳到第一层了,我也要跳"
        break

执行结果:

十、Pthon运算符

Python算术运算符:

操作符描述符例子
+ 加法 - 对操作符的两侧增加值 a + b = 30
- 减法 - 减去从左侧操作数右侧操作数 a - b = -10
* 乘法 - 相乘的运算符两侧的值 a * b = 200
/ 除 - 由右侧操作数除以左侧操作数 b / a = 2
% 模 - 由右侧操作数和余返回除以左侧操作数 b % a = 0
** 指数- 执行对操作指数(幂)的计算 a**b = 10 的幂 20
// 地板除 - 操作数的除法,其中结果是将小数点后的位数被除去的商。 9//2 =  4 而 9.0//2.0 = 4.0
1
2
3
4
5
6
7
8
>>> a = 21>>> b = 10
>>> c = 0
>>> c = + b ; print c
31>>> c = -b ; print c11>>> c = * b ; print c210
>>> c = / b ; print c
21
>>> c = % b ; print c
1

Python的比较操作符:

 

运算符描述示例
== 检查,两个操作数的值是否相等,如果是则条件变为真。 (a == b) 不为 true.
!= 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 (a != b) 为 true.
<> 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 (a <> b) 为 true。这个类似于 != 运算符
> 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 (a > b) 不为 true.
< 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 (a < b) 为 true.
>= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 (a >= b) 不为 true.
<= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 (a <= b) 为 true.

 

1
2
3
4
5
6
7
8
>>> a = 21>>> b = 10
>>> c = 0
>>> c = + b ; print c
31>>> c = -b ; print c11>>> c = * b ; print c210
>>> c = / b ; print c
21
>>> c = % b ; print c
1

 Python赋值运算符:

运算符描述示例
= 简单的赋值运算符,赋值从右侧操作数左侧操作数 c = a + b将指定的值 a + b 到  c
+= 加法AND赋值操作符,它增加了右操作数左操作数和结果赋给左操作数 c += a 相当于 c = c + a
-= 减AND赋值操作符,它减去右边的操作数从左边操作数,并将结果赋给左操作数 c -= a 相当于 c = c - a
*= 乘法AND赋值操作符,它乘以右边的操作数与左操作数,并将结果赋给左操作数 c *= a 相当于 c = c * a
/= 除法AND赋值操作符,它把左操作数与正确的操作数,并将结果赋给左操作数 c /= a 相当于= c / a
%= 模量AND赋值操作符,它需要使用两个操作数的模量和分配结果左操作数 c %= a is equivalent to c = c % a
**= 指数AND赋值运算符,执行指数(功率)计算操作符和赋值给左操作数 c **= a 相当于 c = c ** a
//= 地板除,并分配一个值,执行地板除对操作和赋值给左操作数 c //= a 相当于 c = c // a
1
2
3
4
5
6
7
8
>>> a = 21
>>> b = 10
>>> c = 0
>>>
>>> c = +b
>>> c += a ; print c
52
>>> c += is = + a

Python位运算符:

 

二进制换算成10进制网络学过的东西回忆下:
128 64 32 16 8 4 2 1
二进制是8位的比如说:01001111    换成10进制的就是:1+2+4+8+64  和上面的对比取值
操作符描述示例
& 二进制和复制操作了一下,结果,如果它存在于两个操作数。 (a & b) = 12 即 0000 1100
| 二进制或复制操作了一个比特,如果它存在一个操作数中。 (a | b) = 61 即 0011 1101
^ 二进制异或运算符的副本,如果它被设置在一个操作数而不是两个比特。 (a ^ b) =  49 即  0011 0001
~ 二进制的补运算符是一元的,并有“翻转”位的效果。 (~a ) =  -61 即 1100 0011以2的补码形式由于带符号二进制数。
<< 二进位向左移位运算符。左操作数的值左移由右操作数指定的位数。 a << 2 = 240 即 1111 0000
>> 二进位向右移位运算符。左操作数的值是由右操作数指定的位数向右移动。 a >> 2 = 15 即 0000 1111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
二进制“与”计算:(11=1  0和任意都为0
= 10
= 49
a&b
 
10        0    0    0    0       1    0    1    0
49        0    0    1    1       0    0    0    1
=0        0    0    0    0       0    0    0    0
 
 
二进制“或”计算:(遇11
a|b
= 60 # 60 = 0 0 1 1    1 1 0 0
= 13 #13 =  0 0 0 0    1 1 0 1
=                     0 0 1 1    1 1 0 1   = 0+0+32+16+8+4+0+1 = 61
                   
 
二进制“异或”运算:(相同为0,不同为1
a^b
 
= 60            # 60 = 0011 1100
= 13            # 13 = 0000 1101
                                  0011 0001  = 0+0+32+16+0+0+0+1=49
 
二进制取反运算:(0置换为11置换为0
~a
 = 60            # 60 = 0011 1100
那么  -= 1100 0011     128 + 64 +2 +1 =         
 
二进位向左、右移位运算符:
a=2 那么 往左移1位就是4如下:
a<<1 =  4        ;         a>>1 = 1

Python逻辑运算符:

运算符描述示例
and 所谓逻辑与运算符。如果两个操作数都是真的,那么则条件成立。 (a and b) 为 true.
or 所谓逻辑OR运算符。如果有两个操作数都是非零然后再条件变为真。 (a or b) 为 true.
not 所谓逻辑非运算符。用于反转操作数的逻辑状态。如果一个条件为真,则逻辑非运算符将返回false。

not(a and b) 为 false.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
例子:
and运算,都为真时为真
>>> 9 8 and 9 10
True
>>> 9 8 and 9 10
False
 
or运算,有一个为真的时候即可为真
>>> 9 8 or 9 10
True
>>> 9 8 or 9 10
False
>>>
 
not运算,假为真真为假
>>> not 6.2 <= 6
True
>>> not 6.2 >= 6
False
>>>

 

import sysimport readlineimport rlcompleter
if sys.platform == ‘darwin‘ and sys.version_info[0] == 2:    readline.parse_and_bind("bind ^I rl_complete")else:    readline.parse_and_bind("tab: complete")  # linux and python3 on mac
for mac

Python疗程一day1:Python简介和入门

标签:

原文地址:http://www.cnblogs.com/jasonwang-2016/p/5478588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
周排行
mamicode.com排行更多图片
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!