2020.9.30 PYTHON 自复习笔记

前记: 2019年4月的时候曾经自学Python,当时学习的原因是为了追随同学的步伐,但是稍微入门之后,发现在比赛中没法提交Python语言,所以至今为止基本未曾使用过,现在学习人工智能需要使用Python来实现,于是在此通过之前学习做的笔记记录复习(主要是对比与c++的不同与python自带的强大功能)。

PYTHON 快捷取消注释的按键
在这里插入图片描述

PYTHON

a=[0,2,
   3]
"""'''[],{},()可多行'''"""

if a[0]:
    print("answer")
    print("answer")
else:
    print("answer1")
    input("\n") # 如果input("\n")则为输入之后输出空格
    print("answer")
    """单引号,双引号都可以引字符串,"""
    """三个双引号或者三个单引号一般表示多行注释"""
    # 单行注释一般用#

   '''空行用于区分不同函数入口,但是没有空行也不会报错,只是便于日后维修'''
    b=1
    b=input('输入b:'); print(b) # 同行输入多语句时用分号隔开
    print(b,b) # 在变量末尾加逗号则可不换行输出
    K=P=W="Hello" # 同时为多个变量赋值
    k,p,w=1,2,3 # 多个对象指定多个变量
    print(K,P,W)
    print(k,p,w)

    del a # 删除a

用于eval()用于返回表达式的值; 还可用于提取纯数字的字符串中的数字
>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> eval('2 + 2')
4
>>> n=81
>>> eval("n + 4")
85
# eval()函数表示把里边的数字提取出来
a=eval(input("asdown152"))
print(a)

import turtle # 引入turtle库

painter=turtle.Turtle()

painter.pencolor("blue")

painter.speed(100)

for i in range(120):
    painter.forward(80)
    painter.right(100)
    painter.forward(80)
    painter.right(100)
    painter.forward(80)

    painter.penup()
    painter.setposition(0,0)
    painter.pendown()

    painter.right(3)

turtle.exitonclick() # 鼠标点击关闭绘图窗口

import turtle
turtle.pensize(2) #画笔大小
turtle.speed(100)
turtle.color('blue') # 常用颜色:whilte,black,grey,darkgreen,gold,violet,purple,blue,red,yellow
turtle.penup() # 抬起画笔
turtle.setposition(-300,100) #设置位置
turtle.pendown() # 放下画笔
        lu = 80
for count in range (12):
    for amount in range (5):
        turtle.forward(lu)
        turtle.right(144)
    lu += 50
turtle.exitonclick()

s = "PYTHON"
s[-1]='N' s[0:3]="PYT" s[0]='P'
if elif #(if 以及else if)
p = 5
if (p == 5) and (p == 9): # or相当于|| and相当于&&
    pass
if s == "PYTHON": #(执行)
pass(占位符) **表示幂运算 //表示地板除法(舍去小数部分,返回数字比商小的最接近的数字
a[n,m,k]表示获取下标n到下标m [n+k,n+2k...m](均表示下标)

def getmin(x , y): # def为函数前缀
    if x < y :
        ans = x
    elif x > y:
        ans = y
    else : return 0
    return ans

def main(): # 主函数
    a = input("输入a:")
    b = input("输入b:")
    a = eval(a)
    b = eval(b)
    x = getmin(a,b)
    print("a与b中较的是:",x)
    ki = lambda a, b: a > b
    # lambda为特殊函数(匿名函数),用于简单的能在一行内表达的函数,计算结果为返回值(可直接在要使用的主函数中定义)
    # 方法:函数名 = lambda 参数列表 : 表达式
    tof = ki(a, b)
    # 用一个参数来接收lambda函数 ,括号引入参数

if __name__ == '__main__': # 惯例:一般这样引用main函数, 两个下划线加一个变量名再加两个下划线相当于一个特殊的变量名
    main()

i = 10
while i : # 使用方法while 条件 : 表达式
    print(i)
    i = i - 1
