python基础学习

本文最后更新于:July 14, 2022 pm

一、python函数

1
2
3
4
5
6
7
8
#自定义函数
var = float(input('请输入一个数字:'))
if var >0:
print('正数')
elif var == 0:
print('为零')
else:
print("负数")
1
2
3
4
5
6
7
8
9
10
11
12
13
var = float(input('请输入一个数字'))

def f(x):
if x > 0:
print('正数')
elif x == 0:
print('为零')
else:

print("负数")
f(var)
var2 = float(input('请输第二个数字'))
f(var2)
1
2
3
4
5
6
7
8
9
10
11
12
13
#    关于return
def f1(x):
y = 2**x
return y
print(f1(5))

def f(lst1,lst2 = ['a','b','c']):
m = []
for i in range(len(lst1)):
m.append([lst1[i],lst2[i]])
return(m)
a = [1,2,3]
print(f(a))
1
2
3
4
5
#可变参数
def f(*x):
return(x)
print(f(1,6,9))
print(type(f(1,6,9))) #元祖类型
1
2
3
4
5
6
#拆分字符串
def f(*x):
for i in x:
print(i)
x_input = input("请输入一个字符串:")
f(x_input)
1
2
3
4
5
6
7
#  求平均值  #
def f(*x):
s = 0
for i in x:
s= s+ i
return(s/len(x))
print(f(1,2,2,3,3))
1
2
3
4
5
6
7
#和下方相关
def f(m):
m = '呵呵'
print(m)
return(m)
a = 10
print(a,f(a))
1
2
3
4
5
6
7
8
9
#global语句   --  把局部变量变成全局变量
def f():
global a
a = 'haha'
print("函数内转变为全局变量:%s"%a)

a = input("请输入一个数字:")
print("输入变量值:%s"%a)
f()
1
2
3
4
5
6
7
#匿名函数
def fun(a,b,c):
return a+b+c
print(fun(2,3,4))

f = lambda a,b,c:a+b+c
print(f(2,3,4))
1
2
3
#  lamda 求元素个数
count = lambda lst:len(lst)
print(count([1,2,3,4,5,6,7]))
1
2
3
4
5
def f(*var):
lst = list(var)
lst_re = sorted(lst,reverse = True) #从大到小排列
return lst_re
print(f(1,3,3,33,345,55))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def f(*scores):
s = 0
m = []
for i in scores:
if i>90:
m.append('A')
elif i>60 and i<90:
m.append('B')
else:
m.append('C')
s = s +i
mean = s/len(scores)
return([m,mean])
result = f(89,92,100,62,88)
print(result[0])
print(result[1])
1
2
3
4
5
#   判断是不是特定类型的
#st = ....
#st.isalpha() 字母
#st.isspace() 空格
#st.isdigit() 数字

二、python数据读写

1. txt文本数据读取

pandas可以使用函数read_table()读取txt文件
1
2
3
4
5
6
7
8
9
10
import pandas as pd
# 根据正则解析来辨识间隔符号
txtframe = pd.read_table('./Data/tmp_4.txt',sep=r'\s+')
print(txtframe, "\n-----*-----")
txtframe = pd.read_table('./Data/tmp_4.txt',sep=r'\s+',header=None,engine='python')
print(txtframe, "\n-----*-----")
# 使用skiprows选项,可以排除多余的行。把要排除的行的行号放到数组中,赋给该选项即可。
txtframe = pd.read_table('./Data/tmp_4.txt',sep=r'\s+',skiprows=[3,4])
txtframe = txtframe.reset_index(drop=True)
print(txtframe)
由于没找到pandas对txt文件的写入,但是想想应该和写入csv文件大同小异。这里补充一下numpy对txt文件的处理。
1
2
3
4
import numpy as np
data = np.loadtxt('./Data/tmp_2.csv',delimiter=',')
print(data)
np.savetxt('./Data/tmp_7.txt',data,fmt='%d',delimiter=',',newline='\n')

2. csv文本数据读写

pandas支持多种数据读写方法,这里列举一些方法。

pandas中read_csv()和to_csv()可以处理csv文件
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
33
import pandas as pd
a = np.arange(1,26,1)
a = a.reshape((5,5))

b = pd.DataFrame(a,columns=['i1','i2','i3','i4','i5'])
#!!!写入文件

b.to_csv('./Data/tmp_1.csv')

# 使用index和 header选项,把它们的值设置为False,可取消默认写入index和header
b.to_csv('./Data/tmp_2.csv',index =False,header=False)

# 可以用to_csv()函数的na_rep选项把空字段替换为你需要的值。常用值有NULL、0和NaN
b.to_csv('./Data/tmp_3.csv',na_rep="空")

#!!!读取文件

