目录
一、数值运算
import os
os.path.abspath('.')
'C:\\Users\\research1'
* %是取余的
10%3
1
10/3
3.3333333333333335
2**3
8
* 几种常用类型
- int
- float
- str
- bool
x = 3
type(x)
int
str(x)
'3'
* 基本数值操作
abs(-15.6)
15.6
round(15.6)
16
round(15.4)
15
min(2,6,4,5)
2
max(2,3,4,5)
5
1.3e-5
1.3e-05
1.3e5
130000.0
* 十六进制——
0xFF
255
tang=True
type(tang)
bool
3>5
False
tang = 3
1<tang<5
True
二、字符串操作
tang_str='hello python'
print(tang_str)
hello python
tang = 'hello'+'python'
tang
'hellopython'
tang_str * 3
'hello pythonhello pythonhello python'
len(tang)
11
* 字符串操作
tang.split()默认以空格切分
tang = '1 2 3 4 5'
tang.split()
['1', '2', '3', '4', '5']
tang = '1,2,3,4,5'
tang = tang.split(',')
tang
['1', '2', '3', '4', '5']
* 能切能合
tang_str = ' '
tang_str.join(tang)
'1 2 3 4 5'
* 字符串替换操作
tang = 'Hello python'
tang2 = tang.replace('python','world')
tang2
'Hello world'
* 字符串大小写转换
tang2.upper()
'HELLO WORLD'
tang2= 'HELLO WORLD'
tang2.lower()
'hello world'
* 字符串去空格
tang=' hello python '
tang.strip()
'hello python'
tang.lstrip()
'hello python '
tang.rstrip()
' hello python'
'{} {} {}' .format('tang','li','xiao')
'tang li xiao'
'{2} {1} {0}'.format('tang','li','xiao')
'xiao li tang'
'{tang} {li} {xiao}'.format(tang = 10,li = 5, xiao = 1)
'10 5 1'
tang = 'tang li xiao'
a = 123
b = 456
c = 789
result = '%s %f %d' %(tang,b,c)
result
'tang li xiao 456.000000 789'
%f 浮点数格式 %d 整数格式 %s 字符串格式
三、索引结构
- 从前面是0开始
- 从后面是-1开始
tang = 'tang li zhang'
tang[0]
't'
tang[5]
'l'
tang[-1]
'g'
tang[-5]
'z'
-
切片
- : 表示从哪到哪 左闭右开的区间
tang[0:4]
'tang'
tang[5:]
'li zhang'
tang[:7]
'tang li'
tang[1:-2]
'ang li zha'
tang[-6:]
' zhang'
tang[:]
'tang li zhang'
tang[::2]
'tn izag'
四、列表
- 通过[]来创建一个list结构
- 里面放任何类型都可以,没有长度限制
tang = []
type(tang)
list
tang = [1,2,3,4]
tang
[1, 2, 3, 4]
tang = ['1','2','3','4']
tang
['1', '2', '3', '4']
tang = [1,'xiao ming',3.5]
tang
[1, 'xiao ming', 3.5]
tang = list()
type(tang)
list
tang = list([1,2,3])
tang
[1, 2, 3]
*list操作
len(tang)
3
a = [123,456]
b = ['tang','xiao']
a+b
[123, 456, 'tang', 'xiao']
a * 2
[123, 456, 123, 456]
a[0]
123
a[0:]
[123, 456]
a[0] = 789
a
[789, 456]
a[:] = ['tang','xiao']
a
['tang', 'xiao']
b = [1,2,3,4,5,6]
del b[0]
b
[2, 3, 4, 5, 6]
del b[3:]
b
[2, 3, 4]
2 in b
True
8 not in b
True
tang = 'tang li xiao'
'xiao' in tang
True
* list核心操作
a = [1,2,[3,4]]
a
[1, 2, [3, 4]]
a[2]
[3, 4]
a[2][1]
4
tang = ['apple','banana','apple','apple','apple','banana','banana']
tang.count('apple')
4
tang = ['apple','1','2','3','4','5','6']
tang.index('apple')
0
tang[0]
'apple'
* 列表添加
tang = []
tang.append('tang')
tang
['tang']
tang.append(['xiao','li'])
tang
['tang', ['xiao', 'li'], ['xiao', 'li'], ['xiao', 'li']]
* 列表插入
tang.insert(2,'python')
tang
['tang', ['xiao', 'li'], 'python', ['xiao', 'li'], ['xiao', 'li']]
-
列表删除
tang.remove(['xiao', 'li'])
tang
['tang', 'python', ['xiao', 'li'], ['xiao', 'li']]
-
列表弹出
tang.pop()
'python'
tang
['tang']
-
排序
tang1 = [1,3,6,8,4]
tang1.sort()
tang1
[1, 3, 4, 6, 8]
tang1 = [1,3,6,8,4]
tang2 = sorted(tang1)
tang1
[1, 3, 6, 8, 4]
tang2
[1, 3, 4, 6, 8]
tang = ['li','xiao','tang']
tang.reverse()
tang
['tang', 'xiao', 'li']
五、字典基础定义
tang = {}
type(tang)
dict
tang=dict()
type(tang)
dict
tang
{}
-
字典结构操作-增删改查
- key - value
tang['first'] = 123
tang
{'first': 123}
tang['python'] = 456
tang
{'first': 123, 'python': 456}
tang['python']
456
tang['python']=300
tang
{'first': 123, 'python': 300}
tang = {'tang':123,'li':456,'xiao':789}
tang
{'tang': 123, 'li': 456, 'xiao': 789}
字典的核心操作
tang_value = [1,2,3]
tang = {}
tang['xiao'] = tang_value
tang['li'] = 3
tang['zhang'] = 'hello'
tang
{'xiao': [1, 2, 3], 'li': 3, 'zhang': 'hello'}
- 字典的嵌套
tang = {}
d1 = {'xiao':123,'zhang':456}
d2 = {'xiao1':456,'zhang1':789}
tang['test1'] = d1
tang['test2'] = d2
tang
{'test1': {'xiao': 123, 'zhang': 456}, 'test2': {'xiao1': 456, 'zhang1': 789}}
tang = dict([('tang',123),('xiao',456)])
tang
{'tang': 123, 'xiao': 456}
- 对键值进行操作
tang['tang'] += 1
tang
{'tang': 124, 'xiao': 456}
- get方法
tang.get('tang')
124
tang['tang']
124
tang['fengzi']
KeyError Traceback (most recent call last)
Cell In[15], line 1 ----> 1 tang['fengzi']
KeyError: 'fengzi'
tang.get('fengzi','没有')
'没有'
- pop方法
tang
{'tang': 124, 'xiao': 456}
tang.pop('tang')
124
tang
{'xiao': 456}
- del方法
del tang['xiao']
tang
{}
- update方法
tang = {'tang':123,'xiao':456}
tang2 = {'tang':789,'li':400}
tang.update(tang2)
tang
{'tang': 789, 'xiao': 456, 'li': 400}
'tang' in tang
True
'hello' in tang
False
- keys()
- values()
- items()
tang.keys()
dict_keys(['tang', 'xiao', 'li'])
tang.values()
dict_values([789, 456, 400])
tang.items()
dict_items([('tang', 789), ('xiao', 456), ('li', 400)])
六、set结构
- 集合会保留下来唯一的那些元素
tang = [123,123,456,789]
tang = set(tang)
tang
{123, 456, 789}
tang = set()
type(tang)
set
tang = set([123,123,123,456,456,456,78])
tang
{78, 123, 456}
tang = {1,1,1,3,4}
tang
{1, 3, 4}
-
集合的操作
a = {1,2,3,4}
b = {2,3,4,5}
- 并集
a.union(b)
{1, 2, 3, 4, 5}
b.union(a)
{1, 2, 3, 4, 5}
a|b
{1, 2, 3, 4, 5}
- 交集
a.intersection(b)
{2, 3, 4}
b.intersection(a)
{2, 3, 4}
a & b
{2, 3, 4}
- 差集
a - b
{1}
b - a
{5}
-
判断包含关系
a = {1,2,3,4,5,6}
b = {2,3,4}
b.issubset(a)
True
a.issubset(b)
False
b <= a
True
b > a
False
a <= a
True
a <a
False
- add()方法
a = {1,2,3}
a.add(4)
a
{1, 2, 3, 4}
- update()方法
a.update([4,5,6])
a
{1, 2, 3, 4, 5, 6}
- remove()方法
a.remove(1)
a
{2, 3, 4, 5, 6}
- pop()方法
a.pop()
a
{3, 4, 5, 6}
七、赋值机制
tang = 1000
zhang = tang
- 以上两个变量指向同一内存空间
id(tang)
2519821114096
id(zhang)
2519821114096
tang is zhang
True
zhang = 123456
id(zhang)
2519821114960
tang is zhang
False
- 即便赋值一样,内存地址也不同
xiao = 1000
ming = 1000
id(xiao)
2519821114384
id(ming)
2519821114992
- 为了提高效率,对于简单的值,内存地址相同
xiao = 1
ming = 1
id(xiao)
140718645590456
id(ming)
140718645590456
八、判断结构
tang = 100
if tang > 50:
print ('ok')
print('test')
ok
test
tang = 100
if tang > 200:
print('200')
elif tang<100:
print('100')
else:
print('100-200')
100-200
tang = [123,456,789]
if 123 in tang:
print('ok')
九、循环结构
-
while循环
tang = 0
while tang < 10:
print(tang)
tang +=2
0 2 4 6 8
tangs = set(['tang','xiao','zhang'])
while tangs:
tang = tangs.pop()
print(tang)
zhang xiao tang
tang = [100,200,300]
for i in range(3):
print(tang[i])
100 200 300
tang = [100,200,300]
for i in range(len(tang)):
print(tang[i])
100 200 300
-
continue
tang = [10,11,12,13,14,15]
for i in tang:
if i%2 ==0:
print(i)
else:
continue
print(i)
10 10 12 12 14 14
-
break
tang = [10,11,12,13,14,15]
for i in tang:
if i%2 ==0:
print(i)
else:
break
print(i)
10 10
十、函数
a = 10
b = 20
a+b
30
def print_value():
print('a=',a)
print_value()
a= 10
def add_ab(a,b):
print (a+b)
add_ab(5,10)
15
def add_ab(a,b):
return (a+b)
tang = add_ab('5','10')
tang
'510'
def add_ab(a=2,b=10):
return (a+b)
tang = add_ab()
tang
12
tang = add_ab(3,3)
tang
6
-
*args表示可变参数,可变参数接受的第一个参数是元组,可以传递多个参数,也可以传递0个参数
def add_number(a,*args):
for i in args:
a += i
return a
add_number(1,2,3,4)
10
def add_number(a,*args):
b = 0
for i in args:
a += i
b += a
return a,b
a,b = add_number(1,2,3,4)
print(a,b)
10 19
-
**kwargs表示关键字参数,可传入任意含有参数名的参数,关键字参数将任意长度的键值对作为参数传递给函数
def add_number2(a,**kwargs):
for arg,value in kwargs.items():
print (arg,value)
add_number2(1,x=100,y=200)
x 100 y 200
十一、模块与包
%%writefile tang.py
tang_v = 10
def tang_add(tang_list):
tang_sum = 0
for i in range(len(tang_list)):
tang_sum += tang_list[i]
return tang_sum
tang_list = [1,2,3,4,5]
print(tang_add(tang_list))
Overwriting tang.py
%run tang.py
15
import tang
15
import tang
第二次导入不再输出15
tang
<module 'tang' from 'C:\\Users\\research1\\tang.py'>
print(tang.tang_v)
10
tang.tang_v = 100
tang.tang_v
100
tang_list = [10,11,12]
tang.tang_add(tang_list)
33
import tang as tg
tg.tang_v
100
tg.tang_add(tang_list)
33
from tang import tang_v,tang_add
tang_v
100
tang_add(tang_list)
33
from tang import *
tang_v
100
tang_add(tang_list)
15
import os
os.remove('tang.py')
os.path.abspath('.')
'C:\\Users\\research1'
十二、异常处理模块
-
try...except...捕捉异常
import math
for i in range(14):
try:
input_number = input('write a number')
if input_number == 'q':
break
result = math.log(float(input_number))
print(result)
except ValueError:
# print('ValueError:input must > 0')
break
write a number 1
0.0
write a number 0
import math
for i in range(14):
try:
input_number = input('write a number')
if input_number == 'q':
break
result = 1/math.log(float(input_number))
print(result)
except ValueError:
print('ValueError:input must > 0')
write a number 2
1.4426950408889634
write a number 1
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) Cell In[5], line 7 5 if input_number == 'q': 6 break ----> 7 result = 1/math.log(float(input_number)) 8 print(result) 9 except ValueError: ZeroDivisionError: float division by zero
import math
for i in range(14):
try:
input_number = input('write a number')
if input_number == 'q':
break
result = 1/math.log(float(input_number))
print(result)
except Exception:
print('ValueError:input must > 0')
write a number 1
ValueError:input must > 0
write a number q
import math
for i in range(14):
try:
input_number = input('write a number')
if input_number == 'q':
break
result = 1/math.log(float(input_number))
print(result)
except ValueError:
print('ValueError:input must > 0')
except ZeroDivisionError:
print('ZeroDivisionError:log(value) must != 0')
except Exception:
print('unknown error')
write a number 1
ZeroDivisionError:log(value) must != 0
write a number 0
ValueError:input must > 0
write a number q
-
raise抛出异常
class TangError(ValueError):
pass
cur_list = ['tang','xiao','zhang']
while True:
cur_input = input()
if cur_input not in cur_list:
raise TangError('Invalid input: %s' %cur_input)
tang yy
--------------------------------------------------------------------------- TangError Traceback (most recent call last) Cell In[11], line 7 5 cur_input = input() 6 if cur_input not in cur_list: ----> 7 raise TangError('Invalid input: %s' %cur_input) TangError: Invalid input: yy
- finally,无论是否有异常,最后都可执行finally
try:
print('Hello')
finally:
print('finally')
Hello finally
try:
1/0
finally:
print('finally')
finally
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) Cell In[13], line 2 1 try: ----> 2 1/0 3 finally: 4 print('finally') ZeroDivisionError: division by zero
try:
1/0
except:
print('0000...')
finally:
print('finally')
0000... finally
十三、文件操作
%%writefile tang.txt
hello python
tang zhang li
jin tian tian qi hen hao
Writing tang.txt
-
读取文件
txt = open('./tang.txt')
txt_read = txt.read()
print(txt_read)
hello python tang zhang li jin tian tian qi hen hao
# 将文件指针重置到文件开头
txt.seek(0)
lines = txt.readlines()
print(type(lines))
print(lines)
<class 'list'> ['hello python\n', 'tang zhang li\n', 'jin tian tian qi hen hao\n']
for line in lines:
print('cur_line:',line)
cur_line: hello python cur_line: tang zhang li cur_line: jin tian tian qi hen hao
-
关闭文件
txt.close()
-
写内容
txt = open('tang_write','w')
txt.write('ni hao ya')
txt.write('\n')
txt.write('今天天气不错')
txt.close()
- w操作会覆盖之前写的内容
txt = open('tang_write','w')
txt.write('123')
txt.write('\n')
txt.write('456')
txt.close()
- a操作为追加模式
txt = open('tang_write','a')
txt.write('100')
txt.write('\n')
txt.write('200')
txt.close()
- 没有关闭txt,导致print(txt2.read())没有输出
txt = open('tang_write.txt','w')
for i in range(5):
txt.write(str(i)+'\n')
txt2 = open('tang_write.txt','r')
print(txt2.read())
txt = open('tang_write.txt','w')
for i in range(4):
txt.write(str(i)+'\n')
txt.close()
txt2 = open('tang_write.txt','r')
print(txt2.read())
0 1 2 3
txt = open('tang_write.txt','w')
try:
for i in range(100):
10/(i-50)
txt.write(str(i)+'\n')
except Exception:
print ('Erroe:',i)
finally:
txt.close()
Erroe: 50
-
with打开文件,最后可自动关闭文件
with open('tang_write.txt','w') as f:
f.write('jin tian tian qi bu cuo')
十四、类-面向对象
class people:
'帮助信息:xxxx'
number = 100 #所有实例都可共享
def __init__(self,name,age): #构造函数,初始化的方法,当创建一个类的时候,首先会调用它
self.name = name
self.age = age
def display(self):
print('number = :',people.number)
def display_name(self):
print(self.name)
people.__doc__
'帮助信息:xxxx'
p1 = people('xiaoming',30)
p2 = people('xiaolan',25)
- 调用属性,不需要加()
p1.name
'xiaoming'
p2.name
'xiaolan'
- 调用方法,需要加()
p1.display()
number = : 100
p2.display()
number = : 100
p2.name = 'jack'
p2.name
'jack'
del p2.name
p2.name
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In[24], line 1 ----> 1 p2.name AttributeError: 'people' object has no attribute 'name'
- 检查实例对象是否有对应的属性
hasattr(p1,'name')
True
hasattr(p1,'sex')
False
- 获取对应的属性内容
getattr(p1,'name')
'xiaoming'
- 修改对应的属性内容
setattr(p1,'name','danny')
getattr(p1,'name')
'danny'
- 删除属性
delattr(p1,'name')
getattr(p1,'name')
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In[31], line 1 ----> 1 getattr(p1,'name') AttributeError: 'people' object has no attribute 'name'
十五、时间操作
import time
print(time.time()) #1970.1.1开始到现在经历了多少时间
1733391637.8290913
print(time.localtime(time.time()))
time.struct_time(tm_year=2024, tm_mon=12, tm_mday=5, tm_hour=17, tm_min=42, tm_sec=23, tm_wday=3, tm_yday=340, tm_isdst=0)
print(time.asctime(time.localtime(time.time())))
Thu Dec 5 17:43:26 2024
print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
2024-12-05 17:45:53
%Y
:完整的年份,例如2023
。%m
:月份,01 到 12。%d
:月份中的一天,01 到 31。%H
:小时(24小时制),00 到 23。%M
:分钟,00 到 59。%S
:秒,00 到 59。
import calendar#日历
print(calendar.month(2024,12))
print(help(calendar.month))
December 2024 Mo Tu We Th Fr Sa Su 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 Help on method formatmonth in module calendar: formatmonth(theyear, themonth, w=0, l=0) method of calendar.TextCalendar instance Return a month's calendar string (multi-line). None
十六、python练习题
1.有四个数字1 2 3 4,能组成多少个互不相同且无重复数字的三位数?各是多少
for i in range(1,5): #左闭右开 #百位
for j in range(1,5): #十位
for k in range(1,5): #个位
if (i != k) and (i != j) and (j != k):
print(i,j,k)
2.企业发放的奖金根据利润提成,利润(L)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万的部分,可提成3%;60万到100万之间时,高于60万的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润L,求应发放奖金总数?
i = int(input('输入你的利润值'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
result = 0
for idx in range(0,6):
if i > arr[idx]:
result += (i-arr[idx])*rat[idx]
i = arr[idx]
print(result)
3.输入三个整数x,y,z 请把这个三个数由小到大输出
my_list = []
for i in range(3):
x = int(input('input:'))
my_list.append(x)
my_list.sort(reverse=False)
my_list
4.将一个列表的数据复制到另一个列表中
a = [1,2,3]
b = a[:]
b
5.暂停一秒输出,并格式化当前时间。使用time模块的sleep()函数
import time
print(time.strftime('%Y-%m-%d- %H:%M:%S',time.localtime(time.time())))
time.sleep(1)#睡1秒
print(time.strftime('%Y-%m-%d- %H:%M:%S',time.localtime(time.time())))
time.sleep(2)#睡1秒
print(time.strftime('%Y-%m-%d- %H:%M:%S',time.localtime(time.time())))
2024-12-05- 18:36:35 2024-12-05- 18:36:36 2024-12-05- 18:36:38
6.打印出所有的'水仙花数',所谓'水仙花数'是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个'水仙花数',因为153=1的三次方+5的三次方+3的三次方
for x in range(1,10):
for y in range(0,10):
for z in range(0,10):
s1 = x*100+y*10+z
s2 = pow(x,3) + pow(y,3) + pow(z,3)
if s1==s2:
print(s1)
153 370 371 407
7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
s = input('input')
letters = 0
space = 0
digit = 0
others = 0
for c in s:
if c.isalpha():
letters += 1
elif c.isspace():
space += 1
elif c.isdigit():
digit += 1
else:
others += 1
print('char = %d,space = %d,digit = %d,others = %d'%(letters,space,digit,others))
8.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
h = 100 #总高度
time = 10 #次数
height = []#反弹高度
for i in range(2,time+1):
h /= 2
height.append(h)
print(min(height)/2)
print(sum(height)*2 + 100)