python

Last updated on 6 months ago

Python

学sql学麻了,换点别的学学
来源:https://github.com/jackfrued/Python-100-Days.git
https://linklearner.com/#/learn/detail/60
学习计划安排是100天,感觉能学完一半就不错了

4.27

Day 1

安装

https://www.python.org/downloads/ 下载windows installer(64-bit),勾选自动配置路径
因为下过python2.7用来跑sqlmap,所以还需要再设置一下环境

环境设置

1.右键点击左下角windows,打开系统
2.选择高级系统设置,打开环境变量
3.在用户变量下可以看到path里已经有了安装时自动配置好的路径
4.在下面的系统变量下,打开path,新建添加python3的安装路径,将python3上移到python2的上面,这样就可以设置python3.11为默认
img
5.win r cmd 输入python,可以看到版本号为3.11,继续输入import this,可以看到开发者写的python之禅

运行

用vscode打开,下载商店第一个python扩展,新建文件夹,改名为test.py,内容是print (‘hello word’),run code运行
在新建一个文件夹专门分给python之后,用vscode打开该文件夹,在终端输入python后即可进入repl界面(python交互环境)

Day2

变量和类型

类型 定义
整型 在py2.x版本还分为int和long,在3.x统称为int,且支持各种进制的转化
浮点 小数,支持科学计数法
字符串 单引号双引号引起即可,但双引号更智能一点,'print\n'会全都连着\n全部打印,而用双引号引起来则可以正确打印换行
布尔 True和False,注意大小写
复数 3+5j,j取代了i,了解即可

变量使用

用vscode学习时要保存后才能运行,跟以前的c,c++的编译器有点区别

1
2
3
a=1
b=2
print(a+b)

type()函数 : 说明对象的类型
img

1
2
a=1
print(type(a)) #<class 'int'>
  • int():将一个数值或字符串转换成整数,可以指定进制。
  • float():将一个字符串转换成浮点数。
  • str():将指定的对象转换成字符串形式,可以指定编码。
  • chr():将整数转换成该编码对应的字符串(一个字符)。
  • ord():将字符串(一个字符)转换成对应的编码(整数)。
    img
1
2
3
4
a=int(input())
b=int(input('b= '))
print(a)
print('%d+%d=%d'%(a,b,a+b))

点击运行,在终端输入a的数值

  • **指数 2**3=8

  • % 取模

  • //整除

  • []切片 序列[起始下标:结束下标:步长] (不包含结束下标的内容)

    1
    2
    fruits=['apple','orange','banana','pear','watermelon']
    print(fruits[0:3:2])

    会输出apple和banana,从list的第0位开始输出,一个输出三个,,所以输出第0个和第2个

    img

    布尔值

    1
    2
    3
    4
    flag1=1==1
    flag2=1>2
    print(flag1) #True
    print(flag2) #False

作业

1.华氏度摄氏度转化
img

1
2
3
f=float(input('f= '))
c=(f-32)/1.8
print('%.1f华氏度=%.1f摄氏度'%(f,c))

2.圆的面积和周长

1
2
3
4
r=float(input('输入半径:'))
l=2*3.14*r
s=3.14*r*r
print('周长:%.3f 面积:%.3f'%(l,s))

3.判断闰年

1
2
3
year=int(input('输入年份:'))
is_leap= year%4==0 and year%100!=0 or year%400==0
print(is_leap)

4.28

Day3

分支判断结构

就是if语句,但是没有括号,用缩进来包含if语句的内容,没有else if,只有elif和else,if和else语句结束后最后都要加上冒号,else后不能加条件

1
2
3
4
5
6
7
username=input('输入用户名:')
password=input('输入密码:')
#用户名是123,密码为456
if username=='123' and password == '456':
print('登陆成功')
else:
print('错了')

Day4

循环结构

for-in循环

1
2
3
4
5
6
sum=0
num=int(input('输入循环次数:'))
print(num)
for i in range(num):
sum+=1
print(sum)

img
输入默认是字符串类型,要改成int型,记得打冒号
range(起始值,终止值,步长):
前闭后开区间,步长可以为负,比如range(100,0,-2):

while循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import random
answer=random.randint(1,100)
counter=0
while True:
counter+=1
y_answer=int(input('输入值'))
if answer==y_answer:
print('猜对了')
break
elif answer>y_answer:
print('小了')
else:
print('大了')
if counter>5:
print('错的次数太多了')

import random是引入了random模块,randint是模块下的一个函数,在1到100(不包括100)之间生成一个随机数
也可以这样

1
2
from random import randint
answer = randint(1,100)

作业

素数判定

1
2
3
4
5
6
7
8
9
10
11
12
from math import sqrt
n=int(input('输入:'))
nn=int(sqrt(n))
is_prime=True
for i in range(2,nn+1):
if n % i==0:
is_prime=False
break
if is_prime and n != 1:
print('%d是素数'%n)
else:
print('no')

