Python 第七天

1.css

Cascading Style Sheet 层叠样式表
主要的功能:定位对应的标签 给标签设计样式对标签进行布局

选择器Selector
定位标签的方式

样式设计与布局

  1. 在HTML文档中引入CSS样式设计方式
    1.1 在相应的标签 与属性style的格式 给标签添加样式 [仅对设计的标签有用]
    1.2 在head标签中 引入style标签 style标签之间就是CSS的代码 【只要满足选择器要求 就能定位】

  2. 选择器Selector
    全局选择器 * 匹配所有的标签
    元素选择器 根据标签名称进行定位
    属性选择器
    普通属性选择器
    id属性选择器
    类属性选择器
    包含选择器
    查找子标签的
    查找后辈标签的

    结构选择器
    第一个子元素
    第N个子元素
    倒数第1个子元素
    倒数第N个子元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #box{
           border: lightgrey 1px solid;
            /*  设置宽度  */
            width: 760px;
            /*  调节与其他标签 或者边缘的间隙
             margin: 上下的间隙 左右的间隙
             */
            margin: 10px auto;
        }
        .name{
            color: orange;
        }
        .person_info, .ticket_info{
             /* margin: 上下左右的间隙   */
            margin: 10px;
            border-bottom: lightgrey 1px dotted;
        }
        .ticket_info{
            /*   加粗字体 */
            font-weight: bolder;
        }
        .footer{
            /*  设置成参照物  */
            position: relative;
            /*  高度给写死  */
            height: 100px;
        }
        .right{
            /*  设置位置: 相对于div位于右下角
              最外层的div是一个参照物  需要把最外层的div设置成参照物
              如果没有设置参照物 是以body为参照物
              */
            /*对这个标签进行绝对定位  会脱离文档流*/
            position: absolute;
            /*!*  具体定位的值 是有top/left/right/bottom决定*/
            /* top 是距离参照物的顶部 向下移动多少*/
            /* left 是距离参照物的左边 向右移动多少*/
            /* right 是距离参照物的右边 向左移动多少*/
            /* bottom 是距离参照物的底部 向上移动多少*/
            /* *!*/
             right: 15px;
             bottom: 10px;
        }
        .foot_img{
            position: absolute;
            bottom: 0;
        }
    </style>
</head>
<body>
  <div id="box">
        <div class="header">
            <img src="http://mobile.12306.cn/weixin/resources/weixin/images/mail/mail_top.jpg">
        </div>
        <div class="person_info">
            <h3>尊敬的 <span class="name">%s%s:</span></h3>
            <p>您好!</p>
            <p>您于%s在中国铁路客户服务中心网站(<a href="http://www.12306.cn/">12306.cn</a>) 成功购买了1张车票,票款共计%.2f元,订单号码 %s 。 所购车票信息如下:</p>
        </div>
        <div class="ticket_info">
            <p>1.%s,%s开,%s-%s,%s次列车,6车5A号,二等座,成人票,票价%.1f元,检票口2,电子客票。</p>
        </div>
        <div class="footer">
            <div class="right">
                <p>中国铁路客户服务中心</p>
                <p>%s</p>
            </div>
            <img src="http://mobile.12306.cn/weixin/resources/weixin/images/mail/mail_line.jpg" alt="" class="foot_img">
        </div>
  </div>
</body>
</html>

利用数据结构进行模拟
一个人的身份信息 车票信息数据有多个的 存储一个人的信息 是需要一个容器来进行存储的
为了方便获取相应的数据 使用字典存储人的信息
{姓名: 身份证号: 车票价格: 始发地: 目的地: 车票时间: 车票价格: 车次: 订单号: 邮箱地址:}

为了存储多个人 还需要一个容器 使用列表
[{},{},{},{}]

# 时间工具库
import datetime

#
print(datetime.datetime.now())  # 当前时间  datetime类型的

# 显式时间的时候 需要对时间进行格式化  按照指定的格式显式时间
"""
时间格式化符
    %Y 代表的是年
    %m  月
    %d  日
    %H  时
    %M  分
    %S  秒
"""
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M'))

# 获取时间中的年月日
print(datetime.datetime.now().date())

# 随机库
import random

print(random.randint(1, 13))

# 车票时间 是 当前日期 向后偏移1-14 【随机】
# datetime.timedelta 时间偏移  +时间偏移就是向未来偏移
print(datetime.datetime.now() + datetime.timedelta(days=random.randint(1, 15)))

# 准备5个人的信息
date_list = []
for i in range(5):
    dt = (datetime.datetime.now() + datetime.timedelta(days=random.randint(1, 15),
                                                            minutes=random.randint(1, 61))).strftime('%Y-%m-%d %H:%M')
    date_list.append(dt)
print(date_list)