intp = input("输入intp,输入Q时退出程序")
while intp != 'Q':
    print(intp)

import turtle

turtle.pensize(2)  # 画笔大小
turtle.speed(50)
turtle.color('blue')  # 常用颜色:whilte,black,grey,darkgreen,gold,violet,purple,blue,red,yellow
turtle.penup()  # 抬起画笔
turtle.setposition(-300, 100)  # 设置位置
turtle.pendown()  # 放下画笔

def draw(lu): # 递归绘制N个五角星
    if lu >= 400:
        return
    for amount in range(5):
        turtle.forward(lu)
        turtle.right(144)
    draw(lu+50)


import turtle

def draw_tree(ps,branch_length):
    if ps <= 0: return
    turtle.pensize(ps)
    if branch_length <=40:
        turtle.pencolor('green')

    if branch_length > 5 :
        turtle.forward(branch_length)
        turtle.right(25)
        draw_tree(ps-3,branch_length-25)
        turtle.right(20)
        draw_tree(ps-3,branch_length-25)
        turtle.left(20)

        turtle.left(50)
        draw_tree(ps-3,branch_length-25)
        turtle.left(20)
        draw_tree(ps-3,branch_length-25)
        turtle.right(20)


        turtle.right(25)
        turtle.backward(branch_length)
        turtle.pencolor('brown')

def main():
    turtle.speed(1000)
    turtle.penup()
    turtle.setposition(0,-200)
    turtle.left(90)
    turtle.pendown()
    turtle.pencolor('brown')

    draw_tree(17,150)
    turtle.exitonclick()

if __name__ == '__main__':
    main()

