小言_互联网的博客

【Python基础】快速入门Python(讲解、习题)

333人阅读  评论(0)

0.导语

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。

在此之前,我已经写了以下几篇AI基础的快速入门,本篇文章讲解python语言的基础部分,也是后续内容的基础。

本文代码可以在github下载:

https://github.com/fengdu78/Data-Science-Notes/tree/master/1.python-basic

文件名:Python_Basic.ipynb

习题代码:

https://github.com/fengdu78/Data-Science-Notes/tree/master/1.python-basic/Python-100

1 Python数据类型

1.1 字符串

在Python中用引号引起来的字符集称之为字符串,比如:'hello'、"my Python"、"2+3"等都是字符串 Python中字符串中使用的引号可以是单引号、双引号跟三引号

print ('hello world!')
hello world!

   
  1. c = 'It is a "dog"!'
  2. print (c)
It is a "dog"!

   
  1. c1= "It's a dog!"
  2. print (c1)

   
  1. It 's a dog!

   
  1. c2 = "" "hello
  2. world
  3. !" ""
  4. print (c2)

   
  1. hello
  2. world
  3. !
  • 转义字符''

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\ \表示的字符就是\


   
  1. print ( 'It\'s a dog!')
  2. print ( "hello world!\nhello Python!")
  3. print ( '\\\t\\')

   
  1. It 's a dog!
  2. hello world!
  3. hello Python!
  4. \ \

原样输出引号内字符串可以使用在引号前加r

print (r'\\\t\\')
\\\t\\
  • 子字符串及运算


   
  1. s = 'Python'
  2. print( 'Py'in s)
  3. print( 'py'in s)

   
  1. True
  2. False

取子字符串有两种方法,使用[]索引或者切片运算法[:],这两个方法使用面非常广

print (s[2])
t
print (s[1:4])
yth
  • 字符串连接与格式化输出


   
  1. word1 = '"hello"'
  2. word2 = '"world"'
  3. sentence = word1.strip( '"') + ' ' + word2.strip( '"') + '!'
  4. print( 'The first word is %s, and the second word is %s' %(word1, word2))
  5. print (sentence)

   
  1. The first word is "hello", and the second word is "world"
  2. hello world!

1.2 整数与浮点数

整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样


   
  1. i = 7
  2. print (i)
7
7 + 3
10
7 - 3
4
7 * 3
21
7 ** 3
343
7 / 3#Python3之后,整数除法和浮点数除法已经没有差异
2.3333333333333335
7 % 3
1
7//3
2浮点数
7.0 / 3
2.3333333333333335
3.14 * 10 ** 2
314.0

其它表示方法

0b1111
15
0xff
255
1.2e-5
1.2e-05

更多运算


   
  1. import math
  2. print (math.log(math.e)) # 更多运算可查阅文档
1.0

1.3 布尔值

True
True
False
False
TrueandFalse
False
TrueorFalse
True
notTrue
False
True + False
1
18 >= 6 * 3or'py'in'Python'
True
18 >= 6 * 3and'py'in'Python'
False
18 >= 6 * 3and'Py'in'Python'
True

1.4 日期时间


   
  1. import time
  2. now = time.strptime( '2016-07-20', '%Y-%m-%d')
  3. print (now)
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=202, tm_isdst=-1)
time.strftime('%Y-%m-%d', now)
'2016-07-20'

   
  1. import datetime
  2. someDay = datetime.date( 1999, 2, 10)
  3. anotherDay = datetime.date( 1999, 2, 15)
  4. deltaDay = anotherDay - someDay
  5. deltaDay.days
5

还有其他一些datetime格式

  • 查看变量类型

type(None)
NoneType
type(1.0)
float
type(True)
bool

   
  1. s= "NoneType"
  2. type(s)
str
  • 类型转换

str(10086)
'10086'
?float()
float(10086)
10086.0
int('10086')
10086
complex(10086)
(10086+0j)

2 Python数据结构

列表(list)、元组(tuple)、集合(set)、字典(dict)

2.1 列表(list)

用来存储一连串元素的容器,列表用[]来表示,其中元素的类型可不相同。


   
  1. mylist= [ 0, 1, 2, 3, 4, 5]
  2. print (mylist)
[0, 1, 2, 3, 4, 5]

