第一个Python程序
在centos6.x系统自带了python2.6版本,cmd中输入python:
>>> print("hello, world")
hello, world
或者通过vim编辑hello.py
vim hello.py
#!/usr/bin/env python
print(hello,world)
(cmd)命令行中输入
>>>python hello.sh
hello,world
变量
变量定义的规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字母数字
- 一下关键字不能声明为变量名
[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
变量的赋值
>>> name1= "cntsp"
>>> name2= name1
>>> id(name1)
140391323080624
>>> id(name2)
140391323080624
>>> name1= "cnhsh"
>>> id(name1)
140391323080912
>>> id(name2)
140391323080624
>>> print(name2)
cntsp
>>>
上面的打印说明了:name1和name2开始都引用了内存中的一个值,当name1=”cnhsh”时,变量name1引用了内存中的另一个值,然而对name2的引用没有任何影响
用户输入和格式化打印
在linux系统vim编辑input.py文件
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#name = raw_input("please enter your name: ") #only on python2.x
name = input("please enter your name: ") #python2.x和python3.x
print("hello " + name) #print("hello %s" % name)或者print("hello {name1}".format(name1=name))
>>> python input.py
please enter your name: cntsp
hello cntsp
输入密码时,隐藏密码,要利用getpass模块中的getpass方法,即:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import getpass
#将用户输入内容赋值给passwd变量
passwd = getpass.getpass("请输入密码:")
#打印密码
print(paswd)
模块初识
python的强大之处正是在于丰富而强大的标准库和第三方库,几乎你想实现的任何功能都有相应的python库支持。
sys模块
os模块
python tab键补全模块
.pyc解释
1. Python是一门解释型语言?
我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了.pyc文件的存在。如果是解释型语言,那么生成的.pyc文件是什么呢?c应该是compiled的缩写才对啊!
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 字符串
4 列表
5 元组
6 字典
数据运算
1 算术运算
运算符 | 描述 | 实例 |
---|---|---|
+ | 加- 两个对象相加 | 10+20 输出结果30 |
- | 减- 得到负数或是一个数减去另一个数 | 1-11b 输出结果-10 |
* | 乘- 两个数相乘或是返回一个被重复若个次的字符串 | 10*20 输出结果200 |
/ | 除- x除以y | 4/2输出结果2 |
% | 取模- 返回除法的余数 | 3%2 输出结果为0 |
** | 幂-返回x的y次幂 | 2**4为16 |
// | 取整数-返回商的整数部分 | 9//2 输出结果为2,9.0//2.0结果为4.0 |
### 2 比较运算 | ||
运算符 | 描述 | 实例 |
——– | —–: | :—-: |
== | 等于-比较对象是否相等 | 相等返回ture |
!= | 不等于-比较两个对象是否不相等 | 不等返回ture |
> | 大于-x是否大于y | 3>2,返回ture |
< | 小于-x是否小于y | 3<2,返回false |
>= | 大于等于 | 23>=23,返回ture |
<= | 小于等于 | ‘abcd’<’efgh’,返回 |
3 赋值运算
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c =a+b |
+= | 加法赋值运算符 | c +=a等效于c = c+a |
### 4 逻辑运算 | ||
运算符 | 描述 | 实例 |
——– | —–: | :—-: |
and | 布尔”与”,同真为真 | 1 and 1 ,返回true |
or | 布尔”或”,只要有一个为真就是真 | 1 or 0,返回true |
not | 布尔”非” | not(1),返回false |
### 5 成员运算 | ||
运算符 | 描述 | 实例 |
——– | —–: | :—-: |
in | 如果指定的序列中找到值返回True,否则返回False | x in y ,x在y序列中,返回True |
not in | 如果在指定的序列中没有找到值返回True,否则返回False | x不在y序列中,x not in y ,就为True |
### 6 身份运算 | ||
运算符 | 描述 | 实例 |
——– | —–: | :—-: |
is | is是判断两个标识符是不是引用自一个对象 | x is y,如果id(x)等于id(y),is 返回结果1 |
is not | is not 是判断两个标识符是不是引用自不同的对象 | x is not y,如果id(x)不等于id(y),is not返回值为1 |
### 7 位运算 | ||
运算符 | 描述 | 实例 |
——– | —–: | :—-: |
& | 按位与运算 | 1111&0000 |
^ | 按位异或运算符 | 1010^0101 |
~ | 按位取反运算符 | ~5 |
<< | 左移 | a<<2 |
>> | 右移 | b>>3 |
### 8 补充:运算符优先级 | ||
运算符 | 描述 | |
——– | —–: | |
^^ | 指数(最高级) | |
~ + - | 按位翻转,一元加号和减号 | |
* / % // | 乘 除 取模 取整除 | |
+ - | 加法 减法 | |
>> << | 左移 右移 | |
& | 位 “AND” | |
^ | 位运算 | |
< > <= >= | 比较运算 | |
= %= /= | 赋值运算 | |
is is not | 身份运算 | |
in not in | 成员运算 | |
not or and | 逻辑运算 | |
# 流程控制语句和循环 | ||
## if/else | ||
vim if.py | ||
``` bash | ||
name = input(“What is your name?: “) | ||
if name.endswith(“Gumby”) | ||
print(“Hello, Mr. Gumby”) | ||
else: | ||
print(“Hello,stranger”) | ||
``` | ||
如果需要检测多个条件,就可以是由elif: | ||
``` bash | ||
num = input(“Enter a number:”) | ||
if num>0: | ||
print(“The number is positive”) | ||
elif num<0: | ||
print(“The number is negative”) | ||
else: | ||
print(“The number is zero”) | ||
``` | ||
## for循环 | ||
### 循环遍历一个序列 | ||
``` bash | ||
words = [“this”, “is”, “an”, “parrot”] | ||
for word in words: | ||
print(word) | ||
或者 | ||
numbers = [1,2,3,4,5,6] | ||
for num in numbers: | ||
print(“num”) | ||
``` | ||
### 循环遍历字典元素 | ||
一个简单的for语句就能遍历字典的所有键,就像遍历序列一样 | ||
``` bash |
d = {‘x’:12, ‘y’:13, ‘z’=14}
for key in d:
print key, ‘corresponds to’,d[key]
d.items方法会将键-值对作为元组返回,for循环的一大好处就是可以循环中使用序列解包:
for key, value in d.items():
print(key,’correspond to’, value)
x correspond to 12
y correspond to 13
z correspond to 14
```
一些迭代工具
1 并行迭代
2 按索引迭代
3 翻转和排序迭代
while循环
1 break
2 continue
3 while True/break
作业需求
作业一:博客
编写登陆接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输出三次后锁定
多级菜单
- 三级菜单
- 可依次选择进入各个菜单
- 所需新知识点:列表、字典