一开始is_prime的等于号多打了一个,搞半天

4.29

Day5

复习章

水仙花数

1
2
3
4
5
6
7
8
9
10
11
a=int(input('输入一个三位数:'))
l=a%10
print(l)
m=int(a/10%10) #也可以直接写成m=a//10%10,python的//才等于c的/,py的//在整数运算时会保留小数
print(m)
h=int(a/100) #h=a//100
print(h)
if l**3+m**3+h**3==a:
print('是水仙花数')
else:
print('no')

动态规划问题(还不会用dp做)

1
2
3
4
5
6
#dp其实还不会
for i in range(0,21): #100全买最贵的公鸡也就20只,所以20位穷举的最大值
for j in range(0,33):
for k in range(0,300):
if i*5+j*3+k/3==100:
print('%d只公鸡%d只母鸡%d小鸡'%(i,j,k))

本来以为不会做直接看答案的,没想到碰出来了

骰子

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
from random import randint
from time import sleep
print('你现在有1000元')
money=1000
while money>0:
x=int(input('你想下注多少:'))
if x==money:
print('这是一场豪赌!')
if x<=money and x>0:
first=randint(1,6)+randint(1,6)
print('第一次点数为:%d(为7或11时赢,为2,3,12时输)'%first)
flag=0
if first==7 or first==11:
print('玩家胜!')
money+=x
flag=1
print('玩家余额为:%d'%money)
elif first==2 or first==3 or first==12:
print('玩家输')
money-=x
flag=1
print('玩家余额为:%d'%money)
else:
while flag==0:
n=randint(1,6)+randint(1,6)
print('这次你投的点数为:%d(为%d时你赢,为7时你输)'%(n,first))
if n==first:
print('玩家胜!')
money+=x
flag=1
print('玩家余额为:%d'%money)
elif n==7:
print('玩家输')
money-=x
flag=1
print('玩家余额为:%d'%money)
else:
print('余额不足')
print('你破产了')
print('赌博伤财,5s后自动退出游戏')
s = 5
while s > 0:
print(f'游戏将在{s}秒后退出')
sleep(1)
s -= 1

把.py转化为.exe

在伟大的克劳德的帮助下做了手工的第一个游戏(只是一个可执行.exe文件)

pip

按理来说是python下载时会自动配置好的,都不知道为什么我的没有,可能是因为安在d盘的原因吧

  1. 先确保电脑下载了pip,方法:终端输入pip –version会报版本号,如果显示不是可执行的文件或者别的就是没下载或者没配置好环境
  2. 如果没下载pip,就新建一个文件,名为get-pip.py
  3. 复制https://bootstrap.pypa.io/get-pip.py所有内容到刚刚的.py文件中
  4. 在建的文件的路径下,打开终端,输入python get-pip.py即可
pyinstaller

打开终端,输入pip install PyInstaller即可

转换

比如我要转换的骰子.py文件是在E:\py\day3 路径下的,那么在day3这个文件夹下打开终端,输入pyinstaller --onefile 骰子.py即可,随后会生成dist和build两个文件夹,打开dist文件夹即可找到骰子.exe,这个可执行文件可以直接发给别人(指电脑上没有python环境的人)使用

4.30

Day6

函数和模块的使用

函数

使用def定义函数 (define)
Cnm