# 准备数据
datas = [
    {'姓名': '刘哲', '身份证号': '1234567654345676543', '邮箱': '1061507163@qq.com', '订单号': 'E3456789', '车票价格': 200, '车次': 'G5',
     '时间': date_list[0], '始发地': '北京', '目的地': '上海'},
    {'姓名': '李行波', '身份证号': '12345098765678765456', '邮箱': '1207351163@qq.com', '订单号': 'E3456989', '车票价格': 210, '车次': 'G7',
     '时间': date_list[1], '始发地': '北京', '目的地': '深圳'},
    {'姓名': '陈飞耀', '身份证号': '12345098756765454323456', '邮箱': '1878394203@qq.com', '订单号': 'E3455489', '车票价格': 210,
     '车次': 'G7', '时间': date_list[2], '始发地': '北京', '目的地': '深圳'},
    {'姓名': '吴佳豪', '身份证号': '12345098765678765456', '邮箱': '1845139945@qq.com', '订单号': 'E3457889', '车票价格': 210, '车次': 'G7',
     '时间': date_list[3], '始发地': '北京', '目的地': '深圳'},
    {'姓名': '马峰峰', '身份证号': '12345098765678765456', '邮箱': '2720836377@qq.com', '订单号': 'E3459089', '车票价格': 210, '车次': 'G7',
     '时间': date_list[4], '始发地': '北京', '目的地': '深圳'}
]

# content = open('./07_车票邮件描述.html', 'r', encoding='utf-8').read()
# print(type(content))  # <class 'str'>
"""
%  === 占位符 %s
''.format()  === 占位符 {}
"""
import smtplib
from email.mime.multipart import MIMEMultipart  # 构造邮件
from email.mime.text import MIMEText  # 构造正文

server = 'smtp.qq.com'  # 邮箱服务器地址
port = 465
sender = '1061507163@qq.com'  # 发件人
code = 'zvaobhjfiuajbfeg'  # 授权码

# 根据这些信息 连接到服务器 进行授权认证
connect = smtplib.SMTP_SSL(server, port)
connect.login(sender, code)
for info in datas:
    # 构造邮件
    email = MIMEMultipart()
    # 邮件头部
    email['From'] = sender
    email['To'] = info['邮箱']
    email['Subject'] = '订票信息'

    # 创建正文
    content = open('./9.6 demo.html', 'r', encoding='utf-8').read()
    # print(content)
    card_data = info['身份证号']
    if int(card_data[-2]) % 2 == 0:
        call = '女士'
    else:
        call = '先生'
    content = content % (
        info['姓名'][0], call, datetime.datetime.now().date(), info['车票价格'], info['订单号'], info['姓名'], info['时间'],
        info['始发地'],
        info['目的地'], info['车次'], info['车票价格'], datetime.datetime.now().date())
    text = MIMEText(_text=content, _subtype='html')
    email.attach(text)

    # 发送邮件
    connect.sendmail(from_addr=sender, to_addrs=info['邮箱'], msg=email.as_string())
# 断开连接
connect.close()

函数的定义:
把常用的逻辑功能 独立的代码段 进行封装, 在需要使用的时候 直接调用即可

求圆的面积
3.14 * 半径的平方

# 页面1此时的需求  求半径为2的圆的面积
area = 3.1415196 * 2 ** 2
print(f'半径为2的圆的面积是{area}')

# 页面2的需求  求半径为5的圆的面积
area = 3.1415926 * 5 ** 2
print(f'半径为5的圆的面积是{area}')

语法:
def 函数功能名(形式参数1, 形式参数2, …形式参数n):
函数功能体代码块
return 功能运行结果的返回值
解读:
1. def 定义函数的关键字
2. 函数功能名 自己定义标识符名称 【遵守标识符定义规则】
3. (形式参数1, 形式参数2, …形式参数n)
在参与功能运算的时候 有些数据值是动态 不确定的,将其设置成变量 给其设置一个标记名
等待调用函数的时候赋予运算值
这个标记名就叫做形式参数 简称形参

如果没有未知动态的数据参与功能运算 形式参数就不用定义了 但是()必须有

  1. return 也是一个关键字
    功能是结束函数 并将结果返回到函数调用的位置
    如果一个函数没有返回值 return 是可以省略的 或者写为 return None

定义函数的时候如何分析
1. 分析是否有未知项[不确定的数据 动态的数据]参与运算, 如果有的话 有几个? 【决定了形式参数的个数】
2. 分析函数是否需要把运行结果返回 决定了是否有return返回值

如何进行调用
函数是否有返回值
有返回值 变量名 = 函数名(实际参数) # 实际参与运算的数据 称为实际参数 简称实参
没有返回值 函数名(实际参数)
注意事项:
形式参数有几个 实际参数就得传递几个 而且是一一对应的

circle_area = get_circle_area(10)
print(circle_area)

circle_area1 = get_circle_area(11)
print(circle_area1)

def get_max(num1, num2):
    if num1 > num2:
        return num1
    else:
        return num2


def get_perfect(n):
    total = 0
    for a in range(1, n):
        if n % a == 0:
            total += a
    return total == n


def find_key(n, m):
    for k, v in enumerate(n):
        if v == m:
            return k
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DEsert__z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值