python笔记——python快速入门
通过本文可以快速简单了解面向过程的python的知识点。可以为以后的具体python的学习打下基础。
首先需要电脑里装好了python3.x。python的安装和配置可以网上查找资料。本文主要是从python的面向过程的几个要素切入。下面直接进入正题。
#1 数据类型
内置数据类型(只列举boolean, int, str)
boolean 表示布尔类型,True和false
int 表示整数类型:-9123, 2100302149190493818010104830202
(整型的大小只受到机器内存大小限制)
str 表示字符型:”name”, “good job”, ‘positive αβγ’
(使用 >>> 表示在python shell中执行,并且,python不需要再句尾添加分号“;”)
>>>”HardTimes”[5]
‘T’
关于str双引号,单引号,其实是等价的,只是在这种情况:”You can call me ‘Amy’”,就不用使用转义字符\’了。
python 三引号的形式用来输入多行文本,也就是说在三引号之间输入的内容将被原样保留,之中的单号和双引号不用转义,其中的不可见字符比如/n和/t都会被保留,这样的好处是你可以替换一些多行的文本。
str类型和基本的数值类型(如int)都是固定的,一旦设置就不能被改变
类型转换:可以使用如下语法:
datatype(item),
例如:
>>>int(“456”)
456
>>>str(456)
“456”
#2 对象引用
python 没有像C++ java样的变量,而是用对象引用,对固定对象而言,变量和对象引用没有什么区别。 另外,python为弱类型语言,类型检查很弱,在声明时不需要定义类型。
例如下面例子:( # 表示注释,相当于C++里头的 // )
x = “bule”
y = “green”
z = x # z为”bule”
python中对于 = 符号作用就是将对象引用和内存绑定。而如果对象引用已经存在,那么就是重新绑定内存。
例如,上面例子:y = x 那么y将重新绑定了值”bule”
python中使用“动态类型”机制,即任何时候只要需要就可以进行重新绑定(可以使用不同的数据类型)。例如:(例子中用到print函数为打印到控制台的输出函数,type函数可以返回对象的类型)
route = 866
print(route, type(route)) #866 <class ‘int’>
route = “North”
print(route, type(route)) #866 <class ‘str’>
这里重新引用route的对象后,原来的int对象将进入垃圾收集流程
#3 组合数据类型
python提供了几种组合数据类型,包括关联数据类型和集合数据类型。(这里只讨论两种,元组和列表)
元组是固定的,列表是可变的,在需要的时候可以把列表进行插入和移除数据项。
元组:
元组使用逗号创建,元组输出时使用括号封装在一起,例如:
>>>“One”, “Two”, “Three”
('one', 'two', 'three')
>>> "one",
('one',)
>>> () # 空元组由()创建
()
列表list:
列表使用 [] 创建,如下例子:
[1,2,3,4,5,6]
["this","is","a","good","job"]
[1,2,"is","one","two"]
[]
和其他类型一样,组合数据类型也是对象,因此,可以将某种组合数据类型嵌套到其他组合数据类型里。看下面例子: (len()函数是求数据类型的长度)
>>>len((("c++","cocoa","java"),))
1
>>>len(("c++","cocoa","java"))
3
>>> len([3,4,"haha",(1,2)])
4
>>> len("Python")
6
所有Python数据项都是某种特定数据类型(也称类)的“对象”(也称实例)。不像c++ 或java的内置类型,python的这些数据类型可以有方法,比如list有个append()方法,用于添加元素。
>>> x = ["c++", "java"]
>>> x.append("python") # append会改变列表
>>> x
['c++', 'java', 'python']
可以使用 + 完成相同功能,不过+不会改变原列表
>>> x + ["c"]
['c++', 'java', 'python', 'c']
>>> x
['c++', 'java', 'python']
>>> x = x + ["c"]
>>> x
['c++', 'java', 'python', 'c']
list有很多其他方法,如:insert,remove……另外,python的索引也总是由0开始。
#4 逻辑操作符
身份操作符 is
is是一个二元操作符,即左边的对象引用和右边的对象引用指向的是否是同一个对象,返回false,true。看下面例子(None为内置空对象,表示未知。not表示反向)
>>> a = "yeah"
>>> b = "yeah"
>>> a is b
True
>>> a = ["haha",1]
>>> b = ["haha",1]
>>> a is b
False
>>>a = "something"
>>> b = None
>>> a is not None, b is None
(True, True)
比较操作符
python提供二进制比较操作符的标准集合,< <= == != >= > 都表示通常所期待的意思。这些操作对对象值进行比较,即对具体的内容进行比较。例如:
>>> a = 2
>>> b = 2
>>> a == b, a > b, a != b, a < b
(True, False, False, False)
python使用Unicode编码表示字符串,与简单的ASCII字符相比较,更复杂更微妙。
>>> a = "abc"
>>> b = "abd"
>>> a == b
False
>>> a < b
True
python比较操作符一个比较好的特性是,可以进行结连比较,例如:
>>> a = 9
>>> 0 < a < 10
True
成员操作符
对于序列或集合这类数据类型,比如:字符串,列表或元组,可以用操作符in(not in)来测试成员关系。即就是表示左边的元素是不是右边的成员。例如:
>>> 'a' in "abc"
True
>>> 2 in (5,"python",2,"@sina")
True
>>>"python" not in (5, "python", 2, "@sina")
False
逻辑运算符
python提供三个逻辑运算符,and or not
and 和or都使用short-circuit逻辑,返回决定结果的操作数(而不是返回布尔操作数)。
>>> 2 and 5
5
>>> 4 and 6
6
>>> 0 and 3
0
>>> 3 and 0
0
>>> 2 or 3
2
>>> 3 or 2
3
>>> 3 or 0
3
如果逻辑表达式本身出现在上下文中,那么结果也为布尔值,比如if语句中。
not 操作符在布尔上下文中评估参数,并返回布尔型的结果。
>>> not(0 == 0)
False
>>> not('a' in "abc")
False
#5 控制流语句
python中一块代码称为suite。由于python某些语法要求存在一个suite,python提供了关键词pass,pass实际上是一条空语句。不进行任何操作。
if语句
if Boolean_expression1:
suite1
elif boolean_expression2:
suite2
...
elif boolean_expressionN:
suiteN
else:
else_suite
不像C++ 或java它没有圆括号,但是它需要冒号,以及缩进。
下面是例子:
if x:
print("x isnonzero")
while语句
while语句即就是循环语句。(else分支为可选项)
while boolean_expression:
suite
else:
else_suite
类似C++或java,也可以支持break,continue。
while True:
item = get_next_item()
if not item:
break
process_item(item)
for…in语句
for循环语句重用了in 关键字,基本语法格式:
for variable in iterable:
suite
else:
else_suite
与while语句相似,支持break,continue语句。
countries = ['Denmark', 'Fenmark', 'Norway', 'Sweden']
for country in countries:
print(country)
基本异常处理
基本格式:(as variable部分为可选项)
try:
try_suite
except exception1 as variable1:
exception_suite1
except exception2 as variable2:
exception_suite2
...
except exceptionN as variableN:
exception_suiteN
将完成如下逻辑工作,如果在try块中的suite都正常,将不产生任何异常,则except模块将被跳过;如果try块产生了异常,将会立即转向第一个和该异常相比配的suite,之后的except语句将不执行。如果发生了异常,并且指定了as variable部分,则在异常处理suite内部,variable引用的是异常对象。如下例子:(input是输入函数,并打印字符串于控制台)
s = input("enter an integer:")
try:
i = int(s)
print("valid integerentered:", i)
except ValueError as err:
print(err)
运行,如果输入是数字,如123,输出是:
enter an integer:123
valid integer entered: 123
如果是输入字符:abc,那么输出是:
enter an integer:abc
invalid literal for int() with base 10:'abc'
#6 算术操作符
python提供了完整的算术运算符集,包括基本的+ -* / %。此外还有很多增强赋值操作符,比如,+= *=。这些和c++ java相同。python重载了+ +=,可用字符串,元组,列表等。起链接作用。
>>> a = "abc" + "def"
>>> a
'abcdef'
>>> a = ['a', 1, 'afda'] + ["haha"]
>>> a
['a', 1, 'afda', 'haha']
>>> (1,3,4) + (12,34,5)
(1, 3, 4, 12, 34, 5)
python还定义了些其他的运算符,如:// ** (x//y表示x除以y,舍弃小数部分,x**y表示x的y次幂)。另外值得一提的是,python没有支持++ -- 操作符。
还有整数的位逻辑运算操作符 | ^ & << >> ~ (分别表示或,异或,与,左移,右移,反转)
#7 输入输出
前面我们展示了print()和input()函数。这是用于控制台的输出输入函数。
我们可以这样文件输出,将print函数的输出内容从控制台重定向到文件,例如:
C:\>test.py > results.txt
这个在windows和unix系统控制台上都可以使用。如果windows系统里的默认python版本是python2 那么需要使用C:\python30\python.exe test.py > results.txt
类似的,也可以用C:\>test.py < inputs.txt来将输入数据从文件给程序。
对于文件流操作,类似C++里,看下面程序:
f = open("myfile.txt","w")
f.write("First line with something")
f.close()
f = open("myfile.txt","r")
line = f.readline()
print(line)
本程序将在源文件同层文件里产生myfile.txt的文件,并且写入一行字符串Firstline with something,并将此文件的内容的第一行,也就是这一句Firstline with something读取出来给line,并在控制台打印出来。“w","r"类似c语言的用法。标记文件的读取方式可写和可读。
#8 函数的创建和调用
函数的通常语法格式:
def functionName (arguments):
suite
这里参数arguments是可选的。
注意到和c++ java不同的是没有函数返回值类型。但不是不能返回值。其实,python中函数也是对象,因此可以存储在组合数据类型中。
下面给出一个例子:
def get_int(msg):
while True:
try:
i =int(input(msg))
return i
except ValueError aserr:
print(err)
这个函数有个参数msg,作为输入的时候的提示信息。使用本函数如下:
age = get_int (“enteyour age:”)
本函数是必须要输入参数的,因为我们没有给函数参数给予默认参数。默认参数可以这样给:
def get_int(msg= "enter an integer:"):
suite
虽然自己写函数感觉很不错,但有时候完全不用这么做,因为python有大量的内置函数,比如,abs(), pow()等等,其标准库的大量模块中也有大量的函数可以使用。python的模块实际上就是.py的文件。我们只需要进行导入到文件就可以了。例如:import sys这里不需要写出拓展名。导入一个模块后,我们就可以使用里面的所有函数,类,和变量了。
下面展示一个实例,random模块(在标准库random.py中)提供了很多有用的函数。
import random
x = random.randint(1,6)
y = random.choice(["apple", "banana","cherry", "durian"])
randint()就是产生1到6之间的随机整数;choice()就是在参数中随机选择一个,并返回。
最后给个实例,结束本文。
题目要求,完成在命令行提供一个整数,将此数打印成大的数值,如下所示:
程序实现:
import sys ##七行七列的矩阵填充数字 Digits = [ [" *** "," * * ","* *","* *","* *"," * * "," *** "], #0 [" * "," ** "," * "," * "," * "," * "," *** "], #1 [" *** "," * * ","* * "," * "," * "," * ","****** "], #2 [" *** "," * * "," * "," * "," * "," * * "," *** "], #3 [" * "," ** "," * * "," * * "," ******"," * "," * "], #4 [" ***** "," * "," * "," **** "," * "," * "," **** "], #5 [" *** "," * "," * "," **** "," * * "," * * "," *** "], #6 [" ***** "," * "," * "," * "," * "," * "," * "], #7 [" *** "," * * "," * * "," *** "," * * "," * * "," *** "], #8 [" *** "," * * "," * * "," *** "," * "," * "," * "]] #9 ##接收命令行传值,只处理数字 try: num = sys.argv[1] row = 0 while row < 7: #逐行处理打印 line = "" #用于打印当前行的引用对象 column = 0 while column < len(num): number = int(num[column]) #每次获取一个数字,从第一个到最后一个 a = Digits[number] #将大写的数字读入 line += a[row] + " " #选取大写数字的当前行,连接 column += 1 print(line) #打印当前行 row += 1 except IndexError: #异常处理下标异常 print("usage:bigdigits.py <number>") except ValueError as err: #异常处理命令行读入数据类型 print(err, "in", num)