列表索引和切片


   
  1. # 索引从 0开始,含左不含右
  2. print ( '[4]=', mylist[ 4])
  3. print ( '[-4]=', mylist[ -4])
  4. print ( '[0:4]=', mylist[ 0: 4])
  5. print ( '[:4]=', mylist[: 4])#dddd
  6. print( '[4:]=', mylist[ 4:])
  7. print ( '[0:4:2]=', mylist[ 0: 4: 2])
  8. print ( '[-5:-1:]=', mylist[ -5: -1:])
  9. print ( '[-2::-1]=', mylist[ -2:: -1])

   
  1. [ 4]= 4
  2. [ -4]= 2
  3. [ 0: 4]= [ 0, 1, 2, 3]
  4. [: 4]= [ 0, 1, 2, 3]
  5. [ 4:]= [ 4, 5]
  6. [ 0: 4: 2]= [ 0, 2]
  7. [ -5: -1:]= [ 1, 2, 3, 4]
  8. [ -2:: -1]= [ 4, 3, 2, 1, 0]

修改列表


   
  1. mylist[ 3] = "小月"
  2. print (mylist[ 3])
  3. mylist[ 5]= "小楠"
  4. print (mylist[ 5])
  5. mylist[ 5]= 19978
  6. print (mylist[ 5])

   
  1. 小月
  2. 小楠
  3. 19978
print (mylist)
[0, 1, 2, '小月', 4, 19978]

插入元素


   
  1. mylist. append( 'han') # 添加到尾部
  2. mylist.extend([ 'long', 'wan'])
  3. print (mylist)
[0, 1, 2, '小月', 4, 19978, 'han', 'long', 'wan']

   
  1. scores = [ 90, 80, 75, 66]
  2. mylist.insert( 1, scores) # 添加到指定位置
  3. mylist
[0, [90, 80, 75, 66], 1, 2, '小月', 4, 19978, 'han', 'long', 'wan']
a=[]

删除元素


   
  1. print (mylist.pop( 1)) # 该函数返回被弹出的元素,不传入参数则删除最后一个元素
  2. print (mylist)

   
  1. [ 90, 80, 75, 66]
  2. [ 0, 1, 2, '小月', 4, 19978, 'han', 'long', 'wan']

判断元素是否在列表中等


   
  1. print( 'wan'in mylist)
  2. print ( 'han'notin mylist)

   
  1. True
  2. False
mylist.count('wan')
1
mylist.index('wan')
8

range函数生成整数列表


   
  1. print ( range( 10))
  2. print ( range( -5, 5))
  3. print ( range( -10, 10, 2))
  4. print ( range( 16, 10, -1))

   
  1. range( 0, 10)
  2. range( -5, 5)
  3. range( -10, 10, 2)
  4. range( 16, 10, -1)

2.2 元组(tuple)

元组类似列表,元组里面的元素也是进行索引计算。列表里面的元素的值可以修改,而元组里面的元素的值不能修改,只能读取。元组的符号是()。


   
  1. studentsTuple = ( "ming", "jun", "qiang", "wu", scores)
  2. studentsTuple
('ming', 'jun', 'qiang', 'wu', [90, 80, 75, 66])

   
  1. try:
  2. studentsTuple[ 1] = 'fu'
  3. except TypeError:
  4. print ( 'TypeError')
TypeError

   
  1. scores[ 1]= 100
  2. studentsTuple
('ming', 'jun', 'qiang', 'wu', [90, 100, 75, 66])
'ming'in studentsTuple
True
studentsTuple[0:4]
('ming', 'jun', 'qiang', 'wu')
studentsTuple.count('ming')
1
studentsTuple.index('jun')
1
len(studentsTuple)
5

2.3 集合(set)

Python中集合主要有两个功能,一个功能是进行集合操作,另一个功能是消除重复元素。集合的格式是:set(),其中()内可以是列表、字典或字符串,因为字符串是以列表的形式存储的


   
  1. studentsSet = set(mylist)
  2. print (studentsSet)
{0, 1, 2, 'han', 4, '小月', 19978, 'wan', 'long'}

   
  1. studentsSet.add( 'xu')
  2. print (studentsSet)
{0, 1, 2, 'han', 4, '小月', 19978, 'wan', 'long', 'xu'}

   
  1. studentsSet.remove( 'xu')
  2. print (studentsSet)
{0, 1, 2, 'han', 4, '小月', 19978, 'wan', 'long'}
mylist.sort()#会出错

   
  1. ---------------------------------------------------------------------------
  2. TypeError Traceback (most recent call last)
  3. <ipython-input -69 -7309caa8a1d6> in <module>()
  4. ----> 1 mylist.sort()
  5. TypeError: '<' not supported between instances of 'str' and 'int'

   
  1. a = set( "abcnmaaaaggsng")
  2. print ( 'a=', a)
