列表生成

定义:额可以简写循环代码。例如1:

result = [ i+1 for i in range(1,20)]
print(result)

===》拆分成以下

result = []
for i in range(1,20):
        result2.append(i+1)
print(result)

执行顺序

例如2:先循环,然后执行条件判断(循环后面可以加条件),最后执行操作,最后返回到list中

*str(i).zfill(2)字符串位数补零操作

result = [ str(i).zfill(2)  for i in range(1,20) if i<8  ]
print(result)
-------
result2 = []
for i in range(1,10):
    if i<8:
        j = str(i).zfill(2)
        result2.append(j)

print(result2)

三元表达式

sex = '' if int(id_card[-2])%2 == 0 else '' #三元表达式

print(sex)

===》if 条件满足为前面的值,否则是后面的值,可以转换为以下:

id_card = '410881199211111141'

if int(id_card[-2]) % 2 == 0:
    sex = ''
else:
    sex = ''
print(sex)

 

集合

定义:一种数据类型,集合天生可以去重,集合是无序

l = [1,1,2,3,4,3]

print(set(l)) #集合是无序

集合的操作

s2= {1,2,3,4}
s = set() #空集合
s.add(1) #添加元素
s.remove(1) #删除元素
print(s2)

集合的交集、并集、差集、对称差集(可以多个集合取交集)

xn = ['jiajinju','yangliangliang','zhaowenjing','shenxianlu']

zdh = ['jiajinju','yangliangliang','zhaowenjing','hanmin','liuzhao']

xn_set = set(xn)

zdh_set = set(zdh)

print(xn_set.intersection(zdh_set)) #取交集
print(xn_set & zdh_set  )#取交集

print(xn_set.union(zdh_set)) #并集 #把俩集合加一起,重复的去除
print(xn_set |zdh_set )#并集

print(xn_set.difference(zdh_set)) #差集,在a集合里面有,在b集合里面没有的
print(xn_set - zdh_set) #差集

print(xn_set.symmetric_difference(zdh_set)) #对称差集,把两个集合里面都有的去除
print(xn_set ^ zdh_set )  #对称差集

 函数

定义函数:

def smile():
    print('哈哈哈')

smile()#调用函数,函数必须调用才会执行


#一个函数只实现一个功能,不要写太长的在一个函数里面

形参、实参

def is_float(s): #形式参数s,变量
      pass
 is_float(1) #实际参数1

举例:判断输入的数据是否是一个小数

解析:

#1.54
#1、只有一个小数点
#2、小数点左右是整数
-------------------------
#-1.34
#1、只有一个小数点
#2、小数点右边是整数,小数点左边只有一个负号
#负号后面是一个整数
price = input('请输入价格:')

def is_float(s): #形式参数
    s = str(s)
    if s.count('.') == 1:
        left,right = s.split('.')  #1.74  ['1','74'],用.分割成left字符串和right字符串
        if left.isdigit() and right.isdigit():#left和right均为数字
            return True
        elif left.startswith('-') and left[1:].isdigit() and right.isdigit():#left由‘-’开始,且left和right均为数字
            return True
    return False

 函数返回值

def calc(a,b):
    result = a+b
    print(result)
    return result#函数返回值
sum = calc(1,1)
print('sum',sum)

 如何判断是否需要返回值--看需求,确定函数是否需要加返回值(如读文件),如下:

def write_file(file_name,content):#写文件
    with open(file_name,'w',encoding='utf-8') as fw:
        fw.write(content)
#在函数里面定义的变量都是局部变量
#函数里只要遇到return函数立即结束

def read_file(file_name):#读文件
    with open(file_name,encoding='utf-8') as fw:
        result = fw.read()
        return result
username = input('username:')
res = read_file('users')

if username in res:
    print('用户名存在!')
else:
    print('用户名不存在!')

返回值返回元组

def more():
    name = 'xiaohei'
    age = 18
    score = 37.5
    return name,age,score#需要与函数中内容数量及项目对应

默认值参数

def register(name,sex=''):

    print('[%s %s]写入数据库'%(name,sex))

register('贾金菊','')#传值男,写入男
register('贾金菊')#没有传值,默认写入为女

 函数举例读取文件/字典

import json
def op_file(file_name,content=None):
    if content:#有content
        with open(file_name,'w',encoding='utf-8') as fw:
            fw.write(content)
    else:#只传文件名,没有content
        with open(file_name,encoding='utf-8') as fr:
            return fr.read()


def op_file_json(file_name,dic=None):#字典格式
    if dic:
        with open(file_name,'w',encoding='utf-8') as fw:
            json.dump(dic,fw)
    else:
        with open(file_name,encoding='utf-8') as fr:
            result = json.load(fr)
            return result
result = op_file('users')
print(result)
op_file('user2.txt',xiaoming)

Random模块

import random
#随机产生6为数字
import random
def sms_code():
    result = random.randint(1, 999999)
    verify_code = str(result).zfill(6)
    return verify_code
print(sms_code())

 random.sample

import random

print(random.sample('0123456789',6))#随机取6个,返回的是一个list

将random.sample输出的list转成字符串

random_list = random.sample('0123456789',6)
print(random_list)
print(''.join(random_list))

random常量的使用

import string
print(string.digits) #所有的整数
print(string.ascii_lowercase)#小写字母
print(string.ascii_uppercase) #大写字母
print(string.ascii_letters)#大写字母+小写字母
print(string.punctuation) #所有的特殊符号
print(random.uniform(1,999999))#随机小数

random操作

import string
print(random.choice(string.digits)) #随机取一个值
print(random.uniform(1,999999))#随机小数
l = [1,2,3,4,5,6]
random.shuffle(l) #洗牌
print(l)#list改变,没有返回值

 举个例子:产生一批用户名,长度在6-12之间,产生这一批用户名不能重复,用户名需要以字母开头,必须包含字母和数字

分析
#1、循环,传入的数字是多少,就产生多少条
#2、随机产生一个6-12之间的数字当做长度
#3、不能重复用的,就用集合
#4、判断产生的用户名第一个元素是否不为整数
import string
def op_file(file_name,content=None):
    if content:
        with open(file_name,'w',encoding='utf-8') as fw:
            fw.write(content)
    else:
        with open(file_name,encoding='utf-8') as fr:
            return fr.read()


def gen_username(num):#产生用户名- 100
    all_username = set()#定义空集合
    while len(all_username)!= num:
        length = random.randint(6,12)
        temp = random.sample(string.digits+string.ascii_letters,length)#产生用户名
        if set(temp) & set(string.digits) and set(temp) & set(string.ascii_letters) and \
                not temp[0].isdigit():
            username = ''.join(temp)
            all_username.add(username+'@163.com'+'\n')
    return all_username

usernames = gen_username(100)

username_str = ''.join(usernames)
op_file('usernames.txt',username_str)