python基础


一、数值运算

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值