a= {'b', 'a', 'm', 'c', 'g', 's', 'n'}

   
  1. b = set( "cdfm")
  2. print ( 'b=', b)
b= {'m', 'd', 'c', 'f'}

   
  1. #交集
  2. x = a & b
  3. print( 'x=', x)
x= {'m', 'c'}

   
  1. #并集
  2. y = a | b
  3. print ( 'y=', y)
  4. #差集
  5. z = a - b
  6. print( 'z=', z)
  7. #去除重复元素
  8. new = set(a)
  9. print( z)

   
  1. y= { 'b', 'a', 'f', 'd', 'm', 'c', 'g', 's', 'n'}
  2. z= { 'b', 'a', 'g', 's', 'n'}
  3. { 'b', 'a', 'g', 's', 'n'}

2.4字典(dict)

Python中的字典dict也叫做关联数组,用大括号{}括起来,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度,其中key不能重复。


   
  1. k = { "name": "weiwei", "home": "guilin"}
  2. print (k[ "home"])
guilin

   
  1. print( k.keys())
  2. print( k.values())

   
  1. dict_keys([ 'name', 'home'])
  2. dict_values([ 'weiwei', 'guilin'])

添加、修改字典里面的项目


   
  1. k[ "like"] = "music"
  2. k[ 'name'] = 'guangzhou'
  3. print (k)
{'name': 'guangzhou', 'home': 'guilin', 'like': 'music'}
k.get('edu', -1) # 通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value
-1

删除key-value元素


   
  1. k.pop( 'like')
  2. print (k)
{'name': 'guangzhou', 'home': 'guilin'}

2.5 列表、元组、集合、字典的互相转换

type(mylist)
list
tuple(mylist)
(0, 1, 2, '小月', 4, 19978, 'han', 'long', 'wan')
list(k)
['name', 'home']

   
  1. zl = zip(( 'A', 'B', 'C'), [ 1, 2, 3, 4]) # zip可以将列表、元组、集合、字典‘缝合’起来
  2. print (zl)
  3. print (dict(zl))

   
  1. <zip object at 0x0000015AFAA612C8>
  2. { 'A': 1, 'B': 2, 'C': 3}

3 Python控制流

在Python中通常的情况下程序的执行是从上往下执行的,而某些时候我们为了改变程序的执行顺序,使用控制流语句控制程序执行方式。Python中有三种控制流类型:顺序结构、分支结构、循环结构。

另外,Python可以使用分号";"分隔语句,但一般是使用换行来分隔;语句块不用大括号"{}",而使用缩进(可以使用四个空格)来表示

3.1 顺序结构


   
  1. s = '7'
  2. num = int(s) # 一般不使用这种分隔方式
  3. num -= 1# num = num - 1
  4. num *= 6# num = num * 6
  5. print (num)
36

3.2 分支结构:Python中if语句是用来判断选择执行哪个语句块的

if <True or Flase表达式>:

执行语句块

elif <True or Flase表达式>:

执行语句块

else:       # 都不满足

   执行语句块

#elif子句可以有多条,elif和else部分可省略


   
  1. salary = 1000
  2. if salary > 10000:
  3. print ( "Wow!!!!!!!")
  4. elif salary > 5000:
  5. print ( "That's OK.")
  6. elif salary > 3000:
  7. print ( "5555555555")
  8. else:
  9. print ( "..........")
..........

3.3 循环结构

while 循环

while <True or Flase表达式>:

   循环执行语句块

else:         # 不满足条件

  执行语句块

#else部分可以省略


   
  1. a = 1
  2. while a < 10:
  3. if a <= 5:
  4. print (a)
  5. else:
  6. print ( "Hello")
  7. a = a + 1
  8. else:
  9. print ( "Done")

   
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. Hello
  7. Hello
  8. Hello
  9. Hello
  10. Done
  • for 循环 for (条件变量) in (集合):

    执行语句块

“集合”并不单指set,而是“形似”集合的列表、元组、字典、数组都可以进行循环