1
2
3
4
5
6
7
8
def fac(num):
result=1
for i in range(1,num+1):
result*=i
return result
m=int(input('m='))
n=int(input('n='))
print(fac(m)//fac(n)//fac(m-n))
函数参数

可以像上面那样不给参数赋值,也可以赋给默认值
img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from random import randint
def roll(n=2):
print(f'投{n}个骰子')
total=0
for _ in range(n):
total+=randint(1,6)
return total
def add(a=0,b=0,c=0):
print(f'a为{a},b为{b},c为{c}')
return a+b+c
print(roll(randint(1,10)))
print(add(1))
print(add(1,2))
print(add(1,2,3))
print(add())
print(add(c=1,a=4,b=6))
可变参数
1
2
3
4
5
6
def add(*n):
total=0
for num in n:
total+=num
return total
print(add(1,2,3,4,5,6,7,8))

模板

可以引用自带库的,也可以引用自己写的

moudle
1
2
def p():
print('hello')
m1
1
2
def p():
print('world')
test
1
2
3
4
import moudle as m2
import m1
m2.p() #moudle.p()此时已经不行了
m1.p()

或者

1
2
3
4
from moudle import p
p()
from m1 import p
p()

作业

最大公约数和最小公倍数

1
2
3
4
5
6
7
8
9
10
11
x=int(input())
y=int(input())
def b(x,y):
(x,y)=(y,x) if x>y else (x,y)
for i in range(x,0,-1):
if x%i==0 and y%i==0:
return i
print(f'{x}{y}的最大公约数为{b(x,y)}')
def p(x,y):
return x*y//b(x,y)
print(f'{x}{y}的最小公倍数为{p(x,y)}')

素数

1
2
3
4
5
6
7
a=int(input('输入一个数:'))
def is_prime(a):
for i in range(1,int(a**0.5+1)):
if a%i==0:
return False
return True if i!=1 else False
print(is_prime(a))

5.1

Day7

字符串

1
2
3
4
5
6
s='1234abcd'
print(s[::-1]) #dcba4321
print(len(s)) #len()求字符串长度 8
print('23' in s) #True
print('wd' in s) #False
print(s.find('a')) #4 (01234)a是4

5.2

Day7

列表 []

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
list1=[1,3,5,7,9,11,13,15]
print(list1)
list2=['hello ']*3
print(list2)
print(len(list1))
print(f'最后一位是{list1[-1]},倒数第二位是{list1[-2]}')
#遍历列表
for i in range(len(list1)):
print(list1[i])
for j in list1:
print(j)
for index,el in enumerate(list1): #enumerate是一个可以同时返回列表中的位数和元素的函数
print(f'第{index}位数字是{el}')
list3=[2,4,6,8,10,12,14,16]
list3.append(200) #list.append(elem) element
list3.insert(2,5) #list.insert(index,elem) 在具体序号处添加一个元素
print(list3)
list3+=['abc','xsa'] #等价于list3.extend(['abc','xsa'])
print(list3)
list3.remove('xsa')
if 'abc' in list3:
list3.remove('abc')
print(list3)
list3.pop(0)
print(list3)
list3.clear()
print(list3)

列表2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fruit=['apple','orange','pear','watermelon','strawberry','zoo']
print(fruit)
fruit1=fruit
print(fruit1)
fruit2=fruit[::-1]
print(fruit2)
fruit3=sorted(fruit) #默认按字母顺序排序,a-z,不会改变原列表的值,而是生成一个新的列表
print(f'{fruit}\n{fruit3}')
f4=sorted(fruit,reverse=True) #默认是False,设置成True后会反序排列
print(f4)
f5=sorted(fruit,key=len) #按照长度排序
print(f5)
f6=sorted(fruit,key=lambda s:len(s))
print(f6)
f7=sorted(fruit,key=lambda s:s.upper())
print(f7)

生成器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
f=[i for i in range(1,10)]
print(f)
f=[x+y for x in 'abcd' for y in '12345678']
print(f)
f=[x**2 for x in range(1,10)]
print(sys.getsizeof(f))
print(f)
f=(x**2 for x in range(1,10))
print(sys.getsizeof(f))
print(f) #生成器,但没看懂
def fib(n): #用了yield关键词,所以是生成器函数
a,b=0,1
for _ in range(n):
a,b=b,a+b
yield a
def p(n):
for val in fib(n):
print(val)
x=int(input())
p(x)

元组(tuple) ()

列表(list)
元组数据不可更改,元组可跟列表互相转化

1
2
3
4
a=('fruit',1,'sd1')   #元组
b=['fruit',1,'sd1'] #列表
c=list(a) #元组变为列表
d=tuple(b) #变为元组

集合(set) {}

主要用于交集并集等集合语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a={1,2,3,4,5,6}
b=set(range(1,10))
c={x for x in range(1,8)}
print(f'{a}\n{b}\n{c}')
a.add(8)
b.update([11,12])
c.pop() #不输入就是0
print(f'{a}\n{b}\n{c}')
d={1,2,3,4,5,6}
print(d)
d.pop()
d.pop()
print(d.pop(2)) #错误的,set类型是无序的,不能指定index删除,pop()会返回最后一位并删除,remove()只删除不返回
print(d)

字典(dict) {}

必须有一对元素(键值对)
在字典dict的定义中,如果键是有效的 Python 标识符,那么就不需要加引号。
Python 的有效标识符包括:

  • 字母(A-z)

  • 数字(0-9)

  • 下划线(_)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    a='a'
    stu={'age':12,'score':95,a:8} #定义过的变量可以直接当键使用,不需要加''
    print(stu)
    a=dict(name=1,gender=2) #这里键不能加'',必须要直接输
    print(a)
    key=['name','age']
    val=['zs',12]
    di=zip(key,val)
    print(di)
    di=dict(di)
    print(di)
    print(di['name'])
    di.update(gen='m') #键不能加'',而值如果是字符串则要加''
    print(di)
    print(di.get('name'))

5.3

摆烂

5.4

数学期中


python
https://blog.yblue.top/2023/08/20/python/
Posted on
August 20, 2023
Licensed under