精华内容
下载资源
问答
  • RFID学习笔记

    千次阅读 多人点赞 2017-06-06 13:18:46
     射频识别技术RFID(Radio Frequency Identification),又称为电子标签、无线射频识别,是种非接触式的自动识别技术,通过无线电讯号识别特定目标并读写相关数据而无需识别系统与特定目标之间建立机械或光学...

    技术简介:

        射频识别技术RFID(Radio Frequency Identification),又称为电子标签、无线射频识别,是一种非接触式的自动识别技术,通过无线电讯号识别特定目标并读写相关数据而无需识别系统与特定目标之间建立机械或光学接触。可用于识别高速运动物体并可同时识别多个标签,过程中无需人工干预,操作快捷方便。可工作于各种环境,实现对各类物体或设备(人员、物品)在不同状态(移动、静止或恶劣环境)下的自动识别和管理。

        RFID系统主要由应答器、阅读器和高层应用组成,其中的应答器包括集成电路芯片。阅读器用于产生射频载波与应答器进行信息交互。高层应用包括信息的管理和决策。

        应答器的基本包括天线、编/解码器、电源、解调器、存储器,控制器以及负载电路组成。从应答器传送信息时,状态数据从存储器中取出经过编码器和负载调制单元发送。

        应答器可以分为只读应答器、读/写应答器和具有识别功能的应答器。应答器天线部分主要用于数据通信和获取射频能量,给应答器的其他电路提供能量。根据应答器能源获取方式不同可以分为:无源(被动式)应答器、半无源(半被动式)应答器和有源(主动式)应答器。

        有源应答器,这种应答器工作所需的能量完全来自于自身的电源模块,它会主动地与阅读器信息传输。由于主动通信过程需要比较大的能量供应,所以有源应答器的体积往往比较大,重量较重。

        控制器是应答器系统的核心部分,对于可读可写应答器,需要内部逻辑控制对读写的使能和对读写操作的支持,对于有密码的应答器,要求控制器能进行数字验证操作。RFID的应答器的存储容量一般在几字节到几千字节之间,存储器存储的数据量一般为产品的序列号,如EPC编码。

        RFID阅读器(读写器)通过天线实现对应答器识别码和内存数据的读出或写入操作。典型的阅读器包含有高频模块(发送器和接收器)、控制单元、振荡电路以及阅读器天线几部分。在实际应用中,有4种波段的频率,有低频(125k~ 134.2K)、高频(13.56Mhz)、超高频(860-960MHz)和微波(2.45GHz)。RFID阅读器是以一定的频率、特定的通信协议完成对应答器中信息的读取。

        近场通信(NFC)技术是RFID的专用子集。

        阅读器和应答器之间执行短距离无线通信的RFID系统通常利用电磁耦合、电磁感应、无线电波等形式,应用较为典型的是电感耦合,阅读器和应答器天线部分的电感线圈通过电磁场进行信息传输。RFID射频前端是实现数据和能量的交换传输的关键部分,RFID技术通过电感耦合方式进行通信,电感耦合方式的理论基础是LC谐振回路和电感线圈产生的交变磁场,也是RFID天线的基本原型。

        电感耦合分为两种方式:一种是串联谐振回路的耦合,另一种是并联谐振回路的耦合。可把两个或更多个串、并联谐振回路连接起来,构成带通滤波器。谐振放大器中,LC并联谐振回路使用最为广泛。

    行业相关:

    RFID芯片主要供应商:恩智浦半导体(NXP)、德州仪器(TI)和EMMicroelectronic。

    MIFARE是恩智浦一系列免接触式IC产品中的著名品牌,具有典型的高达10厘米(4英寸)读/写距离,在全球有40多种不同应用。MIFARE产品完全符合ISO/IEC 14443标准,已售出2亿6千万个读卡器和100亿个卡组件,经验证比市场上任何其他接口技术都更加成熟可靠。

    系列特色:

    完全符合ISO/IEC 14443国际标准;

    最高可满足NFC Forum 4类标签标准;

    支持4字节和7字节UID和随机ID;

    不同级别的加密、身份验证和通信速度可供选择;

    最高可满足EAL5+通用标准;

    提供来源和近场校验;

    标准接口确保目前的基础设施可轻松升级以符合未来智能卡芯片要求,为价值链的各个层次提供一致的产品与多重资源选择;

    操作简单、快捷,完成一次读写操作仅需0.1秒;

    抗干扰能力强,有快速防冲突机制,在多卡同时进入读写范围内时,能有效防止卡片之间出现数据干扰,读写设备可一一对卡进行处理,提高了应用的并行性及系统工作的速度。

        MIFARE 卡的存贮结构及特点(大容量--16分区、1024字节),能应用于不同的场合或系统。(Mifare技术已经被破解,卡片可以被复制,由于价格低廉,所以还在广泛使用)

        RC530是NXP 公司出品的应用与13.56MHz非接触式通信中高集成读卡IC系列中的一员,该芯片完全集成了在 13.56MHz下所有类型的被动非接触式通信方式和协议。

        MFRC530支持ISO14443A所有的层。RC530的外围电路入图所示。该电路由接收电路和单片机接口电路两部分组成。由于RC530内部接收部分使用一个受益于副载波双边带的概念装入卡响应的调整。推荐使用内部产生的VMID电势作为RX脚的输入电势。为了提供一个稳定的参考电压,必须在VIMD脚接一个对地的电容C9,RX和VMID必须连接一个分压IC卡将回复自己UID,如果没有碰撞阅读器将收到完整的电路由R9,R10构成,而且天线与分压器间还需要用一个电容C10串接。由于IC卡工作在13.56Mhz下。石英晶体在产生用于驱动RC530和天线的13.56Mhz时钟时,还会产生更高频率的谐波。因此必须加上由L1,L2,C11,C13组成的低通滤波电路。

        MFRC522是NXP 公司针对三表最新推出的一款非接触式低功耗读写基站芯片,它是应用于13.56MHz非接触式通信中高集成读卡IC系列中的一员。该读卡IC系列利用了先进的调制和解调概念,完全集成了13.56MHz下所有类型的被动非接触式通信方式和协议。 MF RC522支持ISO14443A所有的层,传输速度最高达424kbps,具有三种主机接口方式:SPI模式、 UART模式、 I2C模式。MFRC523是一个高度集成的低功耗非接触读写芯片,集成了13.56MHz下的各种主动/被动式非接触通信方法和协议。

    通讯主要分为4步:

    第一步、寻卡,写通讯命令26H 或52H到FIFODATA,写命令1EH到COMMAND,成功后得到卡类型。

    第二步、选择,写通讯命令93H到FIFODATA,写命令1EH到COMMAND,成功后得到卡号。 

    第三步、认证,通过LOADKEY写KEY到KEY缓存,写参数命令60H(认证A密码)或61H(认证B密码)+块地址+卡号到FIFODATA,写命令0CH到COMMAND,成功后再写命令14H到COMMAND,此操作卡不返回数据,通过读取标记判断是否成功。

    第四步、直接对卡进行读写增减值操作,也就是通过在FIFODATA上写入命令参数及数据,通过写命令1EH到COMMAND实现。

    智能标签IC:

        EPCglobal标准的UCODE无源UHF转发器IC非常适合需要高速操作的供应链和物流应用,具有高度防冲突、面向远距离读取的高敏感度以及适合全球应用的更宽的频率范围。UCODE IC系列提供不同的存储容量和其他特殊功能,用户可以面向特定应用选择性价比最高的容量和功能。

        UHF EPCglobal第2代标准可将UHF RFID技术的大规模部署投入商用,并用于无源智能挂牌和标签。主要的应用领域包括全球供应链管理和物流,尤其考虑到欧洲、美国和中国的频率标准,确保可实现数米远的工作距离。

        G2X是专为无源智能挂牌与标签而设计的芯片,支持EPCglobal第1类第2代UHF RFID标准。它尤为适合需要在数米远进行操作以及高防干扰速率的应用。

        G2X属于恩智浦UCODE产品系列下的一款产品。所有UCODE产品系列均提供防干扰和干扰仲裁功能。这可让读卡器在其天线范围内同步操作多个标签/挂牌。UCODE G2X标签/挂牌无需外部电源。(芯片如:SL3ICS1002)。

        HITAG®是低频(LF) RFID,低频技术是严苛环境应用的首选技术,它可提供所需的高可靠性、稳定性和安全数据传输。

        NTAG®产品为NFC解决方案,包括广泛的供电选择:无源供电,半无源供电和互联IC供电等,在接近操作范围及每个安全级别和互动性方面具有卓越的性能。所以,无论是现在还是将来,客户都能找到适合他们应用的最佳解决方案。NTAG IC完全符合NFC Forum和ISO/IEC标准,可实现与NFC基础设施的最大互操作性。


    搜索到的国内RFID相关企业:

    1、深圳远望谷 

    2、上海复旦微电子 

    3、深圳先施科技 

    4、北京航天金卡 

    5、北京同方智能卡 

    6、上海贝岭 

    7、北京亚仕同方 

    8、江苏瑞福智能 

    9、上海坤锐电子 

    10、凯泰科技

        对于 LF 和 HF 频段,系统工作在天线的近场,标签所需的能量通过电感耦合方式由读写器的耦合线圈辐射场获得,工作方式为电感耦合。型号为HRRFD-NF09的近场天线。

        对于超高频和微波频段,读写器天线为标签提供能量或唤醒有源标签,工作距离较远,一般位于读写器天线的远场。如图是型号为CS—771的圆极化天线。

    应用相关:

        网上有开发人员实验验证,可支持手动认证操作的数据收发,认证操作就是一系列的数据收发,普通数据能收发,认证数据也可以。

        支持手动实现校验位操作,MifareClassic系列(就是使用Crypto-1密码系统)在认证中必须需要读卡器支持校验位控制。因为在MifareClassic系列的认证过程中,第二步和第三步读卡器、卡片之间传送的数据是加密的,但是校验位是对应明文的校验。如果处于自动校验状态,那么校验位肯定就是所收发的数据(密文)的校验而不是明文的校验。所以不支持控制校验就不支持手动认证。


    主要性能参数:

    技术难点:

        RFID 应答器天线作为RFID系统的重要组成部分,它的性能将极大的影响整个RFID系统的效率与质量。影响RFID 天线性能的主要因素包括天线的尺寸、工作频段、阻抗及增益等。

        一般常用的RFID天线常采用弯折线型偶极子形式,便于缩减天线尺寸及天线加工。该类型天线方向图为垂直于天线面,因此使用时贴附于目标物体垂直外表面;当物体的长度随之变化时,要求天线也随之变化,其增益也随之改变,因此需要设计出一款能够根据长度而改变的天线,另外,其各项天线性能也需要满足要求。在RFID系统中,天线分为电子标签天线和读写器天线两大类,分别承担接收能量和发射能量的作用。

        发射天线的基本功能之一是把从馈线取得的能量向周围空间辐射出去,基本功能之二是把大部分能量朝所需的方向辐射。

        RFID 系统中的术语“零讯号(null)”指的是尽管接收通信所需的电力的距离足够 ( 即,在可通信范围内 ) 仍不能执行通信的现象,并且存在可能导致这种零讯号发生的各种因素。反相就是一种这样的因素。由反相导致的零讯号将被称作反相零讯号。

        超高频 RFID 技术对一次性写入的数据量是有限制的,因此对于大数据的写入需要实现续写功能,也就是说每次数据写入都要从上一次写入数据的结束位置开始写本次需要存储的数据信息。数据安全是数据管理的重要组成部分,因此对业务数据的保护也是超高频 RFID 电子标签应用的重要部分。

        在射频读写器的应用中遇到的一个问题就是阅读器冲突,这是一个阅读器接收到的信息和另外一个阅读器接收到的信息发生冲突,产生重叠。解决这个问题的一种方法是使用TDMA技术,保证阅读器不会互相干扰。

     

    专利相关:

        截止日前的相关已授权发明专利5952项,TOP5:NXP(95),国家电网(85),中兴(80),艾利丹尼森公司(76),富士通(70)。

    思维发散——场检测和场激发:

    金属探测仪:通常由两部分组成,即检测线圈与自动剔除装置,其中检测线圈为核心部分。线圈通电后会产生磁场,有金属进入磁场,就是引起磁场变化,由此判断有金属杂质。某些产品本身含水、盐等到点成分,也会对磁场产生类似金属的干扰。这种现象,称为产品效应。可以通过产品效应补偿功能解决此类问题。

        探测器产生周期性变化的磁场,周期性变化的磁场在空间产生涡旋电场。而涡旋电场如果遇到金属的话,会形成涡电流,可以被检测到。涡电流产生后反作用于磁场使线圈的电压和阻抗发生变化。

        发射线圈的电流会产生一个电磁场,就如同电动机也会产生电磁场一样。磁场的极性垂直于线圈所在平面。每当电流改变方向,磁场的极性都会随之改变。这意味着,如果线圈平行于地面,那么磁场的方向会不断地交替变化,一会儿垂直于地面向下,一会儿又垂直于地面向上。 

        随着磁场方向在地下反复变化,它会与所遇的任何导体目标物发生作用,导致目标物自身也会产生微弱的磁场。目标物磁场的极性同发射线圈磁场的极性恰好相反。如果发射线圈产生的磁场方向垂直地面向下,则目标物磁场就垂直于地面向上。             

        接收线圈能完全屏蔽发射线圈产生的磁场。但它不会屏蔽从地下目标物传来的磁场。这样一来,当接收线圈位于正在发射磁场的目标物上方时,线圈上就会产生一个微弱的电流。

        这一电流振荡的频率与目标物磁场的频率相同。接收线圈会放大这一频率并将其传送到金属探测器的控制台,控制台上的元件继而对这一信号加以分析。

        X光的光子与普通可见光的光子基本相同,但是它们携带的能量更多。这种较高的能量水平可以使X光直接穿过人体大多数的软组织。常规的X光成像技术利用的是光影原理。从人体一侧照射“光线”,此时,人体另一侧的胶片可记录骨骼的轮廓。

    展开全文
  • 移动web开发笔记

    万次阅读 2016-05-15 20:12:27
    原理:定个最大宽度,设备屏幕超过这个宽度之后,rem大小不再变化,否则,rem大小设置为屏幕宽度的几分之,页面中的长度单位值用rem代替px,这样随着页面的宽度变化能够进行等比例缩放。 rem实际是页面根元素...

    移动web开发笔记

    参考:
    移动web开发入门
    移动端web开发技巧

    基础概念

    像素单位

    CSS pixels与device pixels CSS pixels

    浏览器使用的抽象单位, 主要用来在网页上绘制内容。 device pixels: 显示屏幕的的最小物理单位,每个dp包含自己的颜色、亮度。 等值的 CSS pixels在手机屏幕上占多大的位置,这不是固定的,这取决于很多属性。经过分析和总结,我们可以得出这么一条公式:
    1 CSS pixels = (devicePixelRatio)^2 device pixels
    (^2是平方的意思,至于 devicePixelRatio是什么东西,后面会讲解) 。

    PPI/DPI

    PPI,有时也叫DPI,所表示的是每英寸所拥有的像素(pixel)数目,数值越高,即代表显示屏能够以越高的密度显示图像。(注:这里的像素,指的是device pixels。)搞清楚了PPI是什么意思,我们就能很容易理解PPI的计算方式了,我们需要首先算出手机屏幕的对角线等效像素,然后处以对角线(我们平常所说的手机屏幕尺寸就是说的手机屏幕对角线的长度),就可以得到PPI了。准确的计算公示大家可以参照下图。比较有意思的是,根据公式计算出来的iPhone 4的PPI为330,要比苹果官方公布的326要高一点点。

    devicePiexelRatio

    pixel - px ( picture element )
    
    dpi / ppi - 每英寸像素 ( dot per inch )
    
    dips - 设备独立像素 ( device-independent pixels )
    
    devicePixelRatio - 物理像素 / dips 
    

    文字大小控制

    px, rem
    
    固定大小 - px
    
    多屏适配,统一修改 - rem
    相对长度单位。相对于根元素(即html元素)font-size计算值的倍数
    
    rem - font size of the root element (W3C)
    

    viewport

    参考:移动前端开发之viewport的深入理解

    <meta name="viewport"
          content="width=device-width,
                   height=device-height,
                   inital-scale=1.0,
                   maximum-scale=1.0,
                   user-scalable=no;"
    />

    在苹果的规范中,meta viewport 有6个属性,分别如下:
    - width - viewport的宽度[pixel_value |device-width]
    - height - viewport的高度[pixel_value |device-height]
    - initial-scale - 初始的缩放比例[float_value]christer1229
    - maximum-scale - 允许用户缩放到的最大比例
    - minimum-scalbujue - 允许用户的最小缩放值
    - user-scalable - 用户是否可以手动缩放 [yes | no]

    响应式布局

    原则

    • 移动优先
    • 渐进增强

    实现方式

    • 媒体查询
    • 使用JS
    • 使用第三方框架

    布局方案

    百分比布局(流体布局)

    将元素原本的定宽除父容器的宽度得到百分比设置为宽度,使用百分比,文字使用 em。

    • 优点:
      流动布局页面对用户更友好,因为它能自适应用户的设置。
      页面周围的空白区域在所有分辨率和浏览器下都是相同的,在视觉上更美观。
      如果设计良好,流动布局可以避免在小分辨率下出现水平滚动条。
    • 缺点:
      设计者更难控制用户所见,并可能忽略掉一些错误,因为在特定的分辨率下看起来好的;
      图片,视频以及其他设置了宽度的内容可能需要多种宽度以适应不同分辨率的用户;
      在特别大的分辨率下,内容会被拉成长长的一行,变得难以阅读;
      会有画面失真问题

    弹性(flexible)布局

    用rem替代px
    原理:定一个最大宽度,设备屏幕超过这个宽度之后,rem大小不再变化,否则,rem大小设置为屏幕宽度的几分之一,页面中的长度单位值用rem代替px,这样随着页面的宽度变化能够进行等比例缩放。
    rem实际是页面根元素的字体大小,通过js改变rem值的代码如下:

    ;
    ( function( win ) ) {
        var doc = win.document;
        var docEl = doc.documentElement;//获取文档元素
        var tid;
    
        function refreshRem() {
            var width = docEl.getBoundingClientRect().width;//获取设备宽度
            if ( width > 540 ) {
                width = 540;
            }
            var rem = width / 10;//设置rem为屏幕宽度的十分之一
            docEl.style.fontSize = rem + 'px';
        }
        win.addEventListener('resize', function() {//屏幕宽度改变时
            clearTimeout(tid);//清除之前的计时器
            tid = setTimeout(refreshRem, 300);//300ms后改变rem大小
        }, false);
    
        win.addEventLister('pageshow', function( e ) {//页面显示时
            if (e.persisted) {
                clearTimeout(tid);
                tid = setTimeout(refreshRem, 300);
            }
        }, false);
        refreshRem();
    })( window );

    参考:移动端页面使用rem来做适配

    flex-box布局

    flex-box,参考:
    Flex 布局教程:语法篇
    优点:布局方便,灵活性高;
    缺点:兼容性问题;

    图片处理

    普通设置:

    img {
        max-width: 100%;
    }

    或:

    img {
        width: 100%;
        max-width: 300px;
    }//限制最宽不超过300px;

    响应式图片:

    参考:
    响应式图片srcset全新释义sizes属性w描述符
    Srcset和sizes

    即根据屏幕密度现实对应尺寸图片
    src:指定资源(在浏览器不认识srcset和size时会加载这个)
    srcset:srcset的值是可用图像版本的URL列表;每个图片的宽度都用w描述符来表明。
    sizes:使用长度与媒体查询配合,浏览器会检测每一个媒体查询,直到匹配到为止。使用查询配合的长度作为“选择资源”拼图的最后一块:图像渲染宽度或者相对于视图。
    eg.

    <img src="small.jpg"
     srcset="large.jpg 1024w,
             medium.jpg 640w,
             small.jpg 320w"
     sizes="(min-width: 36em) 33.3vw,
            100vw"
     alt="A rad wolf" />

    媒体查询

    1. 可以通过<link>标签的media属性为样式表指定设备类型
    <link rel="stylesheet" type="text/css" media="screen" href="screen-style.css">
    <link rel="stylesheet" type="text/css" media="screen and (orientation:portrait)" href="style.css"> //纵向屏幕
    <link rel="stylesheet" type="text/css" media="screen and (max-width:960px)" href="style.css"> //宽度小于900px时
    1. 在css中同样可以使用
    @media screen and (max-width: 960px){
        body{
            background: #000;
        }
    }
    @media (max-width: 960px){
        body{
            background: #000;
        }
    }
    @media screen and (min-width:960px) and (max-width:1200px){
        body{
            background:yellow;
        }
    }
    1. @import方法
      @import可以引用样式文件,同样也可以用来引用媒体类型。@import引入媒体类型主要有两种方式,一种是在样式中通过@import调用另一个样式文件;另一种方法是在<head></head>标签中的<style></style>中引入,但这种使用方法在IE6~7都不被支持,如样式文件中调用另一个样式文件时,就可以指定对应的媒体类型。
    @importurl(reset.css) screen;   
    @importurl(print.css) print;

    <head>中的<style>标签中引入媒体类型方法。

    <head>
    <style type="text/css">
        @importurl(style.css) all;
    </style>
    </head>

    为方便查阅,下面列出了所有可供媒体查询检测的特性
    - width:视口宽度。
    - height:视口高度。
    - device-width:渲染表面的宽度(对我们来说,就是设备屏幕的宽度)。
    - device-height:渲染表面的高度(对我们来说,就是设备屏幕的高度)。
    - orientation:检查设备处于横向还是纵向。
    - aspect-ratio:基于视口宽度和高度的宽高比。一个16∶9比例的显示屏可以这样定义aspect-ratio: 16/9。
    - device-aspect-ratio:和aspect-ratio类似,基于设备渲染平面宽度和高度的宽高比。
    - color:每种颜色的位数。例如min-color: 16会检测设备是否拥有16位颜色。
    - color-index:设备的颜色索引表中的颜色数。值必须是非负整数。
    - monochrome:检测单色帧缓冲区中每像素所使用的位数。值必须是非负整数,如monochrome: 2。
    - resolution:用来检测屏幕或打印机的分辨率,如min-re一种检测 IE 是否加载完成的方式,使用 doScroll 方法调用,详情可见http://javascript.nwbox.com/IEContentLoaded/
    原理就是对于 IE 在非 iframe 内时,只有不断地通过能否执行 doScroll 判断 DOM 是否加载完毕。在上述中间隔 50 毫秒尝试去执行 doScroll,注意,由于页面没有加载完成的时候,调用 doScroll 会导致异常,所以使用了 try -catch 来捕获异常。
    结论:所以总的来说当页面 DOM 未加载完成时,调用 doScroll 方法时,会产生异常。那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了。solution: 300dpi。还可以接受每厘米像素点数的度量值,如min-resolution: 118dpcm。
    - scan:电视机的扫描方式,值可设为progressive(逐行扫描)或interlace(隔行扫描)。如720p HD电视(>devide-width指屏幕宽高,width指渲染窗口宽高
    720p的p即表明是逐行扫描)匹配scan: progressive,而1080i HD 电视(1080i中的i表明是隔行扫描)匹配scan: interlace。
    - grid:用来检测输出设备是网格设备还是位图设备。
    - 在上述所有特性中,除scan和grid之外,都可使用min和max前缀来创建一个查询范围。

    HTML5

    新表单类型

    • placeholder
      只需在input元素中加入placeholder属性,其属性值就会默认显示为占位符文字,输入框获取焦点时该文字自动消失。当输入框失去焦点且没有任何输入值时,占位符文字则会再次显示。
    • required
      在支持HTML5的浏览器中,在input元素中追加布尔类型的属性required(也就是说你可以选择追加或不追加该属性),则表明该表单域为必填项。如果表单提交时该必填项没有任何信息,浏览器则会显示警告信息。警告信息的显示方式(包括显示内容和样式)取决于浏览器与输入框类型。
      range、color、 button和hidden类型的输入元素则不能使用required,因为这几种输入类型几乎都有默认值。

    • autofocus
      HTML5的autofocus属性可以让表单在加载完成时就有一个表单域被默认聚焦(或选中),以便于用户输入。
      例如有多个表单域追加了autofocus属性,在Chrome(v16)中会聚焦最后一个使用autofocus属性的表单域,而Firefox(v9)恰恰相反,会聚焦第一个使用autofocus的表单域。

    • autocomplete

    也可以通过给表单本身(不是fieldset)设置属性来禁用整个表单的自动完成功能。示例代码如下:

    <form id="redemption" method="post" autocomplete="off">
    • list(及对应的datalist元素)
      list属性以及对应的datalist元素可以让用户在输入框中开始输入值的时候,显示一组备选值。
      list属性中的值(awards)同时也是datalist元素的id。这样就可以让datalist与输入项关联起来。虽然将option包裹在select中不是必需的,但这样做便于为老版本浏览器提供降级方案。

    HTML5的新输入类型

    • type=”email”——支持它的浏览器会期望用户的输入匹配电子邮箱的格式。
    • type=”number”——支持该特性的
      浏览器期望输入一个数字。这种输入类型默认还提供控制按钮,允许用户简单地点击向上或向下来改变数值。
      你可能注意到在上面的代码中,我们还设置了允许输入的最小值和最大值范围,具体代码如下:
    type="number" min="1929" max="2015"

    超出范围的数字会(应该)得到特殊对待。
    - type=”url”——你猜对了,URL输入类型用于输入URL地址。
    - type=”tel”是另一种用于收集联系人信息的输入类型。tel表示表单域期望输入一个电话号码- type=e=”search”——和普通文本输入框的表现基本一样,仅在个别浏览器中渲染得有点细微差别。
    你可用pattern属性通过正则表达式来定义表单域的数据
    - type=”color”——会在支持该特性的浏览器中生成一个颜色选择器,让用户可以选择十六进制的颜色值。
    - 日期和时间输入类型
    和color类型一样,目前对date提供原生支持的浏览器寥寥无几,大多数浏览器默认都将其渲染为标准的文本输入框。超级棒的Opera已经实现了这个功能
    range输入类型会生成一个滑动条。

    CSS3

    笔记

    设备控制

    • 打开数字键盘
      <input type="tel">
    • 隐藏地址栏
      setTimeout(function(){ window.scrollTo(0, 1); }, 0);
    • 在iPhone,iPad,iTouch的safari上可以使用添加到主屏按钮将网站添加到主屏幕上
      <link rel="apple-touch-icon" href="apple-touch-icon-iphone.png" />
      <link rel="apple-touch-icon" sizes="72x72" href="apple-touch-icon-ipad.png" />
      <link rel="apple-touch-icon" sizes="114x114" href="apple-touch-icon-iphone4.png" />

    设备交互

    1. input fixed失效问题
      参考:
      iOS下的 Fixed + Input 调用键盘的时候fixed无效问题解决方案
      【小贴士】虚拟键盘与fixed带给移动端的痛!
      Web移动端Fixed布局的解决方案
      出现原因:
      移动端虚拟键盘出现的条件是:文本框(文本类)获得焦点,但是文本框获得焦点未必会弹出键盘;
      收起虚拟键盘的条件是:文本框失焦
      总而言之,我们认为会出现或者消失虚拟键盘的时候都可能不工作
      在移动设备上,如果文本框在上方,点击不会有什么问题:
      在设备的最下面的话,整个块会上移,以将input区域显示出来
      这个时候几个棘手的问题就出现了:
      ① 虚拟键盘的出现对页面来说是不可知的,这句话的理解是:没有键盘出现事件,没有办法获取键盘高度
      ② 键盘是“贴”在了viewport上,表面上不会对dom产生“任何”影响,但是这个时候一些定位元素的表现却变得“怪异”。

    软键盘唤起后,页面的 fixed 元素将失效(即无法浮动,也可以理解为变成了 absolute 定位),所以当页面超过一屏且滚动时,失效的 fixed 元素就会跟随滚动了。

    这便是 iOS 上 fixed 元素和输入框的 bug 。其中不仅限于 type=text 的输入框,凡是软键盘(比如时间日期选择、select 选择等等)被唤起,都会遇到同样的问题。

    解决方案:
    使fixed的父元素不滚动,将滚动区域限制在与footer和header同级的内容部分。

    性能优化

    参考:移动开发规范概述
    要考虑Android低端机与2G网络场景下性能 注意!

    发布前必要检查项

    所有图片必须有进行过压缩
    考虑适度的有损压缩,如转化为80%质量的jpg图片
    考虑把大图切成多张小图,常见在banner图过大的场景
    

    加载性能优化, 达到打开足够快

    数据离线化,考虑将数据缓存在 localStorage
    初始请求资源数 < 4
    图片使用CSS Sprites 或 DataURI
    外链 CSS 中避免 @import 引入
    考虑内嵌小型的静态资源内容
    初始请求资源gzip后总体积 < 50kb
    静态资源(HTML/CSS/JS/Image)是否优化压缩?
    避免打包大型类库
    确保接入层已开启Gzip压缩(考虑提升Gzip级别,使用CPU开销换取加载时间) 注意!
    尽量使用CSS3代替图片
    初始首屏之外的静态资源(JS/CSS)延迟加载
    初始首屏之外的图片资源按需加载(判断可视区域)
    单页面应用(SPA)考虑延迟加载非首屏业务模块
    开启Keep-Alive链路复用
    

    运行性能优化, 达到操作足够流畅

    避免 iOS 300+ms 点击延时问题 注意!
    缓存 DOM 选择与计算
    避免触发页面重绘的操作
    Debounce连续触发的事件(scroll / resize / touchmove等),避免高频繁触发执行 注意!
    尽可能使用事件代理,避免批量绑定事件
    使用CSS3动画代替JS动画
    避免在低端机上使用大量CSS3渐变阴影效果,可考虑降级效果来提升流畅度
    HTML结构层级保持足够简单
    尽能少的使用CSS高级选择器与通配选择器
    Keep it simple
    

    在线性能检测评定工具使用指南

    访问 Google PageSpeed 在线评定网站
    在地址栏输入目标URL地址,点击分析按钮开始检测
    按 PageSpeed 分析出的建议进行优化,优先解决红色类别的问题
    
    展开全文
  • Python快速编程入门课后程序题答案

    万次阅读 多人点赞 2019-06-19 23:17:45
    前言 本文只是简单的整理了一下课后习题的编程题,...第章 1、编写个Python程序,输出如下图效果。 ++++++++++ + + ++++++++++ print("+++++++++++") print("+ +") print("+++++++++++") 2、编写个Pyt...

    前言

    本文只是简单的整理了一下课后习题的编程题,具体的填空、选择、判断可以见:Python快速编程入门课后习题答案

    第一章

    1、编写一个Python程序,输出如下图效果。

    ++++++++++
    +        +
    ++++++++++

    print("+++++++++++")
    print("+         +")
    print("+++++++++++")

    2、编写一个Python程序,输出如下语句。

    学Python,来传智播客黑马程序员
    学Python,来传智播客黑马程序员
    学Python,来传智播客黑马程序员
    学Python,来传智播客黑马程序员
    学Python,来传智播客黑马程序员

    print("学Python,来传智播客黑马程序员")
    print("学Python,来传智播客黑马程序员")
    print("学Python,来传智播客黑马程序员")
    print("学Python,来传智播客黑马程序员")
    print("学Python,来传智播客黑马程序员")

    第二章

    1、输入直角三角形的两个直角边的长度a、b,求斜边c的长度。

    import math
    a=float(input("请输入斜边 1 的长度")) #输入实数
    b=float(input("请输入斜边 2 的长度")) #输入实数
    c=a*a+b*b #计算,得到的是斜边的平方
    c=math.sqrt(c) #开方,得到的是斜边长
    print("斜边长为:",c) #显示,一项是字符串,一项是 c 表示的斜边长
    

    2、编写一个程序,用于实现两个数的交换。

    # 用户输入
    x = input('输入 x 值: ')
    y = input('输入 y 值: ')
    # 不使用临时变量
    x,y = y,x
    print('交换后 x 的值为: {}'.format(x))
    print('交换后 y 的值为: {}'.format(y))

    第三章

    1、编写一个程序,使用for循环输出0~10之间的整数。

    for i in range(1,11):
        print(i)
    

    2、编写一个程序,判断用户输入的数是正数还是负数。

    a=int(input("请输入一个数:"))
    if a>0:
        print("a是一个正数")
    elif a<0:
        print("a是一个负数")
    else:
        print("a等于0")
    

    3、编写一个程序,输出九九乘法表。

    i=1
    while i<10:
        j=1
        while j<=i:
            print("%d*%d=%-2d "%(i,j,i*j),end='')
            j+=1
        print("\n")
        i+=1
    

    第四章

    1、接收输入的一行字符,统计出字符串中包含数字的个数。

    myStr = input("请输入任意字符串:")
    num = 0
    for s in myStr:
        if s.isdigit():
            num += 1
    print(num)
    

    2、请输入星期几的第1个字母,用来判断是星期几,如果第1个字母一样,则继续判断第2个字母,以此类推。

    week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    while True:
        myStr = input("请输入任意一个字母:")
        upMyStr = myStr.upper()
        for weekS in week:
            if upMyStr == weekS[0]:
                if weekS.startswith("M"):
                    print("星期一")
                elif weekS.startswith("W"):
                    print("星期三")
                elif weekS.startswith("F"):
                    print("星期五")
                elif weekS.startswith("T") or weekS.startswith("S"):
                    secondStr = input("请再输入任意一个字母:")
                    newStr = upMyStr+secondStr
                    print(newStr)
                    for weekStr in week:
                        if weekStr.find(newStr,0,2) != -1:
                            if newStr == "Tu":
                                print("星期二")
                            elif newStr == "Th":
                                print("星期四")
                            elif newStr == "Sa":
                                print("星期六")
                            elif newStr == "Su":
                                print("星期日")
                            break
                break
    

    3、编写一个程序,计算字符串中子串出现的次数。

    str = "Hello,welcome to itheima!!"
    print(str.count("o"))
    

    第五章

    1、编写一个函数,用于判断用户输入字符串是否由小写字母和数字构成。

    def message():
        myStr = input("请输入密码,只能为小写字母和数字:")
        if myStr.isalnum() and myStr.lower() == myStr:
            print("符合要求")
        else:
            print("不符合要求")

    2、请根据下述需求,编写一个程序。

    用户输入一个字符串,将下标为偶数的字符提出来合并为一个新的字符串A,再将下标为奇数的字符提出来合并成为一个新的字符串B,再将字符串A和B连接起来并且输出。

    arr = []
    evenStr = ""
    oddStr = ""
    message = input("请输入任意字符串:")
    for string in message:
        arr.append(string)
    for eStr in (arr[::2]):
        evenStr = evenStr+eStr
    for oStr in (arr[1::2]):
        oddStr = oddStr+oStr
    print(evenStr+oddStr)
    

    3、请编写一个程序,用于统计字符串中每个字母出现的次数(字母忽略大小写,a和A看做是一个字母),统计出的结果,请按照[‘a’:3,’b’:2]的格式输出。

    arr = []
    def count():
        myStr = input("请输入只包含字母的字符串:")
        if myStr.isalpha():
            newStr = myStr.lower()
            for string in newStr:
                arr.append(string)
            a = {}
            for i in arr:
                if arr.count(i) >= 1:
                    a[i] = arr.count(i)
            print(a)
        else:
            print("输入的内容有误")
    count()
    

    4、请根据下列需求,编写一个程序。

    用户输入一个字符串,请将字符串中所有字母全部后移动一位,最后一个字母放到字符串的开头,最后将新的字符串输出。

    arr = []
    result = ""
    myStr = input("请输入字符串:")
    for string in myStr:
        arr.append(string)
    last = arr[-1]
    arr.remove(last)
    arr.insert(0,last)
    for new in arr:
        result = result + new
    print(result)
    

    5、假设有个列表存储奇数个数字,请编写程序,输出中间位置的数字。

    arr = []
    n = int(input("请输入列表元素的个数(奇数):"))
    for i in range(n):
        num = int(input("请输入第%d个数:"%(i+1)))
        arr.append(num)
    arr.sort()
    print("该列表中间位置的数字为:",arr[n//2])
    

    6、已知info=[1,2,3,4,5],请通过两种编程方法,将列表变成info=[5,4,3,2,1]。

    #第一种:
    arr = [1,2,3,4,5]
    arr.reverse()
    print(arr)
    
    #第二种:
    arr = [1,2,3,4,5]
    arr.sort(reverse=True)
    print(arr)
    

    7、请编写一个函数满足下列需求:

    用户输入n,然后输入n个整数到列表中,列表中的n个整数需要使用冒泡进行排序,并将排序后的结果输出。

    arr = []
    length = int(input("请输入数字的总个数:"))
    i = 0
    while i < length:
       num =  int(input("输入第%d个数字:"%(i+1)))
       arr.append(num)
       i+=1
    print("排序前:%s"%arr)
    # 对列表排序
    for i in range(length):
        flag = 0
        for j in range(1,length):
            if arr[j-1] > arr[j]:
                arr[j-1],arr[j] = arr[j],arr[j-1]
                flag = 1
        if not flag:
            break
    print("排序后:%s"%arr)
    

    8、请编写一个程序,实现删除列表中重复元素的功能。

    arr = []
    length = int(input("请输入列表的总个数:"))
    i = 0
    while i < length:
       element =  input("输入第%d个元素:"%(i+1))
       arr.append(element)
       i+=1
    # 列表转为集合
    newList = set(arr)
    print(newList)
    

    9、假设有两个3×3的矩阵,请编写一个程序,计算这两个矩阵的和并输出。

    def add(a, b):
        # 下面两行保证输入的a和b是维数相同的矩阵,根据实际情况不要也可以
        assert (len(a) == len(b))
        assert (all([len(a[i]) == len(b[i]) == len(a[0]) for i in range(len(a))]))
        i, j = len(a), len(a[0])
        c = [[0] * j] * i
        for m in range(i):
            for n in range(j):
                c[m][n] = a[m][n] + b[m][n]
        return c
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    b = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
    c = add(a, b)
    print(c)
    

    10、请编写一个程序,使用字典存储学生信息,学生信息包括学号和姓名,请根据学生学号从小到大输出学生的信息。

    dic = {}
    i=0
    while i<3:
         number = input("输入学生学号:")
         name = input("输入学生姓名:")
         dic.__setitem__(number,name)
         i+=1
    print("排序前:%s"%dic)
    def dict2list(dic:dict):
        ''' 将字典转化为列表 '''
        keys = dic.keys()
        vals = dic.values()
        lst = [(key, val) for key, val in zip(keys, vals)]
        return lst
    new = sorted(dict2list(dic), key=lambda x:x[0], reverse=False)
    print("排序后:%s"%new)
    

    11、已知一个字典包含若干员工信息(姓名和性别),请编写一个函数,删除性别为男的员工信息。

    def delMale(dict):
        keys = []
        values = []
        for (key,value) in dict.items():
            keys.append(key)
            values.append(value)
        for value in values:
            if value == 0:
                index = values.index(value)
                arrKey = keys[index]
                del dict[arrKey]
                values[index] = 3
                keys[index] = "占位"
    dic = {"小明":0, "小红":1,"小兰":1,"小白":0}
    print("删除前:%s"%dic)
    delMale(dic)
    print("删除后:%s"%dic)
    

    12、已知一个列表存储了多个整数,请编写函数,删除列表中的素数。

    # 错误的版本
    arr = [12,3,37,7,91,67,27,45,6]
    def delPrime(arr):
        for element in arr:
            # 质数大于 1
            if element > 1:
                # 查看因子
                for i in range(2, element):
                    if (element % i) == 0:
                        break
                else:
                    arr.remove(element)
    delPrime(arr)
    print(arr)
    # 正确的版本
    arr1 = [12,3,37,7,91,67,27,45,6]
    arr2 = [12,3,37,7,91,67,27,45,6]
    def delPrime(arr1):
        for element in arr2:
            # 质数大于 1
            if element > 1:
                # 查看因子
                for i in range(2, element):
                    if (element % i) == 0:
                        break
                else:
                    arr1.remove(element)
    delPrime(arr1)
    print(arr1)
    

    第六章

    1、定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。
    例如:

    请输入第1个整数:10
    请输入第2个整数:15
    请输入第3个整数:20
    其中最大值为:20

    def getMax():
        num1 = int(input("请输入第1个整数:"))
        num2 = int(input("请输入第2个整数:"))
        num3 = int(input("请输入第3个整数:"))
        temp = 0 # 临时变量,存放中间产生的第2大数值
        if num1 > num2:
            temp = num1
        else:
            temp = num2
        if temp>num3:
            return "其中最大值为:"+ str(temp)
        else:
            return "其中最大值为:"+ str(num3)
    maxValue = getMax()
    print(maxValue)
    

    2、编写函数,求出“1/(1×2)-1/(2×3)+1/(3×4)-1/(4×5)+···”前n项的和,函数以n为参数,它是用户输入的。

    def sum(n):
        res = 0
        while n >= 1:
            if n%2 == 0:
                res -= 1.0/(n*(n+1))
            else:
                res += 1.0/(n*(n+1))
            n-=1
        return res
    num = int(input("请输入一个整数:"))
    print(sum(num))
    

    3、回文数是一个正向和逆向都相同的整数,如 123454321、9889。编写函数判断一个整数是否是回文数。

    def is_palindrome(n):
        n = str(n)
        m = n[::-1]
        return n == m
    result = is_palindrome(1247321)
    print(result)
    

    4、编写函数,判断输入的三个数字是否能构成三角形的三个边。

    def sjx(a, b, c):
        if (a + b > c and a + c > b and b + c > a):
            return "能构成三角形"
        else:
            return "不能构成三角形"
    result1 = sjx(3, 4, 5)
    print(result1)
    result2 = sjx(1, 1, 2)
    print(result2)
    

    5、编写函数,求两个正整数的最小公倍数。

    # 定义函数
    def lcm(x, y):
       #  获取最大的数
       if x > y:
           greater = x
       else:
           greater = y
       while(True):
           if((greater % x == 0) and (greater % y == 0)):
               lcm = greater
               break
           greater += 1
       return lcm
    # 获取用户输入
    num1 = int(input("输入第一个数字: "))
    num2 = int(input("输入第二个数字: "))
    print( num1,"和", num2,"的最小公倍数为", lcm(num1, num2))
    

    第七章

    1、已知有个列表[1,2,3,4,5],让列表的每个元素加1,把结果不能被2整除的元素筛选出来。

    result = filter(lambda x:(x+1)%2, [1, 2, 3, 4, 5])
    print(result)
    

    第八章

    1、读取一个文件,显示除了以#开头的行以外的所有行。

    new = []
    f = open('itheima.txt', 'r')#首先要有这个函数
    contents = f.readlines()
    for ele in contents:
        if ele.startswith('#') == False:
            print(ele)
    f.close()
    

    2、制作一个“密码簿”,其可以存储一个网址(如www.itcast.cn)和一个密码(如123456),请编写程序完成这个“密码簿”的增删查改功能,并且实现文件存储功能。

    # 密码薄
    passwordBook = {}
    def add(password, value):
        if password not in passwordBook.keys():
            passwordBook[password] = value
            save()
        else:
            print("该密码已存在")
    def delete(password):
        if password in passwordBook.keys():
            del passwordBook[password]
            print(passwordBook)
            save()
        else:
            print("该密码不存在")
    def modify(password, newValue):
        if password in passwordBook.keys():
            passwordBook[password] = newValue
            print(passwordBook)
            save()
        else:
            print("该密码不存在")
    def find(value):
        if value in passwordBook.values():
            print("该网址存在")
        else:
            print("该网址不存在")
    def save():
        f = open("password.txt","w")
        f.write(str(passwordBook))
        f.close()
    def printInfo():
        print("密码簿的功能如下:")
        print("1.添加")
        print("2.删除")
        print("3.修改")
        print("4.查找")
    i = 0
    while i<5:
        printInfo()
        num = int(input("请输入要选择的功能:"))
        if num==1:
            web = input("请输入存入的网址:")
            password1 = input("请输入密码:")
            add(password1, web)
            print(passwordBook)
        elif num==2:
            password2 = input("请输入密码:")
            delete(password2)
        elif num==3:
            password3 = input("请输入密码:")
            value3 = input("请输入新的网址:")
            modify(password3,value3)
        elif num==4:
            value4 = input("请输入要查找的网址:")
            find(value4)
        i+=1
    

    3、已知文本文件中存放了若干数字,请编写程序读取所有的数字,排序以后进行输出。

    f = open("itheima.txt","r")#首先要有这个文件
    content = list(eval(f.read()))
    content.sort()
    print(content)
    

    4、打开一个英文的文本文件,将该文件中的每一个英文字母加密后写入到一个新的文件。加密的方法是:将A变成B,B变成C,······,Y变成Z,将Z变成A;a变成b,b变成c,······,y变成z,z变成a,其他字符不变化。 

    f = open("itheima.txt","r")
    content = f.read()
    newStr = ""
    for string in content:
        temp = ord(string)
        if temp in range(65,91):
            if temp == 90:
                char1 = chr(temp-25)
                newStr += char1
            else:
                char2 = chr(temp+1)
                newStr += char2
        elif temp in range(97,123):
            if temp == 122:
                char3 = chr(temp-25)
                newStr += char3
            else:
                char4 = chr(temp + 1)
                newStr += char4
        else:
            newStr = newStr+string
    f.close()
    f2 = open("itheima-加密后.txt","w")
    f2.write(newStr)
    f2.close()
    

    5、打开一个英文文本文件,编写程序读取其内容,并把其中的大写字母变成小写字母,小写字母变成大写字母。

    f = open(r'd:\1.txt','r') 
    s = f.readlines() 
    f.close() 
    r = [i.swapcase() for i in s] 
    f = open(r'd:\2.txt','w') 
    f.writelines(r) 
    f.close()
    

    6、编写程序,把包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。

    import pickle 
    d = {'张三':98,'李四':90,'王五':100} 
    print(d) 
    f = open('score.dat','wb') 
    pickle.dump(1,f) 
    pickle.dump(d,f) 
    f.close 
    f = open('score.dat','rb') 
    pickle.load(f) 
    d = pickle.load(f) 
    f.close() 
    print(d) 
    

    第九章

    1、假设成年人的体重和身高存在此种关系: 
                     身高(厘米)-100=标准体重(千克)

    如果一个人的体重与其标准体重的差值在正负5%之间,显示“体重正常”,其他显示“体重超标”或者“体重不超标”。编写程序,能处理用户输入的异常,并且使用自定义异常类来处理身高小于30cm,大于250cm的异常情况。

    class HeightException(Exception):
        pass
    try:
        height = int(input("请输入您的身高:"))
        if height<30 or height>250:
            raise HeightException
        weight = int(input("请输入您的体重:"))
        weightS = height-100
        if weight > weightS and weight-weightS < 0.05*weightS:
            print("体重达标")
        elif weight < weightS and weightS-weight < 0.05*weightS:
            print("体重达标")
        else:
            print("体重不达标")
    except HeightException:
        print("您输入的身高有误")
    

    2、录入一个学生的成绩,把该学生的成绩转换为A优秀、B良好、C合格、D不合格的形式,最后将该学生的成绩打印出来。要求使用assert断言处理分数不合理的情况。

    try:
        score = int(input("请输入学生的成绩:"))
        if score>=90 and score<=100:
            print("A:优秀")
        elif score>=80 and score<90:
            print("B:良好")
        elif score>=60 and score<80:
            print("C:合格")
        else:
            assert score>60,"D:不及格"
    except Exception as result:
        print("低于60分:\n",result)
    

    第十章 

    1、建一个模块文件。在该文件中,定义一个函数,用于交换两个数的值。

    def changeNum1AndNum2(num1, num2):
        temp = num1
        num1 = num2
        num2 = temp
        return (num1, num2)
    

    第十一章

    1、设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证类的功能。

    class Circle:
        def __init__(self,tup, radius, color):
            self.center = tup
            self.radius = radius
            self.color = color
        def perimeter(self):
            return 3.14 * 2 * self.radius
        def area(self):
            return 3.14 * self.radius * self.radius
    circle = Circle((0,0),5,"蓝色")
    print(circle.perimeter())
    print(circle.area())
    

    2、设计一个课程类,包括课程编号、课程名称、任课教师、上课地点等属性,把上课地点变量设为私有的,增加构造方法和显示课程信息的方法。

    class Curriculum:
        def __init__(self):
            self.number = 1001
            self.name = "语文"
            self.teacher = "小明"
            self.__address = "2号教学楼3层305室"
        def __str__(self):
            return """
                课程编号:%d
                课程名称:%s
                任课教师:%s
                上课地点:%s
            """%(self.number,self.name,self.teacher,self.__address)
    curri = Curriculum()
    print(curri)
    

    第十二章

    1、设计一个表示学生的类:Student,该类的属性有)name(姓名,age(年龄),scores(成绩,包含语文、数学和英语三科成绩,每科成绩的类型为整数),另外此类还有3个方法。

    (1)获取学生的方法:get_name(),返回类型为str。
    (2)获取年龄的方法:get_age(),返回类型为int。
    (3)返回3门科目中最高的分数:get_course(),返回类型为int。

    class Student(object):
        # 构造方法
        def __init__(self, name, age, scores):
            self.__name = name     # 姓名
            self.__age = age       # 年龄
            self.__scores = scores # 分数
        def get_name(self):
            return self.__name
        def get_age(self):
            return self.__age
        def get_course(self):
            return max(self.__scores)
    stu = Student('小丸子', 18, [89, 90, 91])
    print("姓名:%s"%(stu.get_name()))
    print("年龄:%s"%(stu.get_age()))
    print("最高分:%s"%(stu.get_course()))
    

    2、设计一个表示动物的类:Animal,其内部有一个color(颜色)属性和call(叫)的方法。再设计一个表示Fish(鱼)类,该类中有tail(尾巴)和color属性,以及一个call(叫)方法。
    提示: 让Fish类继承自Animal类,重写init和call方法。

    class Animal(object):
        def __init__(self, color):
            self.color = color #颜色
        def call(self):
            print("动物叫")
    class Fish(Animal):
        def __init__(self, color):
            super().__init__(color)
            self.tail = True
        def call(self):
            print("-%s的鱼在吐泡泡-"%self.color)
    fish = Fish("蓝色")
    fish.call()
    展开全文
  • CSS属性值之长度

    2017-11-26 18:13:17
    长度必须包含数字和长度单位,并且它们之间不允许出现空格。...使用绝对长度单位时,其值是个固定的值;使用相对长度单位时,其长度值不是固定的,它会随着参考值的变化而变化。 常用的绝对长度单位有pt(点)、mm

    长度必须包含数字和长度单位,并且它们之间不允许出现空格。数字可以是整数或小数,可以是正数或负数。如果数字为0,则可以带单位,也可以不带。因此,以下都是合法的长度值:1.5em,-20px,0。

    CSS的长度单位分为绝对长度单位和相对长度单位。使用绝对长度单位时,其值是一个固定的值;使用相对长度单位时,其长度值不是固定的,它会随着参考值的变化而变化。

    常用的绝对长度单位有pt(点)、mm(毫米)、cm(厘米)、in(英寸),pt是一个标准印刷度量单位,一英寸是72 点,即 1pt = 1/72inmm、cm、in 这几个长度单位,大家已经很熟悉,不再赘述。

    共有 3 种相对长度单位:em、ex 、px,前两个分别代表 “m-height” 和 “x-height”,即字母 m 的高度和字母 x 的高度,是常见的印刷度量单位。

    px代表“像素”,实际上就是计算机屏幕上的一个点。像素被定义为相对定位,是因为它取决于显示器的分辨率。一旦分辨率确定,设置为px的尺寸就成为固定尺寸,不会自动缩放。

    em是一个相对长度单位,1em被定义为一种给定字体的 font-size 值。如果一个元素的font-size 为 14px,那么对于该元素,1em 就等于 14px。当 em 用于设置元素的 font-size 属性本身时,em 的值会相对于父元素的字体大小。显然,em的值会随元素的不同而发生变化,这给计算带来极大的困难。于是,就产生了rem这个相对单位,它是相对于根元素(即html元素)的字体大小。由于根元素的字体大小始终不变,计算起来就容易多了。

    ex是一个相对长度单位,1ex被定义为一种给定字体的小写字母“x”的高度。因此,这个值会随字体的不同而变化。然而,很多浏览器都没有内置 ex 高度值,只是简单的取 em 的值,再取其一半作为 ex 的值。所以,一般不推荐使用 ex 这个长度单位。

    随着响应式Web设计的流行,px已经无法跟上时代的脚步。%、em、rem这几个能够自适应的相对长度单位开始流行。

    关于作者

    歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

    展开全文
  • 寸=2.54CM. 因为长与宽的比例是 16:9 , 而所说的 XX英寸显示器是以斜对角线来说的. 为了方便转换, 以二十英寸来计算. 20英寸X2.54厘米/英寸=50.80厘米 设 长为A, 宽为B 故有下面两个...
  • 以上五个就是CSS中定义的绝对长度单位,他们都是在我们实际生活中用的很多,但是在写CSS代码制作要在屏幕上显示的网页的时候,这种绝对长度单位用到的很少,我能想到的比较有用的地方只有给印刷品...
  • css中相对长度单位Measuring things is as important an aspect of web design, as any other. The fact that we have at least 10 different measurement units in CSS speaks for itself. 衡量事物与Web设计一样...
  • CSS 长度单位详细总结

    千次阅读 2019-11-01 16:40:01
    、CSS中的长度单位: 在CSS中以不少值是以长度作为值的,盒子模型的属性就是一些明显的值属性:width、height、margin、padding、border。除此之外还有很多的css属性的值同样也是长度值,像偏移量offset、box-...
  • CSS中的长度单位

    2020-03-08 14:21:46
    1. 绝对长度单位 px cm mm Q in pc pt 2. 相对长度单位 相对字体:em rem ex ch 相对视口:vw vh vmin vmax 相对父元素大小:% 1. 绝对长度单位 彼此固定,不会因为其他元素的尺寸变化而变化。 px cm mm Q in pc pt...
  • web开发中的长度单位

    2019-12-06 22:22:49
    1、长度单位包括哪些? 长度单位:例如,厘米、毫米、...绝对长度单位,它就是个固定的值,个真实的物理值,它不随设备或者受别的因素影响的长度单位。 具体的绝对长度单位主要包括以下几个: 1)、cm,厘米...
  • C语言程序设计精髓习题总汇(上)

    万次阅读 多人点赞 2019-12-19 10:10:32
    } 1.3 计算半圆弧长以及半圆的面积 题目内容:编程并输出半径r=5.3的半圆弧长(提示:半圆弧长不应该加直径的长度。)及该半圆弧与直径围成的半圆的面积,π的取值3.14159。要求半径r和π必须利用宏常量表示。 #...
  • 以16:9 的显示器来计算.... 寸=2.54CM. ...由于长与宽的比例是 16:9 , 而...20英寸X2.54厘米/英寸=50.80厘米 设 长为A, 宽为B 故有以下两个公式:  1. A/B=16/9 2. A^2+B^2= 50.80^2 (勾股定理) ...
  • 像素与实际尺寸

    千次阅读 2017-04-22 16:02:10
    dpi是指单位面积内像素的多少,也就是扫描精度,目前国际上都是计算英寸面积内像素的多少。dpi越小,扫描的清晰度越低,由于受网络传输速度的影响,web上使用的图片都是72dpi,但是冲洗照片不能使用这个参数,必须...
  • C#获取字符串的长度

    万次阅读 2014-12-17 10:21:28
    VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这个字节用于保存实际使用了多大的长度。   Nchar类型和Nvarchar类型是怎么回事呢?为了与其他多种字符的转换,如中文,音标等,对每...
  • python语法基础汇总

    千次阅读 多人点赞 2019-11-05 10:29:42
    文章目录python语法基础、简介及运算符什么是计算机语言编译型语言和解释型语言Python的介绍Python开发环境搭建Python的交互界面Python和Sublime的整合几个概念基本语法字面量和变量变量和标识符数据类型类型检查...
  • 如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位...
  • Qt中的长宽用的是什么单位? 是像素长度 ;...没有个绝对的比值.这样告诉你吧.当普通台式机的屏幕分辨率设置为800×600的时候,根据勾股定理,知道显示器对角线的象素为1000,而普通的17'显示器对角线的长
  • WPF的坐标单位是以1/96英寸为个逻辑像素单位。如果将操作系统的DPI设置成实际的物理DPI,则可以做到分辨率与设备无关。 下面的DipHelp类,可以实现厘米与DPI,英寸与DPI的相互转换,以及获取系统分辨率,物理...
  • CSS长度单位

    2021-02-02 17:05:01
    前言 说到css的单位,大家应该首先想到的是像素单位px,我们在网页布局中一般都是用px,但是近年来自适应网页布局...CSS 有几个不同的单位用于表示长度,一些设置 CSS 长度的属性有 width,margin,padding,font-si
  • 德国长度单位使用英尺吗If you are getting ready to add an antenna to your router in order to extend the Wi-Fi range in your home, just how long of a cable can you use? Does the cable’s length even ...
  • Android手机摄像头实现长度测量 1.功能简介 使用手机摄像头拍摄目标物体两个角度的图片,运用两视点几何的原理得到物体的三维坐标点,从而实现无接触测量距离。 2.软件特点 移动:运行在Android智能手机上,...
  • 首先告诉大家个不幸的消息:像素不能直接换算成英寸、厘米,要在dpi下才能换算! photoshop中两种分辨率换算 72像素/英寸=28.346像素/厘米 300像素/英寸=118.11像素/厘米 1 厘米=0.3937 英寸  1 英寸=2.54 厘米 ...
  • 问题:如何在次传递中找到长度未知的单链表的中间元素? 链表中间元素含义:索引为最中间值得哪个元素,奇数为最中间,偶数有两个。 次传递:次遍历。 开始思考这个问题时候这样想的:中间元素也就是索引值...
  • 017_CSS长度单位

    2020-10-18 23:43:18
    长度个后面跟着长度单位的数字, 诸如: 10px、2em等。 4. 数字和单位之间不能出现空格。但是, 如果值为0, 则可以省略单位。 5. 对于某些CSS属性, 允许使用负的长度。 6. 长度单位有两种类型: 绝对单位和相对单位...
  • android-长度单位-解析

    2017-03-21 10:45:30
    介绍 in(英寸)长度单位(基本用不到) ...dp(与密度无关的像素)种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px dip(device independent pixels设备独立像素) 不同设备有不同的显
  • CSS中长度单位的使用

    千次阅读 2014-08-22 14:42:01
    在写css的时候最常用的长度单位是px(像素),经常看到的还有em,pt等等,其实css中的长度单位一共有8个,分别是px,em,pt,ex,pc,in,mm,cm。  1、px:像素(Pixel),相对于设备的长度单位,像素是相对于显示器...
  • C语言浮点数

    万次阅读 多人点赞 2019-08-03 20:23:07
    例如人的身高米七五,以米为单位,用浮点数表示是1.75米,如果以厘米为单位,用整数表示是175。 long整数的取值是-9223372036854775808~9223372036854775807,有效数字是19位,而double的有效数字才15-16位,所以...
  • 在C#中如何获取字符串的真实的长度

    万次阅读 2008-09-22 23:37:00
    string s = "我是个2兵"; int len = s.Length;//will output as 6 byte[] sarr = System.Text.Encoding.Default.GetBytes(s); len = s

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,385
精华内容 2,954
关键字:

一厘米实际长度