条件变量可以有多个


   
  1. heights = { 'Yao': 226, 'Sharq': 216, 'AI': 183}
  2. for i in heights:
  3. print (i, heights[i])

   
  1. Yao 226
  2. Sharq 216
  3. AI 183

   
  1. for key, value in heights.items():
  2. print(key, value)

   
  1. Yao 226
  2. Sharq 216
  3. AI 183

   
  1. total = 0
  2. for i in range( 1, 101):
  3. total += i#total=total+i
  4. print (total)
5050

3.4 break、continue和pass

break:跳出循环

continue:跳出当前循环,继续下一次循环

pass:占位符,什么也不做


   
  1. for i in range( 1, 5):
  2. if i == 3:
  3. break
  4. print (i)

   
  1. 1
  2. 2

   
  1. for i in range( 1, 5):
  2. if i == 3:
  3. continue
  4. print (i)

   
  1. 1
  2. 2
  3. 4

   
  1. for i in range( 1, 5):
  2. if i == 3:
  3. pass
  4. print (i)

   
  1. 1
  2. 2
  3. 3
  4. 4

3.5 列表生成式

三种形式

  • [<表达式> for (条件变量) in (集合)]

  • [<表达式> for (条件变量) in (集合) if <'True or False'表达式>]

  • [<表达式> if <'True or False'表达式> else <表达式>  for (条件变量) in (集合) ]


   
  1. fruits = [ '"Apple', 'Watermelon', '"Banana"']
  2. [x.strip( '"') for x in fruits]
['Apple', 'Watermelon', 'Banana']

   
  1. # 另一种写法
  2. test_list=[]
  3. for x in fruits:
  4. x=x.strip( '"')
  5. test_list. append(x)
  6. test_list
['Apple', 'Watermelon', 'Banana']
[x ** 2for x in range(21) if x%2]
[1, 9, 25, 49, 81, 121, 169, 225, 289, 361]

   
  1. # 另一种写法
  2. test_list=[]
  3. for x in range( 21):
  4. if x% 2:
  5. x=x** 2
  6. test_list. append(x)
  7. test_list