type()用于判断数据类型,int(),double(),str()等用于强行转换
print() 里面空则为输出空行
str.find() 为找到括号里面的字符下标
str.split() 为以括号里面的字符进行分割:如a = 's k l h' ,a.split(' ')则可获得数组(list['s','k','l','h'],下标为0,1,2,3

k = 'nmsl'
p = 'wsnd'
s = 'hjyz'
print('站格符{},{},{}'.format(k,p,s)) # 在print里面用{}表示站格,在''结束后面打.format()即可将括号里的在{}位置输出
{0}表示输出.format()里第0个位置,{1}表示输出第一个位置......
字符串*2结果是在原先字符串后面再加一个相同的字符串

try: # 尝试运行以下代码,如果出现错误,则执行以下错误列表代码 ,ValueError,TypeError,KeyError,IndexError等等
    pass # 代码块
except ValueError: # 如果数据错误则执行以下
    pass # 代码块
except IndexError: # 如果下标错误(超下标及其他)
    pass # 代码块
except: # 其他错误
    pass # 代码块

import math
l1 = [] # 声明一个空list
l1 = [0,1,2,3,4] # list数据类型
del l1[0] # 删除l1[0]
l1 += l1 # 两个list相加为把后面的加载前面
l1 *= 2 # 把list里的数据乘2放在最后面
len(l1) # 获取数组大小
2 in l1 # 判断2是否在l1中
l1.append(5) # 将5加在l1尾部
l1.sort # 将l1排序
l1.reverse() #  将l1逆序
l1.index(5) #返回5的下标
l1.insert(2,'k') # 将'k'插入到第2个位置
l1.count(3) # 返回3在数组中的数量
l1.remove(4) # 删除数组中最前的4
l1.pop(2) # 取出l1第2个位置的元素并且将其删除

k = math.pi # 圆周率
math.ceil(5.2) # 对5.2向上取整
math.floor(5.2) #对5.2向下取整
math.pow(2,5) # 求2的5次方
math.sqrt(9) # 求x的平方根
math.fsum(l1) # 对l1中元素求和

for <x> in <list>: # 循环次数为list序列长度,x第一次为list[0]...到list[n]
  <body> # 代码块
for <x> in range <y>: # x从0开始到y
  <body>

在函数中使用全局变量要在前面加 global 表示使用的是全局变量

import datetime # datetime库 ,datetime里还有datetime库,可以直接import datetime.datetime
nowtime = datetime.datetime.now() #获取当前系统时间 ,类型为datetime.datetime
str = '2019.04.10'
getstrtime = datetime.datetime.strptime(str, format('%Y.%m.%d'))
print(getstrtime)
# 根据格式来获取字符串中的时间,'.'可替换,'Y'为4位的年份,'y'为2位,'m'为月份,'d'为日
y = getstrtime.year
m = getstrtime.month
d = getstrtime.day # 获取年月日
year, weektime, weekday = getstrtime.isocalendar() # 获取年,第几周,周几三个数字, # getstrtime.isocalendar()[1] 表示获取第2个数字
print(year, weektime, weekday)
print(datetime.datetime.strftime(nowtime,'%Y/%m/%d')) # 把datetime.datetime 类型转换成字符串

t = (1,2,3) # tuple 元组数据类型
一旦被创建就不能够修改 ,用逗号和圆括号表示如:('red','blue'),(1,2,3)等
访问方式与列表相同,元组中数据类型可以不同,可用于函数多返回值:return a,b
sum()用于求和其中列表的数字 如:
day = 5
t = (21,21,33,66,25,84,92,31)
print(sum(t[:day-1]))

l = [1,0,3]
l = set(l) # 把l变成集合,集合其他操作与元组,列表相同
p = {5,6,3,1} # 集合元素不重复且无序, 用于去重
print(l-p) # l-p或者l.difference(p) 返回在l中,不在p中的元素
# s&t 或s.intersection 返回s和t的交集元素
# s|t 或s.union(t) 返回s和t的并集元素
# s^t 或s.symmetric_difference(t) 返回s并t-s交t的元素
if 3 in l: # 判断元素是否在集合里直接用in
    l.remove(3)

d = dict() # 字典类型,相当于map
d['kiss'] = 520 # 添加
del d['kiss'] # 删除
if 'kiss' in d: # 判断'kiss'是否存在d里
    print(d['kiss'])
for key in d: # 遍历d所有的key
    pass
for value in d.values(): # 遍历所有的value
    pass
for item in d.items(): # 遍历所有的数据项
    pass

while (True):
    str1 = input('输入密码:')
    strength = 0
    length = len(str1) # 获取字符串长度
    if length >= 8: strength += 1
    if str1.isnumeric() == False: strength += 1 # 判断字符串是否只由数字组成
    if str1.isalpha() == False: strength += 1 # 判断字符串是否只由字母组成
    if strength == 3:
        print('密码符合要求')
        f = open('E:\python读入测试文本.txt', 'a')  # open(filename,mode) 文件名+打开模式,(文件名包括路径, 打开模式:r:只读,w:只写,a:在文件末尾附加,r+:读写)
        f.write('合格的密码:{},密码强度:{}'.format(str1,strength))
        f.close()
        break
    else:
        print('密码不符合要求')
        f = open('E:\python读入测试文本.txt', 'a')  # open(filename,mode) 文件名+打开模式,(文件名包括路径, 打开模式:r:只读,w:只写,a:在文件末尾附加,r+:读写)
        f.write('不合格的密码:{},密码强度:{}'.format(str1,strength))
        f.close()
        continue

f = open('E:\python读入测试文本.txt', 'r')
# read()返回值为包含整个文件内容的一个字符串 readline()返回值为文件下一行内容的字符串 readlines()返回值为整个文件内容的列表list,list每项以换行符为结尾的一行字符串
for line in f.readline(): # 文件的遍历
    pass # 处理一行数据
for line in f: # 文件的遍历
    pass # 处理一行数据
f.close()

class filetool:
    def __init__(self,filepath): # 要传进文件路径
        self.filepath = filepath

    def writetofile(self,line):
        f = open(self.filepath,'a')
        f.write(line)
        f.close()

    def readfromfile(self):
        f = open(self.filepath,'r')
        lines = f.readlines()
        f.close()
        return lines

class passwordtool: # 类的声明
    def __init__(self,passw): # 初始化构造函数,self表示类本身(相当于this指针)
        # 类的属性直接在这里声明即可
        self.password = passw
        self.strenth_level = 0
        # 每个类函数参数最好第一个写self

    def progress(self):
        if self.checkletter:
            self.strenth_level += 1
        if self.checknumber():
            self.strenth_level += 1
        if len(self.password) >= 8:
            self.strenth_level += 1
        if self.strenth_level == 3:
            print('密码符合要求')
            filet = filetool('E:\python读入测试文本.txt')
            filet.writetofile('合格的密码:{},密码强度:{}\n'.format(self.password, self.strenth_level))
        else:
            print('密码不符合要求')
            filet = filetool('E:\python读入测试文本.txt')
            filet.writetofile('不合格的密码:{},密码强度:{}\n'.format(self.password, self.strenth_level))
            # open(filename,mode) 文件名+打开模式,(文件名包括路径, 打开模式:r:只读,w:只写,a:在文件末尾附加,r+:读写)

    def checkletter(self):
        for c in self.password:
            if c.isalpha():
                return True
        return False

    def checknumber(self):
        for x in self.password:
            if x.isnumeric():
                return True
        return False

def main():
    while True:
        passwt = passwordtool(input('输入密码:'))
        passwt.progress()
        filet = filetool('E:\python读入测试文本.txt')
        lines = filet.readfromfile()
        print(lines)
    return

if __name__ == '__main__':
    main()

import random
random() # 生成[0,1.0)之间的随机浮点数
random.uniform(a,b) # 生成a到b之间的随机浮点数
random.randint(a,b) # 生成a到b之间随机整数
random.choice(<list>) # 从list列表里随机返回一个元素
random.shuffle(<list>) # 将列表中的元素打乱
k = [1,2,3,4,5,6,7,8,9,9]
print(random.sample(k,5)) # 从list列表里随机获取k个元素

for i, result in enumerate(list): # enumerate()返回列表或者元组的两个数据:一个是下标一个是该下标对应的元素
    print('下标:{},元素:{}'.format(i,result))

l1 = list(range(1,6)) # range 是1到n-1,所以要1到n要写n+1
l2 = ['a','b','c','d','e']
k = zip(l1,l2) # zip用于将两个列表连接起来成为n个元组为元素的列表:[(1,'a')...] ,不可修改,若要修改则要转换成字典:dict(zip(l1,l2))
d = dict(zip(l1,l2))
print(d)

绘制散点图
import matplotlib.pyplot as plt # matplotlib是一个数据可视化函数库,matplotlib的子模块pyplot提供了2d图表制作的基本函数
plt.rcParams['font.san-serif'] = ['SimHei'] # 要输出中文时要把字体更改,否则不行
plt.rcParams['axes.unicode_minus'] = False
for x,y in range(1,10):
    plt.scatter(y,x,c='red',alpha=0.5) # x,y是x跟y的坐标alpha是透明度,c是颜色
k = [10,15,12,4,8,3]
# 直方图,k为高度,bins为每项的间距,normed为概率求和,edgecolor边缘线颜色,linewidth为每条边缘线间距
plt.hist(k,bins=range(1,7),normed=1,edgecolor='black',linewidth=1)
plt.title('统计') # 标题
plt.xlabel('x') # 设置x轴名称为x
plt.ylabel('s') # 同上
plt.show()

import numpy as np
# arr = np.random.randint(1,10,(3,4)) # 表示生成1到9,三行四列个随机数(直接写一个整型就是一列)
# # numpy的数组可以直接相加,如矩阵加法
# print(arr)

i=input()
j=input()
u=eval(i)
v=eval(j)
l = 0
r = 1
while r**u <= v:
    l = r
    r = r*2
while l+1 < r:
    m = (l+r)//2
    if m**u <= v:
        l = m
    else: r = m
if r**u <= v: print(r)
else: print(l)

print(r"D:\three\two\one") //r后面的字符串表示原始字符串,转义字符不再生效
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值