python学习笔记

python

Posted by Chenwei on December 5, 2020

学习来源:B站老九学堂

2020-12-04

第一章:杂七杂八的


代码规范,开头可以填上一些信息,比如作者版权

# -*- coding:utf-8 -*-
# @功能描述:todo
# @程序作者:chenwei
# @版权信息:copy right

比如游戏中生命值输出,可以带颜色,还有可以用乘号,来复制。

print("\n英雄名称")
print("生命值:"+3*"■"+2*"▢")#no color
print("生命值:"+"\033[93m"+3*"■"+2*"▢"+"\033[0m")# add color 

第二章:变量,表达式,运算符

python3中有六个标准的数据类型:

  • 数字类型:Number
  • 字符串类型:String
  • 元组类型:Tuple
  • 列表类型:List
  • 集合类型:Set
  • 字典类型: Dictionary

列表和元组的区别:

abcd=(1,2,3,4) #元组一旦定义,大小就不能改变
list1  = [1,2,3,4,5] #列表比元组更加灵活,可以追加改变
list1.append(112) #append,追加函数

注意:比如输入

phone = input()
phone1=phone + 1

此时这个phone是字符串类型,不能当作整数类型加减乘除,有以下方法可以加减乘除:

  1. 把phone变成整数,phone = int(phone)
  2. 使用强大的eval函数:
    phone=eval(input(...))
    

    小技巧,一个很大的数字怎么知道有多少位,首先转换成字符串,然后用len去看有多少字符串,举例:

    print(len(str(2**32768))
    

    如何计算一下运算时间,需要加入time函数

    import time
    start = time.time()
    print(len(str(2**123456)))
    print("Dauer",time.time()-start)
    #开始时间减去结束时间
    

    eval和input
    相当于把字符串变成数字

    result = input("please input a number:")
    # result = int(result)
    # result = float(result)
    result = evla(result)
    result **=2
    print("the result is", result)
    

    使用字符串format方法

    #<模板字符串>.format(<逗号分隔的参数>)
    #示例
    print("{}上{}下".format(7,8))
    #7上8下
    str = "今天是个好日子呀好呀好日子"
    print("|{0:30}|".format(str))   
    #如果后面的参数是字符串,默认左对齐,数字则是默认右对齐
    print("|{0:>30}|".format(str)) 
    #>30 宽度为30个字符,右对齐
    print("|{0:^30}|".format(str)) 
    #^30 宽度为30个字符,居中对齐
    print("|{0:<30}|".format(str)) 
    #<30
    print("|{0:#30}|".format(str))   #str没有30个字符,多的就用#填充
    

    更多用法请google

第二章笔记结束 –2020.12.04


第三章

运算符与表达式

布尔类型:

布尔类型取值为True/False,python 中1表示True,0表示False 布尔类型建议使用is开头

is_i_am_happy = true
print(type(is_a))
print("今天天气不错:", not is_i_am_happy)
print(int(is_i_am_happy))
#注意此处打印的第一个是bool,代表is_i_am_happy是布尔类型,第二个打印出来的是今天天气不错: false,第三个打印的是1.因为true就是1

注意在python中,非零(1)表示真,零表示假


条件结构

举例,算圆的半径

radius = eval(input("请输入一个圆的半径:"))
#注意这里加了一个eval,之前上一章讲过,让输入变成浮点数,不然就是string不是数字没法后面的计算  
if radius >= 0:
    area = 3.14*radius**2
    print("半径为{:.2f}的园的面积为{:.2f}".format(radius,area))
#注意语法format的用法!!!
else
    print

逻辑运算符

逻辑运算符也叫布尔运算符,与或非,and or not


第四章 循环

使用哨兵控制循环

先执行,后判断的程序逻辑

nick_name = ""
answer = "n"
while answer == "n":
    nick_name = input("请起一个名字吧:")
    print("名号:"+ nick_name)
    answer = input(nick_name + "是否满意y/n")
print(nick_name)

注意:不要用浮点数去控制循环,因为对于浮点数,只能无限接近整数,比如1,其实是0.999999999


第五章(难点,列表)、

创建列表
list1 = list() #创建一个空列表
list2 = list(“金木水火土”) #创建一个带有5个字符元素的列表
list3 = list([9,5,2,7])
list4 = list(range(0,10))
list5 = [] #简写,创造一个空列表
list6 = [range(10)]
推导式
my_list = [i for i in range(10)] #0123456789
my_list = [10 for i in range(10)] #10 10 10....

直接贴图好了
picture1

list1 = [num for num in range(0,101) if num%2 == 0]
list1 = [num for num in range(0,101,2)]
print("0到100之间的偶数为:",list`)
#这两都可以
#列表求和,最大值,最小值,sum,max,min
list1 = [x for x in range(10)]
print("1-100之和为:",sum(list5))
import random
random.shuffle(list1)#shuffle,乱序,洗牌

picture1

 list1=[]
 answer='Y'
 while answer=='y':
    score = eval(input("请输入成绩"))
    list1.append(score)
    answer=input("继续输入吗y/n")
print("您的输入为",list1)
example:模拟洗牌
#生成52个元素,表示一副牌
cards=[card for card in range(52)]
types = ["黑桃","红心","方块","梅花"]
values = ["ACE","1"]
values += [str(value) for value in range(2,11)]
values += ["JACK","QUEEN","KING"]
#print()//13是花色,%13是什么
random.shuffle(cards)
for i in range(len(cards)):
    type = types[cards[i]//13]
    value = values[cards[i]%13]
    print("[{}]:{}-{}".format(cards[i],type,value),end='')
    #换行
    if (i+1)%6 == 0:
        print()
    else:
        print(end="\t")
#生成5个随机数
import random
lst = [random.randint(1,100) for i in range(5)]

第六章 函数(重点)

内置函数

picture1 picture1


函数总结

函数这块有点难,所以把难点就现在总结这里,把每个知识点写出来我估计我也不会记得,所以就写总结好了,到时候有不懂的再去查查看
在python中,一切皆为对象,一切皆为对象的引用–非常重要


不可变类型(对象):int, float, string, number, tuple,指的是值不会变,修改了也不变
number = 1024,在这里,1024才是对象,有个地址,num只是个名字,相当于num保存了1024这个对象的引用。举例

  num = 1024 + 10 #1034实际上已经是另一个对象了,实际上1024这个值就没了,回收了,num这个变量就指向了新的空间,1034的空间。

特点是,不可变对象的值并没有发生改变,变的只是创建了新的对象,改变了变量对对象的引用。意思就是1024这个值是不能变的。


可变类型:列表,字典,集合,自定义类型 所谓可变对象,对象的内容可变。

举例,自定义函数,求n次方
def pow(num,n=2):
#这里需要注意一下,n=2 属于默认值,就是默认n=2.但是输入之后n就可以有自己的值了
    result = 1
    for i in range(n):
        result *= num
    return result

# 第八章 ## 字符串的常用方法 picture1

 # isalnum
  str1 = "abc123"
  print(str1.isalum())
  True.
#isdecimal()是不是为纯数字,举例,必须输入正确,不然不行
age=''
while not age.isdecimal() or int(age) >100 or int(age)<0:
    age = input("请输入你的年龄(0-100):")
age = int(age)
print("your age is:",age)

picture1

举例:实现用户注册功能:

  1. 用户名最多25个字符长度,不能包括宫格,单双引号,问好等特殊符号
  2. 密码6-18为,只能包含字母,数字,特殊符号
    (1) 纯数字,纯字母时,密码强度都是弱
    (2)数字+符号,数字加字母,字母+符号,强度为中 (3) 同时存在三种字符,强度为强
  3. 用户输入正确的email
    必须包含@,且只能有一个
    @和.符号不能再开头也不能在结尾
    #用户名最多25个字符长度,不能包括宫格,单双引号,问好等特殊符号
    def validate_login_name(login_name):
     str_len = len(login_name)
     if str_len == 0 or str_len >25:
         return false
     #自定义非法字符串,可自己改
     invalid_chars = "'\"!@#$$%%^"
     for char in login_name:
         if char in invalid_chars:
             return false
     return True
    # #2. 密码6-18为,只能包含字母,数字,特殊符号  
    # (1) 纯数字,纯字母时,密码强度都是弱  
    # (2)数字+符号,数字加字母,字母+符号,强度为中
    # (3) 同时存在三种字符,强度为强  
    valid_symbols = [chr(value) for value in range (ord("A"), ord("Z")+1)]#所有A到Z的字母
    valid_symbols +=  [chr(value) for value in range (97,97+26)] #所有小写字母
    valid_symbols += [chr(value) for value in range (ord("0"), ord("9")+1)]#所有数字
    valid_symbols += list("!@#$%")
    def validate_password(password):
     str_len = len(password):
     if str_len < 6 or str_len > 18:
         return false
     global valid_symbols
     for char in password:
         if char not in valid_symbols:
             return False
     #如果代码传到这里,就说明一定合法。
     if password.isdecimal() or password.isalpha()
         return "x"*2
     if password.isalnum():
         return "x"*4
    def validate_password_decimal_symbol(password):
    #判断是非数字加合法符号组合
     valid_symbols = [chr(value) for value in range (ord("0"), ord("9")+1)]#所有数字
     valid_symbols += list("!@#$%")
     valid_symbols = str(valid_symbols)
     for char in password:
         if valid_symbols.find(char) == -1:
             return False
     return True