csvframe = pd.read_csv('./Data/tmp_1.csv')
print(csvframe, "\n-----*-----")
csvframe = pd.read_table('./Data/tmp_1.csv',sep=',')
print(csvframe, "\n-----*-----")
# 设置header为None,表示文件没有表头,第一行为数据,添加默认表头
csvframe = pd.read_csv('./Data/tmp_2.csv',header=None)
print(csvframe, "\n-----*-----")
# 指定表头。我们假设文件中有m列数据,设定的names有n个列名。
# 如果m>n,默认从最后一列(右侧)开始匹配,多余的右侧第一列作为index,其余数据舍弃
# 如果m==n,正常匹配
# 如果m<n,默认从第一列(左侧)开始匹配,多余的列名全部赋值Nan
csvframe = pd.read_csv('./Data/tmp_2.csv',names=['d1','d2','d3','d4','d5','d6'])
print(csvframe, "\n-----*-----")
#等级索引,可以指定以某一列为索引,支持多列索引。
csvframe = pd.read_csv('./Data/tmp_3.csv',index_col=['i1','i2'])
print(csvframe, "\n-----*-----")

3. excel文本数据读写

使用xlrd读取excel读取数据
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
33
34
35
36
37
38
39
40
41
42
43
44
45
import xlrd

# 设置路径
path = './Data/1.xlsx'
# 打开execl
workbook = xlrd.open_workbook(path)

# 输出Excel文件中所有sheet的名字
print(workbook.sheet_names())

# 根据sheet索引或者名称获取sheet内容
Data_sheet = workbook.sheets()[0] # 通过索引获取
# Data_sheet = workbook.sheet_by_index(0) # 通过索引获取
# Data_sheet = workbook.sheet_by_name(u'名称') # 通过名称获取


print(Data_sheet.name) # 获取sheet名称
rowNum = Data_sheet.nrows # sheet行数
colNum = Data_sheet.ncols # sheet列数

# 获取所有单元格的内容
for i in range(rowNum):
for j in range(colNum):
print('{0} '.format(Data_sheet.cell_value(i, j)))

# 获取整行和整列的值(列表)
rows = Data_sheet.row_values(0) # 获取第一行内容
cols = Data_sheet.col_values(1) # 获取第二列内容
print (rows)
print (cols)

# 获取单元格内容
cell_A1 = Data_sheet.cell(0, 0).value
cell_B1 = Data_sheet.row(0)[1].value # 使用行索引
cell_A2 = Data_sheet.col(0)[1].value # 使用列索引
print(cell_A1, cell_B1, cell_A2)

# 获取单元格内容的数据类型
# ctype:0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
print('cell(0,0)数据类型:', Data_sheet.cell(0, 0).ctype)

# 获取单元格内容为日期的数据
date_value = xlrd.xldate_as_tuple(Data_sheet.cell_value(1,0),workbook.datemode)
print(type(date_value), date_value)
print('%d:%d:%d' % (date_value[0:3]))

三、Python条件及判断循环语句

1
2
3
4
#基础的条件判断
age = 16
if age < 18:
print('小于18周岁')
1
2
3
4
#输入函数Input()
score = input("请输入成绩:\n")
print(score,type(score))
print('该学生的成绩为:%s'%score)
1
2
3
4
5
6
7
#if-else(可以是多个if-else)
age = float(input("年龄为:"))
if age < 18:
print('小于18周岁')
else:
print("成年了")
print("finished!")
1
2
3
4
5
6
7
8
#单语句多条件判断:  and or
num = 5
if num >= 0 and num <= 10:
print('hello')

num = 10
if num <=0 or num >=10:
print('hello')
1
2
3
4
5
6
7
#for循环语句
for i in range(5):
print('hello')

lst = list(range(10))
for i in lst[:5]:
print(i)
1
2
3
4
#嵌套循环(不要用太多的循环)
for i in range(3):
for j in range(3):
print(i,j)
1
2
3
4
5
6
7
8
9
######   等差数列   #####
a = float(input("请输入首相:"))
n = int(input("请输入项数:"))
d = float(input("请输入公差"))
s = 0
for i in range(n):
An = a + d*i
s = s + An
print(s)
1
2
3
4
5
6
7
8
9
10
11
12
###  形成字典   ###
lst1 = ['a','b','c']
lst2 = [1,2,3]

m = []
for i in range(3):
lsti = [lst1[i],lst2[i]]
print(lsti)
m.append(lsti)
print(m)
dic = dict(m)
print(dic)
1
2
3
4
5
#while循环
count = 0
while count <9:
print(count)
count = count+1
1
2
3
4
5
6
7
# while -  else语句
count = 0
while count < 5:
print(count,"小于5")
count = count + 1
else:
print(count,"大于5")
1
2
3
4
5
6
7
8
9
10
#循环控制语句
#break语句(跳出整个循环)
s = 0
n = 1
while n>0:
s = s + n
n = n+1
if n ==20:
break
print(s)
1
2
3
4
5
6
7
8
9
10
#continue语句(跳出本次循环,继续下一次循环)
s = 0
for i in range(10):
if i%2 ==0:
s = s + 1
else:
continue
print(i)
print("第%i次循环"%(i/2))
print("结果为;%i" %s)
1
2
3
4
5
6
#pass语句(不中断也不跳过)
for i in 'python':
if i == 'h':
pass
print('当前字母是 : h,但是我pass了')
print('当前字母是 :',i)