[1, 9, 25, 49, 81, 121, 169, 225, 289, 361]
[m + n for m in'ABC'for n in'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

   
  1. # 另一种写法
  2. test_list=[]
  3. for m in 'ABC':
  4. for n in 'XYZ':
  5. x=m+n
  6. test_list. append(x)
  7. test_list
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

   
  1. d = { 'x': 'A', 'y': 'B', 'z': 'C' }
  2. [k + '=' + v for k, v in d.items()]
['x=A', 'y=B', 'z=C']

   
  1. # 另一种写法
  2. test_list=[]
  3. for k, v in d.items():
  4. x=k + '=' + v
  5. test_list. append(x)
  6. test_list
['x=A', 'y=B', 'z=C']

4 Python函数

函数是用来封装特定功能的实体,可对不同类型和结构的数据进行操作,达到预定目标。

4.1 调用函数

  • Python内置了很多有用的函数,我们可以直接调用,进行数据分析时多数情况下是通过调用定义好的函数来操作数据的


   
  1. str1 = "as"
  2. int1 = -9
  3. print ( len(str1))
  4. print (abs(int1))

   
  1. 2
  2. 9

   
  1. fruits = [ 'Apple', 'Banana', 'Melon']
  2. fruits. append( 'Grape')
  3. print (fruits)
['Apple', 'Banana', 'Melon', 'Grape']

4.2 定义函数

当系统自带函数不足以完成指定的功能时,需要用户自定义函数来完成。def 函数名():函数内容 函数内容 <return 返回值>


   
  1. def my_abs(x):
  2. if x >= 0:
  3. return x
  4. else:
  5. return -x
  6. my_abs( -9)
9

可以没有return


   
  1. def filter_fruit(someList, d):
  2. for i in someList:
  3. if i == d:
  4. someList.remove(i)
  5. else:
  6. pass
  7. print (filter_fruit(fruits, 'Melon'))
  8. print (fruits)

   
  1. None
  2. [ 'Apple', 'Banana', 'Grape']

多个返回值的情况


   
  1. def test(i, j):
  2. k = i * j
  3. return i, j, k
  4. a , b , c = test( 4, 5)
  5. print (a, b , c)
  6. type(test( 4, 5))

   
  1. 4 5 20
  2. tuple

4.3 高阶函数

  • 把另一个函数作为参数传入一个函数,这样的函数称为高阶函数

函数本身也可以赋值给变量,函数与其它对象具有同等地位


   
  1. myFunction = abs
  2. myFunction( -9)
9
  • 参数传入函数


   
  1. def add(x, y, f):
  2. return f(x) + f(y)
  3. add( 7, -5, myFunction)
12
  • 常用高阶函数

map/reduce: map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回;reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算


   
  1. myList = [ -1, 2, -3, 4, -5, 6, 7]
  2. map(abs, myList)
<map at 0x15afaa00630>

   
  1. from functools import reduce
  2. def powerAdd(a, b):
  3. return pow(a, 2) + pow(b, 2)
  4. reduce(powerAdd, myList) # 是否是计算平方和?
3560020598205630145296938

filter:filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素


   
  1. def is_odd(x):
  2. return x % 3# 0被判断为False,其它被判断为True
  3. filter(is_odd, myList)
<filter at 0x15afa9f0588>

sorted: 实现对序列排序,默认情况下对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1

默认排序:数字大小或字母序(针对字符串)

sorted(myList)
[-5, -3, -1, 2, 4, 6, 7]

*练习:自定义一个排序规则函数,可将列表中字符串忽略大小写地,按字母序排列,列表为['Apple', 'orange', 'Peach', 'banana']。提示:字母转换为大写的方法为some_str.upper(),转换为小写使用some_str.lower()

  • 返回函数: 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回


   
  1. def powAdd(x, y):
  2. def power(n):
  3. return pow(x, n) + pow(y, n)
  4. return power
  5. myF = powAdd( 3, 4)
  6. myF
<function __main__.powAdd.<locals>.power>
myF(2)
25
  • 匿名函数:高阶函数传入函数时,不需要显式地定义函数,直接传入匿名函数更方便


   
  1. f = lambda x: x * x
  2. f( 4)
16

等同于:


   
  1. def f(x):
  2. return x * x
map(lambda x: x * x, myList)
<map at 0x15afaa1d0f0>

匿名函数可以传入多个参数

reduce(lambda x, y: x + y, map(lambda x: x * x, myList))
140

返回函数可以是匿名函数


   
  1. def powAdd1(x, y):
  2. returnlambda n: pow(x, n) + pow(y, n)
  3. lamb = powAdd1( 3, 4)
  4. lamb( 2)
25

其它

  • 标识符第一个字符只能是字母或下划线,第一个字符不能出现数字或其他字符;标识符除第一个字符外,其他部分可以是字母或者下划线或者数字,标识符大小写敏感,比如name跟Name是不同的标识符。

  • Python规范:

  • 类标识符每个字符第一个字母大写;

  • 对象\变量标识符的第一个字母小写,其余首字母大写,或使用下划线'_' 连接;

  • 函数命名同普通对象。

  • 关键字

关键字是指系统中自带的具备特定含义的标识符


   
  1. # 查看一下关键字有哪些,避免关键字做自定义标识符
  2. import keyword
  3. print (keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
  • 注释

Python中的注释一般用#进行注释

  • 帮助

Python中的注释一般用?查看帮助

练习题

这个仓库一共有24个Jupyter notebook文件(每天一个),每个文件有3-5个练习,一共104题。

如果您是python的初学者,那么这100多个练习可以帮助您轻松地使用Python。

仓库给定的问题非常简单和容易理解。初学者每天可以尝试3-5个问题,需要一点时间来解决,但肯定会学到一些新的东西(不管你有多懒),经过一个月的常规练习,把练习做完看懂,只要能独立解决100多个问题,基本上Python就入门了。

来源:

https://github.com/darkprinx/100-plus-Python-programming-exercises-extended

仓库内容

这个仓库一共有24个Jupyter notebook文件(每天一个),每个文件有3-5个练习,一共104题。

问题模板格式

  • 提问

  • 提示

  • 解答

在这个仓库是用Python3 语言。作者修正一些随机错误和变量命名,符合PEP8规范,仓库分为Jupyter notebook格式(文件夹名称:notebooks)和Markdown格式(文件夹名称:Status)两个文件夹,两者内容一致。

内容截图

内容截图

习题下载

本文代码可以在github下载:

https://github.com/fengdu78/Data-Science-Notes/tree/master/1.python-basic

文件名:Python_Basic.ipynb

习题代码:

https://github.com/fengdu78/Data-Science-Notes/tree/master/1.python-basic/Python-100


转载:https://blog.csdn.net/fengdu78/article/details/113696703
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场