学C++还是学Java?做软件研发需掌握哪些知识和技能?

thbcm阅读(202)

每年秋招,不少人对软件研发领域充满兴趣。

那么,在求职软件研发岗位时我们需要掌握哪些关键的知识和技能,软件研发行业的当前状况和未来趋势如何呢?

今天,我们一起来梳理这个问题,希望这能为正在高校学习的同学们,以及那些考虑转行的朋友们提供一些参考。

-PART 01-


学C++还是Java?


这个话题非常经典,许多人在职业规划时都会遇到类似的疑问。

根据我们在实际工作中的经验以及多年来的行业观察,Java和C++都是具有广阔前景的编程语言,它们各自都有着良好的就业机会。

在大型软件系统的构建中,无论是前端还是后端,Java和C++都扮演着不可或缺的角色。

例如,安卓客户端应用和后端的Web服务器通常使用Java来开发,而Windows客户端程序和许多后端业务服务器则多采用C++来实现。Java还是大数据、云计算以及云原生技术(如微服务)的主流开发语言。

在我们的日常生活中,许多安卓手机上的手机应用,如QQ、桌面版微信、腾讯会议、企业微信、飞书、钉钉、阿里旺旺客户端等,都是用Java开发的。而像Chrome浏览器这样的Windows客户端软件,则是通过C++来实现的。

因此,无论你选择C++还是Java,都能找到适合自己的舞台,发挥自己的才能。



-PART 02-


Java的应用领域与使用场景


随着移动互联网的蓬勃发展,移动APP已经成为众多IT企业争夺市场的重要领域。这给作为安卓APP开发语言的Java带来了新的生机和活力。

目前,Java是构建大型Web系统后台业务的首选语言,像淘宝和京东等大型电商平台的服务器端都是使用Java来实现的。

在大数据和云计算领域,许多知名的开源框架,如Hadoop、Spark和OpenStack,都是基于Java开发的,使得Java成为大数据开发者青睐的语言之一。此外,随着云原生和微服务等新兴技术和框架的出现,Java也成为这些领域的主要战场。

Java运行在虚拟机上,具有独特的跨平台特性,并且拥有完善的异常处理机制,它能在程序异常时抛出异常,并将异常信息输出到日志中,帮助开发者快速定位问题。

Java还以其近乎完美的封装和多种成熟的框架而著称,例如Hibernate、MyBatis、SpringMVC、SpringBoot和SpringCloud等微服务框架。

与C++相比,Java具有更完善的内存管理机制,避免了C++中复杂的指针操作,使得Java的学习门槛相对较低,这也是许多人选择Java的重要原因。

从当前在校学生的选择来看,确实有更多的人倾向于学习Java。近几年在招聘C++开发者时,应聘者的数量明显减少,相较于Java开发者的招聘难度更大。这种趋势反映了Java在当前技术教育和职业发展中的流行度和重要性。

-PART 03-


C++的应用领域与使用场景


C++语言以其强大的功能和灵活性,不仅在PC端客户端程序的开发上占据重要地位,而且在服务器程序和后台业务服务器的开发上也扮演着关键角色。这些系统往往对性能和效率有着极高的要求,因此C++成为了首选语言。

C++拥有丰富的开源生态系统,提供了各种功能的开源库,但在软件框架方面,C++可能没有Java那样成熟和通用的框架选择。

C/C++的执行效率非常接近汇编语言,因此在需要执行高效率代码或算法的服务器端业务中,C++往往是更优的选择。

当前,PC端的客户端程序大多数都是使用C++或其他语言(如C#)开发的,而Java在这一领域的应用已经较少。在人工智能、机器学习、计算机视觉与图像识别、自动驾驶等对运行性能要求极高的新兴技术领域,C++因其高效率而成为首选开发语言。

尽管Python在某些场景下非常流行,但在这些对性能要求极高的领域,Python的运行效率往往无法满足需求。

因此,在各种大型系统中,无论是前端还是后端,C++都有着广泛的应用场景和巨大的市场需求。C++不仅是一种用途广泛、市场认可度高的主流开发语言,而且在特定领域内,其优势和重要性尤为突出。



在构建一个大型系统时,后端服务或组件可能部分由Java编写,部分由C++构建,这两种语言相互交织,没有清晰的分界线。它们通过通信和协作来实现共同的目标。

决定将哪种编程语言作为主要学习和发展的方向,不仅取决于个人对语言本身的兴趣,还取决于对语言所支持的技术领域的兴趣。这是一个需要综合考量的决定。

CSS手绘圣诞老人教程 – 创造节日气氛的网页设计技巧(附源码)

thbcm阅读(187)

在这篇文章中,我们将学习如何使用CSS来手绘一个圣诞老人的卡通形象。这不仅是一个有趣的练习,也是提升你CSS技能的好机会。通过本教程,你将学会如何使用CSS变量、伪元素、动画和媒体查询来创建一个生动的圣诞老人形象。如果你对CSS还不够熟悉,不妨先浏览一下编程狮上的相关课程,这将为你打下坚实的基础。

效果图:

准备工作

在开始之前,请确保你有一个现代浏览器和一个代码编辑器。你可以直接在浏览器的开发者工具中尝试这些代码,或者创建一个HTML文件来保存你的代码。推荐使用免费AI编程助手——豆包 MarsCode,能大大提升我们的开发效率。

HTML结构

首先,我们需要创建一个HTML结构来作为圣诞老人形象的基础。我们将使用一个div元素作为画布,然后在这个画布中添加圣诞老人的各个部分。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS手绘圣诞老人 - 编程狮(w3cschool.cn)</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="canvas" role="img" aria-label="一个站在雪地小山上的圣诞老人卡通形象。">
        <!-- 圣诞老人的各个部分 -->
        <div class="hand"></div><!-- 左手 -->
        <div class="hand"></div><!-- 右手 -->
        <div class="arms"></div><!-- 手臂 -->
        <div class="leg"></div> <!-- 左腿 -->
        <div class="leg"></div> <!-- 右腿 -->
        <div class="body"> <!-- 圣诞老人的身体 -->
            <div class="belt"></div> <!-- 圣诞老人的腰带 -->
        </div>
        <div class="beard"></div> <!-- 圣诞老人的胡子 -->
        <div class="head"> <!-- 圣诞老人的头部 -->
            <div class="cheek"></div><!-- 左脸颊 -->
            <div class="cheek"></div> <!-- 右脸颊 -->
            <div class="eye"></div> <!-- 左眼 -->
            <div class="eye"></div> <!-- 右眼 -->
            <div class="mustache"></div> <!-- 左小胡子 -->
            <div class="mustache"></div><!-- 右小胡子 -->
            <div class="hat"></div> <!-- 圣诞老人的帽子 -->
        </div>
    </div>
</body>
</html>

CSS样式

接下来,我们将使用CSS来定义圣诞老人的形象。我们将使用CSS变量来定义颜色,这使得我们能够轻松地更改颜色而不需要修改多个属性。

:root {
    --skin: PeachPuff;
    /* 圣诞老人皮肤颜色 */
    --eyes: Black;
    /* 圣诞老人眼睛颜色 */
    --cheeks: Salmon;
    /* 圣诞老人脸颊颜色 */
    --beard: GhostWhite;
    /* 圣诞老人胡子颜色 */
    --mustache: white;
    /* 圣诞老人小胡子颜色 */
    --suit: Tomato;
    /* 圣诞老人衣服颜色 */
    --belt: #363636;
    /* 圣诞老人腰带颜色 */
    --belt-buckle: gold;
    /* 圣诞老人腰带扣颜色 */
}

全局样式

我们设置背景为天蓝色,并添加雪花效果,以营造圣诞氛围。

body {
    background: SkyBlue;
    /* 背景颜色为天蓝色 */
    overflow: hidden;
    /* 隐藏溢出的内容 */
    background-image: radial-gradient(circle at 50% 50%, white 2.5%, transparent 0), radial-gradient(circle at 30% 90%, white 1.5%, transparent 0), radial-gradient(circle at 70% 10%, white 1%, transparent 0), radial-gradient(circle at 10% 40%, white 1%, transparent 0);
    /* 添加雪花背景效果 */
    background-size: 45vmin 35vmin, 50vmin 70vmin, 60vmin 50vmin, 65vmin 60vmin;
    /* 设置背景图像大小 */
    background-position: 0 0;
    /* 设置背景图像位置 */
    animation: snow infinite 7s linear;
    /* 添加雪花飘落动画 */
}

画布样式

我们将画布居中,并设置其大小和宽高比。

.canvas {
    width: 60vmin;
    /* 设置画布宽度 */
    aspect-ratio: 1;
    /* 设置画布宽高比为1:1 */
    position: absolute;
    /* 绝对定位 */
    top: 50%;
    /* 距离顶部50% */
    left: 50%;
    /* 距离左侧50% */
    transform: translate(-50%, -50%);
    /* 将画布居中 */
}
.canvas::before {
    content: "";
    /* 伪元素内容为空 */
    display: block;
    /* 显示为块级元素 */
    position: absolute;
    /* 绝对定位 */
    top: 90%;
    /* 距离顶部90% */
    left: 50%;
    /* 距离左侧50% */
    width: 200vmax;
    /* 设置宽度 */
    height: 200vmax;
    /* 设置高度 */
    background: white;
    /* 背景颜色为白色 */
    transform: translate(-50%, 0) rotate(1deg);
    /* 将伪元素居中并旋转1度 */
    border-radius: 100% / 20%;
    /* 设置椭圆形边框 */
}

圣诞老人形象

我们将使用多个div元素来构建圣诞老人的各个部分,包括头部、眼睛、脸颊、胡子、帽子、身体、腰带、手臂、手和腿。

/* 圣诞老人头部样式 */
.head {
    --positionX: 27%;
    /* 定义眼睛和脸颊的水平位置 */
    --positionY: 63%;
    /* 定义眼睛和脸颊的垂直位置 */
    position: absolute;
    /* 绝对定位 */
    top: 10%;
    /* 距离顶部10% */
    left: 50%;
    /* 距离左侧50% */
    border-radius: 50%;
    /* 设置圆形边框 */
    width: 25%;
    /* 设置宽度 */
    height: 25%;
    /* 设置高度 */
    transform: translate(-50%, 0);
    /* 将头部居中 */
    background: var(--skin);
    /* 设置背景颜色为皮肤色 */
        }


.eye {
    position: absolute;
    /* 绝对定位 */
    top: var(--positionY);
    /* 使用定义的垂直位置 */
    left: var(--positionX);
    /* 使用定义的水平位置 */
    width: 12%;
    /* 设置宽度 */
    height: 12%;
    /* 设置高度 */
    background: var(--eyes);
    /* 设置背景颜色为黑色 */
    border-radius: 50%;
    /* 设置圆形边框 */
    animation: blink 5s infinite linear;
    /* 添加眨眼动画 */
        }


.eye+.eye {
    left: auto;
    /* 取消之前的left属性 */
    right: var(--positionX);
    /* 设置右侧眼睛的位置 */
        }


.cheek {
    position: absolute;
    /* 绝对定位 */
    top: calc(var(--positionY) + 7%);
    /* 计算脸颊的垂直位置 */
    left: calc(var(--positionX) - 12%);
    /* 计算脸颊的水平位置 */
    width: 20%;
    /* 设置宽度 */
    height: 12%;
    /* 设置高度 */
    background: var(--cheeks);
    /* 设置背景颜色为脸颊色 */
    border-radius: 50%;
    /* 设置圆形边框 */
        }


.cheek+.cheek {
    left: auto;
    /* 取消之前的left属性 */
    right: calc(var(--positionX) - 12%);
    /* 设置右侧脸颊的位置 */
        }


        /* 圣诞老人胡须和小胡子样式 */
.beard {
    position: absolute;
    /* 绝对定位 */
    top: 10%;
    /* 距离顶部10% */
    left: 50%;
    /* 距离左侧50% */
    width: 30%;
    /* 设置宽度 */
    height: 40%;
    /* 设置高度 */
    background: var(--beard);
    /* 设置背景颜色为胡子色 */
    transform: translate(-50%, 0);
    /* 将胡须居中 */
    border-radius: 100% / 120% 120% 80% 80%;
    /* 设置不规则形状的边框 */
        }


.mustache {
    position: absolute;
    /* 绝对定位 */
    top: 88%;
    /* 距离顶部88% */
    left: 52%;
    /* 距离左侧52% */
    width: 40%;
    /* 设置宽度 */
    height: 40%;
    /* 设置高度 */
    background: var(--mustache);
    /* 设置背景颜色为小胡子色 */
    border-radius: 100% 10% 100% 0;
    /* 设置不规则形状的边框 */
    transform-origin: top right;
    /* 设置变换原点 */
    transform: translate(-100%, 0) rotate(25deg);
    /* 将小胡子向左旋转25度 */
    animation: moveMustache 7s infinite linear;
    /* 添加小胡子移动动画 */
        }


.mustache+.mustache {
    left: 48%;
    /* 设置左侧小胡子的位置 */
    border-radius: 10% 100% 0 100%;
    /* 设置不规则形状的边框 */
    transform-origin: top left;
    /* 设置变换原点 */
    transform: rotate(-25deg);
    /* 将小胡子向右旋转25度 */
    animation: moveMustache2 7s infinite linear;
    /* 添加小胡子移动动画 */
        }


        /* 圣诞老人帽子样式 */
.hat {
    position: absolute;
    /* 绝对定位 */
    width: 98%;
    /* 设置宽度 */
    height: 80%;
    /* 设置高度 */
    background: var(--suit);
    /* 设置背景颜色为衣服色 */
    border-radius: 100% 20% 0 0;
    /* 设置不规则形状的边框 */
    top: -40%;
    /* 距离顶部-40% */
    left: 50%;
    /* 距离左侧50% */
    transform: translate(-50%, 0) rotate(1deg);
    /* 将帽子居中并旋转1度 */
        }


.hat::before {
    content: "";
    /* 伪元素内容为空 */
    display: block;
    /* 显示为块级元素 */
    position: absolute;
    /* 绝对定位 */
    bottom: -17%;
    /* 距离底部-17% */
    left: -5%;
    /* 距离左侧-5% */
    width: 110%;
    /* 设置宽度 */
    height: 40%;
    /* 设置高度 */
    border-radius: 100% / 50%;
    /* 设置椭圆形边框 */
    transform: rotate(-2deg);
    /* 旋转-2度 */
    background: radial-gradient(200% 100% at 50% 100%, #0000 30%, var(--mustache) 31%);
    /* 设置径向渐变背景 */
        }


.hat::after {
    content: "";
    /* 伪元素内容为空 */
    display: block;
    /* 显示为块级元素 */
    position: absolute;
    /* 绝对定位 */
    right: -25%;
    /* 距离右侧-25% */
    top: -15%;
    /* 距离顶部-15% */
    width: 40%;
    /* 设置宽度 */
    aspect-ratio: 1;
    /* 设置宽高比为1:1 */
    border-radius: 50%;
    /* 设置圆形边框 */
    background: var(--beard);
    /* 设置背景颜色为胡子色 */
        }


        /* 圣诞老人身体样式 */
.body {
    position: absolute;
    /* 绝对定位 */
    top: 35%;
    /* 距离顶部35% */
    left: 50%;
    /* 距离左侧50% */
    width: 50%;
    /* 设置宽度 */
    height: 50%;
    /* 设置高度 */
    background: var(--suit);
    /* 设置背景颜色为衣服色 */
    border-radius: 100% / 150% 150% 25% 25%;
    /* 设置不规则形状的边框 */
    transform: translate(-50%, 0);
    /* 将身体居中 */
    background-image: radial-gradient(circle at 50% 36%, var(--belt) 2.75%, #0000 3%), radial-gradient(circle at 50% 48%, var(--belt) 3%, #0000 3.25%), radial-gradient(circle at 50% 60%, var(--belt) 2.75%, #0000 3%), radial-gradient(circle at 50% 90%, var(--belt) 2.25%, #0000 2.5%), radial-gradient(circle at 50% -50%, transparent 75%, var(--belt) 75.1% 83%, transparent 83.1%), linear-gradient(to right, transparent 42%, white 42.2% 57%, transparent 57.2%);
    /* 设置径向渐变背景和线性渐变背景 */
    clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 51% 100%, 50% 96%, 49% 100%, 0% 100%);
    /* 设置裁剪路径 */
        }


.belt {
    position: absolute;
    /* 绝对定位 */
    top: 75%;
    /* 距离顶部75% */
    left: 50%;
    /* 距离左侧50% */
    transform: translate(-50%, -50%);
    /* 将腰带居中 */
    width: 23%;
    /* 设置宽度 */
    height: 15%;
    /* 设置高度 */
    background: linear-gradient(var(--belt-buckle) 0 0) 75% 50% / 25% 12% no-repeat, linear-gradient(var(--belt) 0 0) 50% 50% / 85% 80% no-repeat, var(--belt-buckle);
    /* 设置背景图像和背景颜色 */
        }


        /* 圣诞老人手臂样式 */
.arms {
    position: absolute;
    /* 绝对定位 */
    top: 37%;
    /* 距离顶部37% */
    left: 50%;
    /* 距离左侧50% */
    transform: translate(-50%, 0);
    /* 将手臂居中 */
    width: 65%;
    /* 设置宽度 */
    height: 40%;
    /* 设置高度 */
    background: OrangeRed;
    /* 设置背景颜色为橙红色 */
    border-radius: 100% / 170% 170% 25% 25%;
    /* 设置不规则形状的边框 */
    background-image: linear-gradient(transparent 20%, #0003);
    /* 设置线性渐变背景 */
}


.hand {
    --positionX: 18%;
    /* 定义手的水平位置 */
    position: absolute;
    /* 绝对定位 */
    top: 70%;
    /* 距离顶部70% */
    left: var(--positionX);
    /* 使用定义的水平位置 */
    width: 13%;
    /* 设置宽度 */
    height: 13%;
    /* 设置高度 */
    background: var(--belt);
    /* 设置背景颜色为腰带色 */
    border-radius: 50%;
    /* 设置圆形边框 */
}


.hand+.hand {
    left: auto;
    /* 取消之前的left属性 */
    right: var(--positionX);
    /* 设置右侧手的位置 */
}


/* 圣诞老人腿部样式 */
.leg {
    position: absolute;
    /* 绝对定位 */
    top: 75%;
    /* 距离顶部75% */
    left: 29%;
    /* 距离左侧29% */
    width: 19%;
    /* 设置宽度 */
    height: 25%;
    /* 设置高度 */
    background: var(--suit);
    /* 设置背景颜色为衣服色 */
    transform: skew(2deg);
    /* 斜切变形 */
    background-image: linear-gradient(#0002, transparent 70%, var(--belt) 0);
    /* 设置线性渐变背景 */
}


.leg+.leg {
    left: 52%;
    /* 设置右侧腿的位置 */
}


.leg::after {
    content: "";
    /* 伪元素内容为空 */
    display: block;
    /* 显示为块级元素 */
    position: absolute;
    /* 绝对定位 */
    bottom: 0;
    /* 距离底部0 */
    left: -6%;
    /* 距离左侧-6% */
    width: 110%;
    /* 设置宽度 */
    height: 20%;
    /* 设置高度 */
    background: black;
    /* 设置背景颜色为黑色 */
    border-radius: 50% / 100% 100% 0 0;
    /* 设置椭圆形边框 */
}

        
.leg+.leg::after {
    left: -4%;
    /* 设置右侧腿脚的位置 */
}

动画效果

为了让圣诞老人更加生动,我们添加了一些动画效果,如眨眼和胡子的微动。

/* 动画关键帧 */
/* 动画关键帧 */
@keyframes snow {
0% {
background-position: 0 0, 0 0, 0 0, 0 0;
/* 设置初始背景位置 */
}


40% {
background-position: 10px 14vmin, -20px 28vmin, 20px 20vmin, 10px 24vmin;
/* 设置40%时的背景位置 */
}


60% {
background-position: -10px 21vmin, -30px 42vmin, 30px 30vmin, 15px 36vmin;
/* 设置60%时的背景位置 */
}


100% {
background-position: 0 35vmin, 0 70vmin, 0 50vmin, 0 60vmin;
/* 设置100%时的背景位置 */
}
}


@keyframes blink {


0%,
6%,
100% {
height: 12%;
/* 设置眼睛的高度 */
}


3% {
height: 0%;
/* 设置眼睛的高度为0,模拟眨眼 */
}
}


@keyframes moveMustache {


0%,
40%,
44%,
100% {
transform: translate(-100%, 0) rotate(25deg);
/* 设置小胡子的初始和结束状态 */
}


42% {
transform: translate(-100%, 0) rotate(30deg);
/* 设置小胡子的中间状态 */
}
}


/* 定义名为 moveMustache2 的关键帧动画 */
@keyframes moveMustache2 {


/* 在 0%, 40%, 44%, 和 100% 的时间点上,将小胡子旋转 -25 度 */
0%,
40%,
44%,
100% {
transform: rotate(-25deg);
}


/* 在 42% 的时间点上,将小胡子旋转 -30 度 */
42% {
transform: rotate(-30deg);
}
}

媒体查询

为了适配偏好减少动画的用户,我们使用媒体查询来取消动画效果。

/* 媒体查询,适配偏好减少动画的用户 */
@media (prefers-reduced-motion) {


/* 如果用户偏好减少动画,则取消所有元素的动画效果 */
* {
animation: none !important;
}
}

最后看下完整代码

<!DOCTYPE html>
<html lang="zh-CN">
<!-- 设置文档的语言为中文 -->


<head>
    <meta charset="UTF-8">
    <!-- 设置字符编码为UTF-8,确保支持多种字符 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 设置视口,使页面适应不同设备的屏幕 -->
    <title>CSS手绘圣诞老人 - 编程狮(w3cschool.cn)</title>
    <!-- 设置网页标题 -->
    <style>
        /* 定义颜色变量 */
        :root {
            --skin: PeachPuff;
            /* 圣诞老人皮肤颜色 */
            --eyes: Black;
            /* 圣诞老人眼睛颜色 */
            --cheeks: Salmon;
            /* 圣诞老人脸颊颜色 */
            --beard: GhostWhite;
            /* 圣诞老人胡子颜色 */
            --mustache: white;
            /* 圣诞老人小胡子颜色 */
            --suit: Tomato;
            /* 圣诞老人衣服颜色 */
            --belt: #363636;
            /* 圣诞老人腰带颜色 */
            --belt-buckle: gold;
            /* 圣诞老人腰带扣颜色 */
        }


        /* 全局样式 */
        body {
            background: SkyBlue;
            /* 背景颜色为天蓝色 */
            overflow: hidden;
            /* 隐藏溢出的内容 */
            background-image: radial-gradient(circle at 50% 50%, white 2.5%, transparent 0), radial-gradient(circle at 30% 90%, white 1.5%, transparent 0), radial-gradient(circle at 70% 10%, white 1%, transparent 0), radial-gradient(circle at 10% 40%, white 1%, transparent 0);
            /* 添加雪花背景效果 */
            background-size: 45vmin 35vmin, 50vmin 70vmin, 60vmin 50vmin, 65vmin 60vmin;
            /* 设置背景图像大小 */
            background-position: 0 0;
            /* 设置背景图像位置 */
            animation: snow infinite 7s linear;
            /* 添加雪花飘落动画 */
        }


        /* 画布样式 */
        .canvas {
            width: 60vmin;
            /* 设置画布宽度 */
            aspect-ratio: 1;
            /* 设置画布宽高比为1:1 */
            position: absolute;
            /* 绝对定位 */
            top: 50%;
            /* 距离顶部50% */
            left: 50%;
            /* 距离左侧50% */
            transform: translate(-50%, -50%);
            /* 将画布居中 */
        }


        .canvas::before {
            content: "";
            /* 伪元素内容为空 */
            display: block;
            /* 显示为块级元素 */
            position: absolute;
            /* 绝对定位 */
            top: 90%;
            /* 距离顶部90% */
            left: 50%;
            /* 距离左侧50% */
            width: 200vmax;
            /* 设置宽度 */
            height: 200vmax;
            /* 设置高度 */
            background: white;
            /* 背景颜色为白色 */
            transform: translate(-50%, 0) rotate(1deg);
            /* 将伪元素居中并旋转1度 */
            border-radius: 100% / 20%;
            /* 设置椭圆形边框 */
        }


        /* 圣诞老人头部样式 */
        .head {
            --positionX: 27%;
            /* 定义眼睛和脸颊的水平位置 */
            --positionY: 63%;
            /* 定义眼睛和脸颊的垂直位置 */
            position: absolute;
            /* 绝对定位 */
            top: 10%;
            /* 距离顶部10% */
            left: 50%;
            /* 距离左侧50% */
            border-radius: 50%;
            /* 设置圆形边框 */
            width: 25%;
            /* 设置宽度 */
            height: 25%;
            /* 设置高度 */
            transform: translate(-50%, 0);
            /* 将头部居中 */
            background: var(--skin);
            /* 设置背景颜色为皮肤色 */
        }


        .eye {
            position: absolute;
            /* 绝对定位 */
            top: var(--positionY);
            /* 使用定义的垂直位置 */
            left: var(--positionX);
            /* 使用定义的水平位置 */
            width: 12%;
            /* 设置宽度 */
            height: 12%;
            /* 设置高度 */
            background: var(--eyes);
            /* 设置背景颜色为黑色 */
            border-radius: 50%;
            /* 设置圆形边框 */
            animation: blink 5s infinite linear;
            /* 添加眨眼动画 */
        }


        .eye+.eye {
            left: auto;
            /* 取消之前的left属性 */
            right: var(--positionX);
            /* 设置右侧眼睛的位置 */
        }


        .cheek {
            position: absolute;
            /* 绝对定位 */
            top: calc(var(--positionY) + 7%);
            /* 计算脸颊的垂直位置 */
            left: calc(var(--positionX) - 12%);
            /* 计算脸颊的水平位置 */
            width: 20%;
            /* 设置宽度 */
            height: 12%;
            /* 设置高度 */
            background: var(--cheeks);
            /* 设置背景颜色为脸颊色 */
            border-radius: 50%;
            /* 设置圆形边框 */
        }


        .cheek+.cheek {
            left: auto;
            /* 取消之前的left属性 */
            right: calc(var(--positionX) - 12%);
            /* 设置右侧脸颊的位置 */
        }


        /* 圣诞老人胡须和小胡子样式 */
        .beard {
            position: absolute;
            /* 绝对定位 */
            top: 10%;
            /* 距离顶部10% */
            left: 50%;
            /* 距离左侧50% */
            width: 30%;
            /* 设置宽度 */
            height: 40%;
            /* 设置高度 */
            background: var(--beard);
            /* 设置背景颜色为胡子色 */
            transform: translate(-50%, 0);
            /* 将胡须居中 */
            border-radius: 100% / 120% 120% 80% 80%;
            /* 设置不规则形状的边框 */
        }


        .mustache {
            position: absolute;
            /* 绝对定位 */
            top: 88%;
            /* 距离顶部88% */
            left: 52%;
            /* 距离左侧52% */
            width: 40%;
            /* 设置宽度 */
            height: 40%;
            /* 设置高度 */
            background: var(--mustache);
            /* 设置背景颜色为小胡子色 */
            border-radius: 100% 10% 100% 0;
            /* 设置不规则形状的边框 */
            transform-origin: top right;
            /* 设置变换原点 */
            transform: translate(-100%, 0) rotate(25deg);
            /* 将小胡子向左旋转25度 */
            animation: moveMustache 7s infinite linear;
            /* 添加小胡子移动动画 */
        }


        .mustache+.mustache {
            left: 48%;
            /* 设置左侧小胡子的位置 */
            border-radius: 10% 100% 0 100%;
            /* 设置不规则形状的边框 */
            transform-origin: top left;
            /* 设置变换原点 */
            transform: rotate(-25deg);
            /* 将小胡子向右旋转25度 */
            animation: moveMustache2 7s infinite linear;
            /* 添加小胡子移动动画 */
        }


        /* 圣诞老人帽子样式 */
        .hat {
            position: absolute;
            /* 绝对定位 */
            width: 98%;
            /* 设置宽度 */
            height: 80%;
            /* 设置高度 */
            background: var(--suit);
            /* 设置背景颜色为衣服色 */
            border-radius: 100% 20% 0 0;
            /* 设置不规则形状的边框 */
            top: -40%;
            /* 距离顶部-40% */
            left: 50%;
            /* 距离左侧50% */
            transform: translate(-50%, 0) rotate(1deg);
            /* 将帽子居中并旋转1度 */
        }


        .hat::before {
            content: "";
            /* 伪元素内容为空 */
            display: block;
            /* 显示为块级元素 */
            position: absolute;
            /* 绝对定位 */
            bottom: -17%;
            /* 距离底部-17% */
            left: -5%;
            /* 距离左侧-5% */
            width: 110%;
            /* 设置宽度 */
            height: 40%;
            /* 设置高度 */
            border-radius: 100% / 50%;
            /* 设置椭圆形边框 */
            transform: rotate(-2deg);
            /* 旋转-2度 */
            background: radial-gradient(200% 100% at 50% 100%, #0000 30%, var(--mustache) 31%);
            /* 设置径向渐变背景 */
        }


        .hat::after {
            content: "";
            /* 伪元素内容为空 */
            display: block;
            /* 显示为块级元素 */
            position: absolute;
            /* 绝对定位 */
            right: -25%;
            /* 距离右侧-25% */
            top: -15%;
            /* 距离顶部-15% */
            width: 40%;
            /* 设置宽度 */
            aspect-ratio: 1;
            /* 设置宽高比为1:1 */
            border-radius: 50%;
            /* 设置圆形边框 */
            background: var(--beard);
            /* 设置背景颜色为胡子色 */
        }


        /* 圣诞老人身体样式 */
        .body {
            position: absolute;
            /* 绝对定位 */
            top: 35%;
            /* 距离顶部35% */
            left: 50%;
            /* 距离左侧50% */
            width: 50%;
            /* 设置宽度 */
            height: 50%;
            /* 设置高度 */
            background: var(--suit);
            /* 设置背景颜色为衣服色 */
            border-radius: 100% / 150% 150% 25% 25%;
            /* 设置不规则形状的边框 */
            transform: translate(-50%, 0);
            /* 将身体居中 */
            background-image: radial-gradient(circle at 50% 36%, var(--belt) 2.75%, #0000 3%), radial-gradient(circle at 50% 48%, var(--belt) 3%, #0000 3.25%), radial-gradient(circle at 50% 60%, var(--belt) 2.75%, #0000 3%), radial-gradient(circle at 50% 90%, var(--belt) 2.25%, #0000 2.5%), radial-gradient(circle at 50% -50%, transparent 75%, var(--belt) 75.1% 83%, transparent 83.1%), linear-gradient(to right, transparent 42%, white 42.2% 57%, transparent 57.2%);
            /* 设置径向渐变背景和线性渐变背景 */
            clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 51% 100%, 50% 96%, 49% 100%, 0% 100%);
            /* 设置裁剪路径 */
        }


        .belt {
            position: absolute;
            /* 绝对定位 */
            top: 75%;
            /* 距离顶部75% */
            left: 50%;
            /* 距离左侧50% */
            transform: translate(-50%, -50%);
            /* 将腰带居中 */
            width: 23%;
            /* 设置宽度 */
            height: 15%;
            /* 设置高度 */
            background: linear-gradient(var(--belt-buckle) 0 0) 75% 50% / 25% 12% no-repeat, linear-gradient(var(--belt) 0 0) 50% 50% / 85% 80% no-repeat, var(--belt-buckle);
            /* 设置背景图像和背景颜色 */
        }


        /* 圣诞老人手臂样式 */
        .arms {
            position: absolute;
            /* 绝对定位 */
            top: 37%;
            /* 距离顶部37% */
            left: 50%;
            /* 距离左侧50% */
            transform: translate(-50%, 0);
            /* 将手臂居中 */
            width: 65%;
            /* 设置宽度 */
            height: 40%;
            /* 设置高度 */
            background: OrangeRed;
            /* 设置背景颜色为橙红色 */
            border-radius: 100% / 170% 170% 25% 25%;
            /* 设置不规则形状的边框 */
            background-image: linear-gradient(transparent 20%, #0003);
            /* 设置线性渐变背景 */
        }


        .hand {
            --positionX: 18%;
            /* 定义手的水平位置 */
            position: absolute;
            /* 绝对定位 */
            top: 70%;
            /* 距离顶部70% */
            left: var(--positionX);
            /* 使用定义的水平位置 */
            width: 13%;
            /* 设置宽度 */
            height: 13%;
            /* 设置高度 */
            background: var(--belt);
            /* 设置背景颜色为腰带色 */
            border-radius: 50%;
            /* 设置圆形边框 */
        }


        .hand+.hand {
            left: auto;
            /* 取消之前的left属性 */
            right: var(--positionX);
            /* 设置右侧手的位置 */
        }


        /* 圣诞老人腿部样式 */
        .leg {
            position: absolute;
            /* 绝对定位 */
            top: 75%;
            /* 距离顶部75% */
            left: 29%;
            /* 距离左侧29% */
            width: 19%;
            /* 设置宽度 */
            height: 25%;
            /* 设置高度 */
            background: var(--suit);
            /* 设置背景颜色为衣服色 */
            transform: skew(2deg);
            /* 斜切变形 */
            background-image: linear-gradient(#0002, transparent 70%, var(--belt) 0);
            /* 设置线性渐变背景 */
        }


        .leg+.leg {
            left: 52%;
            /* 设置右侧腿的位置 */
        }


        .leg::after {
            content: "";
            /* 伪元素内容为空 */
            display: block;
            /* 显示为块级元素 */
            position: absolute;
            /* 绝对定位 */
            bottom: 0;
            /* 距离底部0 */
            left: -6%;
            /* 距离左侧-6% */
            width: 110%;
            /* 设置宽度 */
            height: 20%;
            /* 设置高度 */
            background: black;
            /* 设置背景颜色为黑色 */
            border-radius: 50% / 100% 100% 0 0;
            /* 设置椭圆形边框 */
        }


        .leg+.leg::after {
            left: -4%;
            /* 设置右侧腿脚的位置 */
        }


        /* 动画关键帧 */
        @keyframes snow {
            0% {
                background-position: 0 0, 0 0, 0 0, 0 0;
                /* 设置初始背景位置 */
            }


            40% {
                background-position: 10px 14vmin, -20px 28vmin, 20px 20vmin, 10px 24vmin;
                /* 设置40%时的背景位置 */
            }


            60% {
                background-position: -10px 21vmin, -30px 42vmin, 30px 30vmin, 15px 36vmin;
                /* 设置60%时的背景位置 */
            }


            100% {
                background-position: 0 35vmin, 0 70vmin, 0 50vmin, 0 60vmin;
                /* 设置100%时的背景位置 */
            }
        }


        @keyframes blink {


            0%,
            6%,
            100% {
                height: 12%;
                /* 设置眼睛的高度 */
            }


            3% {
                height: 0%;
                /* 设置眼睛的高度为0,模拟眨眼 */
            }
        }


        @keyframes moveMustache {


            0%,
            40%,
            44%,
            100% {
                transform: translate(-100%, 0) rotate(25deg);
                /* 设置小胡子的初始和结束状态 */
            }


            42% {
                transform: translate(-100%, 0) rotate(30deg);
                /* 设置小胡子的中间状态 */
            }
        }


        /* 定义名为 moveMustache2 的关键帧动画 */
        @keyframes moveMustache2 {


            /* 在 0%, 40%, 44%, 和 100% 的时间点上,将小胡子旋转 -25 度 */
            0%,
            40%,
            44%,
            100% {
                transform: rotate(-25deg);
            }


            /* 在 42% 的时间点上,将小胡子旋转 -30 度 */
            42% {
                transform: rotate(-30deg);
            }
        }


        /* 媒体查询,适配偏好减少动画的用户 */
        @media (prefers-reduced-motion) {


            /* 如果用户偏好减少动画,则取消所有元素的动画效果 */
            * {
                animation: none !important;
            }
        }
    </style>
</head>


<body>
    <div class="canvas" role="img" aria-label="一个站在雪地小山上的圣诞老人卡通形象。">
        <!-- 创建一个画布容器,包含圣诞老人的所有部分,并设置ARIA标签以便于辅助技术 -->
        <div class="hand"></div><!-- 左手 -->
        <div class="hand"></div><!-- 右手 -->
        <div class="arms"></div><!-- 手臂 -->
        <div class="leg"></div> <!-- 左腿 -->
        <div class="leg"></div> <!-- 右腿 -->
        <div class="body"> <!-- 圣诞老人的身体 -->
            <div class="belt"></div> <!-- 圣诞老人的腰带 -->
        </div>
        <div class="beard"></div> <!-- 圣诞老人的胡子 -->
        <div class="head"> <!-- 圣诞老人的头部 -->
            <div class="cheek"></div><!-- 左脸颊 -->
            <div class="cheek"></div> <!-- 右脸颊 -->
            <div class="eye"></div> <!-- 左眼 -->
            <div class="eye"></div> <!-- 右眼 -->
            <div class="mustache"></div> <!-- 左小胡子 -->
            <div class="mustache"></div><!-- 右小胡子 -->
            <div class="hat"></div> <!-- 圣诞老人的帽子 -->
        </div>
    </div>
</body>


</html>

创建一个圣诞老人.html文件并使用编辑器打开,将以上代码粘贴后保存,使用浏览器即可查看效果。

通过本教程,你不仅学会了如何使用CSS来手绘一个圣诞老人形象,还了解了如何通过CSS动画来增强网页的互动性。如果你想要更深入地学习CSS,编程狮(w3cschool.cn)提供了丰富的课程,包括CSS基础、进阶技巧以及实战项目,帮助你成为CSS高手。现在就开始你的学习之旅吧,下一个圣诞节,你或许可以自己制作一个更加复杂的圣诞主题网页!

保姆级Python安装教程,小白一看就懂,收藏!

thbcm阅读(179)

Python是一种非常流行和易用的编程语言,它可以用来做很多有用的事情,比如数据分析、网站开发、游戏制作等等。但是在你开始学习Python之前,你需要先安装Python到你的电脑上。今天,小狮妹就来教你如何安装Python吧!

确定电脑操作系统

首先,你需要确定你的电脑的操作系统是什么。操作系统就是你的电脑运行的基本软件,它可以让你和电脑交互,比如打开文件、浏览网页、运行程序等等。常见的操作系统有Windows、Mac OS、Linux等。

如果你不知道你的电脑是什么系统,你可以这样做:

  • 如果你的电脑是Windows系统,你可以在屏幕左下角找到一个叫做“开始”的按钮,点击它,然后在弹出的菜单中找到一个叫做“设置”的图标,点击它。然后,在打开的窗口中,找到一个叫做“系统”的选项,点击它。在左边的菜单中,找到一个叫做“关于”的选项,点击它。在右边的页面中,你可以看到一些关于你的电脑的信息,其中有一项叫做“设备规格”,下面有一项叫做“系统类型”,这里就显示了你的操作系统的版本和位数。比如,“64位操作系统, x64处理器”就表示你的电脑是64位的Windows系统。

  • 如果你的电脑是Mac OS系统,你可以在屏幕左上角找到一个苹果图标,点击它,然后在弹出的菜单中找到一个叫做“关于本机”的选项,点击它。然后,在打开的窗口中,你可以看到一些关于你的电脑的信息,其中有一项叫做“软件”,这里就显示了你的操作系统的版本和名称。比如,“macOS Big Sur 11.4”就表示你的电脑是最新版的Mac OS系统。

  • 如果你的电脑是Linux系统,那么可能有很多种不同的发行版和桌面环境,所以没有统一的方法来查看操作系统信息。但是,一般来说,你可以在屏幕上找到一个类似于Windows或者Mac OS中“开始”或者“苹果”图标的按钮或者菜单,点击它,然后找到一个叫做“关于”或者“信息”或者“帮助”的选项,点击它。然后,在打开的窗口或者页面中,你可以看到一些关于你的电脑和操作系统的信息。比如,“Ubuntu 20.04.2 LTS”就表示你的电脑是Ubuntu发行版的最新长期支持版。

确定了操作系统之后,我们就可以开始下载和安装Python了。

下载Python

要下载Python,我们需要访问Python官方网站。这个网站提供了Python最新版和历史版的下载链接和文档说明。我们可以根据自己需要选择合适版本和平台(即操作系统)来下载。

如果你不知道该选择哪个版本和平台来下载Python,我建议你这样做:

  • 选择最新版(目前是3.9.6)来下载。因为最新版通常会修复一些错误和增加一些功能,而且大多数第三方库和框架都会支持最新版。除非你有特殊的需求,比如要运行一些只能在旧版Python上工作的代码,否则不建议你下载旧版Python。
  • 选择和你的操作系统和位数相匹配的平台来下载。比如,如果你的电脑是64位的Windows系统,那么你就应该选择“Windows x86-64 executable installer”来下载。如果你的电脑是Mac OS系统,那么你就应该选择“macOS 64-bit Intel installer”来下载。如果你的电脑是Linux系统,那么你就应该选择“Linux”来下载,然后根据你的发行版和包管理器来选择合适的安装方式。

下载好Python之后,我们就可以开始安装Python了。

安装Python

要安装Python,我们需要运行下载好的安装文件或者包,并按照提示进行操作。不同的操作系统可能有不同的安装步骤,所以我们要根据自己的情况来进行。

如果你不知道该如何安装Python,我建议你这样做:

  • 如果你的电脑是Windows系统,那么你可以双击下载好的“Windows x86-64 executable installer”文件,然后会弹出一个安装向导窗口。在这个窗口中,你可以看到一些选项,比如“Install Now”(立即安装)、“Customize installation”(自定义安装)、“Add Python 3.9 to PATH”(将Python 3.9添加到环境变量)等。我建议你勾选“Add Python 3.9 to PATH”这个选项,这样就可以让你在任何地方都可以运行Python。然后,你可以选择“Install Now”这个选项,这样就会使用默认的设置来安装Python。如果你想自己选择安装位置或者安装组件,你可以选择“Customize installation”这个选项,然后按照提示进行操作。无论你选择哪个选项,都要等待安装完成,并点击“Close”按钮关闭窗口。

  • 如果你的电脑是Mac OS系统,那么你可以双击下载好的“macOS 64-bit Intel installer”文件,然后会弹出一个安装向导窗口。在这个窗口中,你可以看到一些步骤,比如“Introduction”(介绍)、“Read Me”(阅读我)、“License”(许可协议)、“Destination Select”(目标选择)、“Installation Type”(安装类型)、“Installation”(安装)、“Summary”(总结)等。我建议你按照默认的设置来进行安装,只需要点击“Continue”按钮,并在需要时输入密码或者同意协议即可。等待安装完成,并点击“Close”按钮关闭窗口。

  • 如果你的电脑是Linux系统,那么你可以根据你的发行版和包管理器来选择合适的安装方式。比如,如果你的电脑是Ubuntu系统,并且使用apt作为包管理器,那么你可以在终端中输入以下命令来安装Python:
 
 
sudo apt update # 更新软件源sudo apt install python3 # 安装Python 3

如果你想要更详细的安装指南或者遇到了一些问题,请参考Python官方网站上提供的文档。

验证Python

安装好Python之后,我们需要验证一下是否成功。我们可以用以下方法来检查:

  • 如果你的电脑是Windows系统或者Mac OS系统,那么你可以打开一个叫做“命令提示符”或者“终端”的程序,在里面输入以下命令:
 
 
python --version # 查看Python版本

如果输出类似于“Python 3.9.6”的信息,就表示成功安装了Python。

  • 如果你的电脑是Linux系统,那么你可以在终端中输入以下命令:
 
 
python3 --version # 查看Python 3版本

如果输出类似于“Python 3.9.6”的信息,就表示成功安装了Python 3。

如果你没有看到这样的信息,或者看到了一些错误提示,那么可能是你的安装过程出了一些问题,或者你的环境变量没有设置正确。你可以尝试重新安装Python,或者检查一下你的环境变量是否包含了Python的路径。如果你不知道如何设置环境变量,请参考Python官方网站上提供的文档。

运行Python

验证好Python之后,我们就可以开始运行Python了。我们可以用以下方法来运行Python:

  • 如果你的电脑是Windows系统或者Mac OS系统,那么你可以打开一个叫做“命令提示符”或者“终端”的程序,在里面输入以下命令:
 
 
python # 启动Python交互式解释器

如果成功启动了Python交互式解释器,你会看到类似于这样的信息:

 
 
Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>>

这里的>>>就是一个提示符,表示你可以在这里输入Python代码,并按回车键执行。比如,你可以输入以下代码:

 
 
print("Hello, world!") # 打印一句话

然后按回车键,就会看到以下输出:

Hello, world!

这就表示你成功运行了一段Python代码。你可以在这里尝试更多的Python代码,学习和练习Python的语法和功能。如果你想退出Python交互式解释器,你可以输入以下命令:

 
 

exit() # 退出Python交互式解释器

然后按回车键,就会回到命令提示符或者终端中。

  • 如果你的电脑是Linux系统,那么你可以在终端中输入以下命令:
 
 
python3 # 启动Python 3交互式解释器

如果成功启动了Python 3交互式解释器,你会看到类似于这样的信息:

 
 
Python 3.9.6 (default, Jun 29 2021, 05:25:02)
[GCC 10.2.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>>

这里的>>>就是一个提示符,表示你可以在这里输入Python代码,并按回车键执行。比如,你可以输入以下代码

print("Hello, world!") # 打印一句话

然后按回车键,就会看到以下输出:

Hello, world!

这就表示你成功运行了一段Python代码。你可以在这里尝试更多的Python代码,学习和练习Python的语法和功能。如果你想退出Python交互式解释器,你可以输入以下命令:

 
 

exit() # 退出Python交互式解释器

然后按回车键,就会回到终端中。

恭喜你!你已经完成了Python的安装、验证、运行。接下来,你可以继续学习更多的Python知识和技能,并且尝试编写更多有趣和有用的程序。小狮妹希望你能享受Python编程带给你的乐趣和挑战~

零基础学Python?这些软件是你的最佳选择!

thbcm阅读(185)

你是不是对Python很感兴趣,想要学习这门流行的编程语言?你是不是对编程软件有些迷茫,不知道该用什么软件来写Python代码?如果你是一个Python新手,那么这篇文章就是为你准备的。

小狮妹将给你介绍一些基本的编程软件的概念,以及推荐几款适合初学者的Python IDE。

1,了解基础概念

如果你在编程方面接触的比较少,那么对于软件这一块,有几个名词一定要了解,比如开发环境、IDE、代码编辑器、编译器、调试器等等。这些都是编程过程中必不可少的工具,它们可以帮助你更方便地编写、运行和调试代码。下面我简单地给你解释一下它们的含义和作用:

  • 开发环境:开发环境就是指你用来编程的软件和硬件的集合,它包括了操作系统、编程语言、代码编辑器、编译器、调试器等等。不同的编程语言可能需要不同的开发环境,比如Java需要安装JDK(Java Development Kit),而Python需要安装Python解释器。
  • IDE:IDE是Integrated Development Environment的缩写,意思是集成开发环境。它是一种集合了代码编辑器、编译器、调试器等多种功能于一体的软件,可以让你在一个界面中完成编程的各个步骤。IDE通常会提供一些便利的功能,比如代码提示、代码高亮、代码格式化、代码检查、代码运行、代码调试等等。
  • 代码编辑器:代码编辑器就是用来输入和编辑代码的软件,它可以让你方便地输入和修改代码,同时也可以显示代码的结构和语法。代码编辑器通常会支持多种编程语言,比如Notepad++、Sublime Text、VS Code等等。



  • 编译器:编译器就是用来将源代码转换为可执行文件的软件,它可以让你的代码在目标平台上运行。不同的编程语言可能需要不同的编译器,比如C语言需要GCC(GNU Compiler Collection),而Java需要Javac(Java Compiler)。
  • 调试器:调试器就是用来检查和修复代码错误的软件,它可以让你在运行代码时查看变量的值、设置断点、单步执行等等。调试器通常会和IDE或者代码编辑器配合使用,比如PyCharm自带了Python调试器。

2、为什么要安装Python开发环境?

如果你想运行Python程序,那么必不可少的就是Python的开发环境。Python开发环境主要包括了Python解释器和一些标准库和第三方库。

Python解释器是用来执行Python代码的软件,它可以让你在命令行或者交互式解释器中输入和运行Python代码。标准库和第三方库是一些提供了各种功能和模块的软件包,它们可以让你更方便地编写和运行Python代码。比如,你可以使用标准库中的math模块来进行数学运算,或者使用第三方库中的requests模块来进行网络请求。

要安装Python开发环境,你可以直接从Python官网下载Python安装包,或者使用一些专门的Python发行版,比如Anaconda、WinPython等等。这些发行版通常会预装一些常用的第三方库,比如NumPy、Pandas、Matplotlib等等,可以让你更快地开始Python编程。

3、如何选择合适的Python IDE?

有了开发环境了,就需要有编辑器之类的软件来编写Python代码了。市面上Python IDE有很多,每个IDE都有自己的特点和长处,只有选择适合自己的IDE,开发才会得心应手,事半功倍。那么,如何选择合适的Python IDE呢?我觉得可以从以下几个方面考虑:

  • 功能:不同的IDE可能提供不同的功能,比如代码提示、代码高亮、代码格式化、代码检查、代码运行、代码调试等等。你可以根据自己的需求和喜好,选择一个功能丰富且易用的IDE。
  • 兼容性:不同的IDE可能对不同的操作系统和Python版本有不同的支持,比如有些IDE只能在Windows上运行,有些IDE只能支持Python 3.x版本。你可以根据自己的开发环境,选择一个兼容性好且稳定的IDE。
  • 社区:不同的IDE可能有不同的社区和用户群体,比如有些IDE很受专业开发者的欢迎,有些IDE很受初学者的青睐。你可以根据自己的水平和目标,选择一个社区活跃且资源丰富的IDE。

4、几款适合初学者的Python IDE

下面我就给大家推荐几款我认为适合初学者的Python IDE,它们都是免费且易用的,你可以根据自己的喜好和需求进行选择和尝试:


  • PyCharm:PyCharm是一款非常流行且强大的Python IDE,它提供了很多便利和高级的功能,比如智能代码提示、代码重构、代码调试、版本控制、项目管理等等。PyCharm有两个版本,分别是免费的社区版和付费的专业版。对于初学者来说,社区版已经足够使用了。
  • VS Code:VS Code是一款轻量级且跨平台的代码编辑器,它支持多种编程语言,包括Python。VS Code通过安装插件来扩展功能,比如Python插件可以让你在VS Code中编写、运行和调试Python代码。VS Code也提供了一些实用和友好的功能,比如代码提示、代码高亮、代码格式化、代码检查等等。



  • Thonny:Thonny是一款专门为初学者设计的Python IDE,它非常简洁且易用。Thonny内置了Python解释器和调试器,可以让你直接在Thonny中运行和调试Python代码。Thonny也提供了一些帮助初学者理解编程原理的功能,比如显示变量的值、显示代码的执行过程、显示错误的原因等等。
  • Mu:Mu是另一款专门为初学者设计的Python IDE,它也非常简洁且易用。Mu内置了Python解释器和一些常用的第三方库,可以让你在Mu中编写、运行和调试Python代码。Mu也提供了一些针对不同场景的模式,比如Python模式、Web模式、游戏模式等等,可以让你更快地开始Python编程。

以上就是小狮妹给大家介绍的几款适合初学者的Python IDE,你可以根据自己的情况进行选择和尝试~希望这篇文章能够对你有所帮助,祝你学习Python顺利!

零基础HTML+CSS教程:制作马赛克背景并居中显示图片

thbcm阅读(197)

欢迎来到编程狮(W3Cschool),这里是您学习编程的起点。在这个教程中,我们将一起学习如何使用HTMLCSS来创建一个具有马赛克背景的网页,并在页面中居中显示一张图片。同时,我们会介绍一个强大的AI编程工具——豆包MarsCode,它将帮助您更高效地编写代码。

效果截图

第一步:了解HTML基础

在开始编写代码之前,让我们先了解一些HTML的基础知识。HTML(HyperText Markup Language)是构建网页和网上应用的标准标记语言。它由一系列的元素组成,这些元素告诉浏览器如何展示内容。

如果您是零基础用户,推荐您先学习编程狮上的HTML + CSS 基础实战,这将帮助您快速掌握HTML的基本结构和常用标签。

第二步:编写HTML结构

现在,让我们看看如何构建这个网页的基本结构。打开您的文本编辑器,创建一个新的HTML文件,并输入以下代码:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML+CSS实现马赛克背景 | 编程狮(w3cschool.cn)</title>
</head>
<body>
    <div class="center">
        <img src="https://7nsts.w3cschool.cn/images/w3c/w3cschool-logo.png?t=191105" alt="w3cschool-logo">
    </div>
    <!-- 页面内容 -->
</body>
</html>

代码解释

  • <!DOCTYPE html> 声明了文档类型和HTML版本。
  • <html lang="zh"> 是根元素,lang="zh" 表示页面内容使用中文。
  • <head> 包含了文档的元数据,如字符编码和视口设置。
  • <title> 定义了网页的标题。
  • <body> 包含了可见的页面内容。
  • <div class="center"> 是一个容器,用于居中显示内容。
  • <img> 标签用于插入图片,src 属性指定图片的URL,alt 属性提供了图片的替代文本。

第三步:学习CSS基础

接下来,我们需要使用CSS来美化我们的网页。CSS(Cascading Style Sheets)用于设置HTML元素的样式。

对于CSS的初学者,编程狮提供了CSS入门课程,帮助您掌握CSS的选择器、属性和布局技巧。

第四步:编写CSS样式

<head>标签内,添加一个<style>标签,并输入以下CSS代码:

body {
    margin: 0;
    padding: 0;
    background-image: linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc 100%),
                      linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc 100%);
    background-size: 50px 50px;
    background-position: 0 0, 25px 25px;
}


.center {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

代码解释

  • body 选择器设置了页面的外边距和内边距为0,并定义了背景图像。
  • background-image 使用了两个线性渐变来创建马赛克效果。
  • background-sizebackground-position 控制背景图像的大小和位置。
  • .center 类使用了Flexbox布局来水平和垂直居中显示内容。

第五步:使用AI编程工具——豆包MarsCode

在编程过程中,我们可以使用豆包MarsCode来提高编码效率。它提供了代码补全、单测生成、代码解释等功能,非常适合初学者和专业开发者。

安装MarsCode

  1. 访问豆包MarsCode官网,了解其功能并下载安装。
  2. Visual Studio Code中安装MarsCode插件,重启IDE并登录,即可开始使用。

最后一起看下完整源代码吧(为方便初学者学习,每行代码后面都使用豆包marscode添加了详细的注释),新建一个文本文件,复制并粘贴以下代码,保存后将文件名及后缀修改为css实现马赛克背景编程狮教程.html,用浏览器就可以打开查看效果了

<!DOCTYPE html>
<html lang="zh">
<head>
    <!-- 定义文档的字符编码为UTF-8 -->
    <meta charset="UTF-8">
    <!-- 设置视口的宽度和初始缩放比例 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 定义文档的标题 -->
    <title>HTML+CSS实现马赛克背景 | 编程狮(w3cschool.cn)</title>
    <style>
        /* 设置页面的外边距和内边距为0 */
        body {
            margin: 0;
            padding: 0;
            /* 设置页面的背景图像为两个线性渐变的组合 */
            background-image: linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc 100%),
                              linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc 100%);
            /* 设置背景图像的大小为50像素x50像素 */
            background-size: 50px 50px;
            /* 设置背景图像的位置为0 0和25像素 25像素 */
            background-position: 0 0, 25px 25px;
        }


        /* 定义一个类名为center的样式 */
        .center {
            /* 使用flex布局 */
            display: flex;
            /* 水平居中对齐 */
            justify-content: center;
            /* 垂直居中对齐 */
            align-items: center;
            /* 高度为100vh,即整个视口的高度 */
            height: 100vh;
        }
    </style>
</head>
<body>
    <!-- 使用center类来居中显示内容 -->
    <div class="center">
        <!-- 插入一张图片,图片的URL为https://7nsts.w3cschool.cn/images/w3c/w3cschool-logo.png?t=191105 -->
        <img src="https://7nsts.w3cschool.cn/images/w3c/w3cschool-logo.png?t=191105" alt="w3cschool-logo">
    </div>
    <!-- 页面内容 -->
</body>
</html>

结语

通过这个教程,您不仅学会了如何使用HTML和CSS来创建一个具有马赛克背景的网页,还了解了如何使用豆包MarsCode来提升您的编程效率。编程狮(w3cschool.cn)提供了丰富的编程课程,帮助您从零基础成长为编程高手。豆包MarsCode官网则是您编程路上的得力助手,让您的编码之旅更加顺畅。开始您的编程之旅吧!

如何用CSS3创建圆角矩形并居中显示?

thbcm阅读(202)

在网页设计中,圆角矩形因其美观和现代感而被广泛使用,居中显示元素也是一个常见的需求。今天,我们将学习如何使用CSS3border-radius属性来创建圆角矩形,并将其居中显示在页面上。

如果你正在学习CSS,那么这个实例将非常适合你练手。如果想要更生动的学习CSS,推荐编程狮W3Cschool的HTML + CSS 基础实战,它能让你像玩游戏一样闯关中掌握更多的多前端开发实用技巧。

如果你没有HTML基础请先学习《HTML入门课程(含HTML5)

一、创建圆角矩形

首先,我们来看如何创建一个圆角矩形:

.rectangle { <!-- 定义矩形样式 -->
    width: 400px; <!-- 设置矩形宽度为400像素 -->
    height: 300px; <!-- 设置矩形高度为300像素 -->
    background-color: #4CAF50; /* 设置背景颜色为绿色 */
    border: 2px solid #000; /* 设置边框为2像素的黑色实线 */
    border-radius: 10px; /* 设置圆角为10像素 */
}

要使用CSS3创建圆角矩形,你需要使用border-radius属性。border-radius属性允许你为元素的四个角设置圆角。以下是一些基本的使用方法:

单个值

如果你为border-radius属性提供一个值,那么这个值将应用于所有四个角:

css

.rectangle {
  border-radius: 10px; /* 所有四个角都是10px的圆角 */
}

两个值

如果你提供两个值,第一个值将应用于左上角和右下角,第二个值将应用于右上角和左下角:

css

.rectangle {
  border-radius: 10px 20px; /* 左上角和右下角是10px的圆角,右上角和左下角是20px的圆角 */
}

三个值

如果你提供三个值,第一个值将应用于左上角,第二个值将应用于右上角和左下角,第三个值将应用于右下角:

css

.rectangle {
  border-radius: 10px 20px 30px; /* 左上角是10px的圆角,右上角和左下角是20px的圆角,右下角是30px的圆角 */
}

四个值

如果你提供四个值,它们将分别应用于左上角、右上角、右下角和左下角:

css

.rectangle {
  border-radius: 10px 20px 30px 40px; /* 左上角是10px的圆角,右上角是20px的圆角,右下角是30px的圆角,左下角是40px的圆角 */
}

当然你也可以使用编程狮上的在线生成CSS圆角工具来快速一键获取圆角的css代码

二、居中显示

要将圆角矩形居中显示,我们可以使用以下两种方法之一:

方法1:使用Flexbox

将矩形包裹在一个容器中,并使用Flexbox来居中它:

<!DOCTYPE html> <!-- 定义文档类型为HTML5 -->
<html>
<head>
  <meta charset="UTF-8"> <!-- 设置字符编码为UTF-8 -->
  <title>居中显示圆角矩形示例 | 编程狮(w3cschool.cn)</title> <!-- 页面标题 -->
  <style>
    .container { /* 定义容器样式 */
      display: flex; /* 使用Flexbox布局 */
      justify-content: center; /* 水平居中子元素 */
      align-items: center; /* 垂直居中子元素 */
      height: 100vh; /* 使容器高度占满整个视口高度 */
    }
    .rectangle { /* 定义矩形样式 */
      width: 400px; /* 设置矩形宽度为400像素 */
      height: 300px; /* 设置矩形高度为300像素 */
      background-color: #4CAF50; /* 设置背景颜色为绿色 */
      border: 2px solid #000; /* 设置边框为2像素的黑色实线 */
      border-radius: 10px; /* 设置圆角为10像素 */
    }
  </style>
</head>
<body>
  <div class="container"> <!-- 使用容器类 -->
    <div class="rectangle"></div> <!-- 使用矩形类 -->
  </div>
</body>
</html>

在这个示例中,.container类使用display: flex属性创建了一个Flexbox布局,justify-content: centeralign-items: center属性分别在水平和垂直方向上居中了子元素。这段代码使用了Flexbox,这是一种现代的布局方式,非常适合于简单的居中任务。

推荐学习

方法2:使用绝对定位

如果你不想使用Flexbox,也可以使用绝对定位来居中元素:

<!DOCTYPE html> <!-- 定义文档类型为HTML5 -->
<html>
<head>
  <meta charset="UTF-8"> <!-- 设置字符编码为UTF-8 -->
  <title>居中显示圆角矩形示例 | 编程狮(w3cschool.cn)</title> <!-- 页面标题 -->
  <style>
    /* 定义html和body的样式 */
    html, body {
      height: 100%; /* 设置高度为视口的100% */
      margin: 0; /* 移除默认的外边距 */
    }


    /* 定义内容容器样式 */
    .body-content {
      position: relative; /* 设置定位为相对定位,用于绝对定位子元素的参考 */
      height: 100%; /* 设置高度为100% */
    }


    /* 定义矩形样式 */
    .rectangle {
      position: absolute; /* 设置定位为绝对定位 */
      top: 50%; /* 设置顶部距离为容器高度的50% */
      left: 50%; /* 设置左边距离为容器宽度的50% */
      transform: translate(-50%, -50%); /* 使用变换将矩形向上和向左移动50%,实现居中 */
      width: 400px; /* 设置矩形宽度为400像素 */
      height: 300px; /* 设置矩形高度为300像素 */
      background-color: #4CAF50; /* 设置背景颜色为绿色 */
      border: 2px solid #000; /* 设置边框为2像素的黑色实线 */
      border-radius: 10px; /* 设置圆角为10像素 */
    }
  </style>
</head>
<body>
  <div class="body-content"> <!-- 使用内容容器类 -->
    <div class="rectangle"></div> <!-- 使用矩形类 -->
  </div>
</body>
</html>

在这个示例中,.rectangle类使用position: absolute属性相对于其最近的相对定位祖先(.body-content)进行定位,然后使用transform: translate(-50%, -50%)将其向左和向上移动50%,以实现居中。这段代码使用了绝对定位和transform属性,这是一种更传统的方法,也可以实现相同的效果。

推荐学习:

三、提升开发效率的工具

在开发过程中,我们可以使用豆包MarsCode编程助手来提升我们的编码效率。豆包 MarsCode提供了智能补全、智能预测、智能问答等功能,帮助开发者节省时间,释放创造力。它支持超过100种编程语言,并兼容VSCode和JetBrains代码编辑器,是你编程路上的得力助手。详情见《豆包MarsCode官方使用指南

通过这篇文章,我们不仅学习了如何使用CSS3创建圆角矩形,还了解了如何将其居中显示在页面上。希望这些知识能够帮助你在前端开发的道路上更进一步。如果你对编程感兴趣,不妨访问编程狮W3Cschool,开始你的编程学习之旅。

【示例代码】Python3实现AI版贪吃蛇

thbcm阅读(203)

本文转载至知乎ID:
Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

利用Python简单地实现AI版的贪吃蛇。。。

just for fun…

没有用深度学习。。。

算法是由一个叫Hawstein的人在好多好多年以前提出,感觉很有趣,就花了点时间复现了一下他的想法。。。

至于效果。。。

看脸。。。

真的只是觉得他的想法很有趣,仅此而已,因为如果你想让蛇机械地充满整个空间,只需要让蛇一直走S就好了,但是这就变得很无趣了。。。

相关文件

百度网盘下载链接: https://pan.baidu.com/s/1KPAV6FKLUFj11myoVjzQ2Q 

密码: gb7k

主要思路

(1)蛇每走一步,就使用BFS计算游戏界面中每个位置(蛇身除外)到达食物的最短路径长;

(2)将蛇的安全定义为蛇是否可以跟着蛇尾运动,即蛇头和蛇尾间是否存在路径;

(3)蛇每次行动前先利用虚拟的蛇进行探路,若虚拟的蛇吃完食物后是安全的,真蛇才行动;

(4)若蛇和食物之间不存在路径或者吃完食物后并不安全,就跟着蛇尾走;

(5)若蛇和食物之间、蛇和蛇尾之间均不存在路径,就随便挑一步可行的来走;

(6)保证目标是食物时蛇走最短路径,目标是蛇尾时蛇走最长路径。

不足之处

由于食物是随机出现的,若虚拟的蛇跑一遍发现去吃食物是不安全的,真蛇就不会去吃食物,而是选择追着蛇尾跑,若一直如此,就陷入了死循环,蛇一直追着蛇尾跑跑跑。。。

直到你终止游戏为止。。。

开发工具

Python版本:3.5.4

相关模块:

pygame模块以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

运行方式

在cmd窗口运行AI_snake.py文件即可。

结果展示

动图一直上传失败。。。

所以随便截几个图吧~~~

更多

(1)为了保证代码简单易懂,所提供的代码冗余度较高(比如进行了不必要的重复计算),有兴趣者可对代码进行优化;

(2)相关文件中也提供了普通版本的贪吃蛇游戏(Normal_snake.py)。

CSS尺寸单位全解析:Web前端开发的必备知识

thbcm阅读(179)

在Web前端开发中,掌握CSS尺寸单位是构建响应式和适配不同设备的关键。编程狮将在本文中为您详细解读CSS中的各种尺寸单位,帮助您在移动端和桌面端都能游刃有余。

概览

CSS尺寸单位分为绝对单位和相对单位,它们共同构成了我们布局和设计的基础。

绝对单位

绝对单位提供了一个固定的尺寸,不受显示器或父元素的影响。

  • px (Pixel):像素,基于设备屏幕分辨率。
    div { font-size: 12px }
    p { text-indent: 24px }
  • pt (Points):磅,1 pt = 1/72 英寸。
    div { font-size: 10pt }
    p { height: 100pt }
  • pc (Picas):派卡,印刷中使用的单位。
    div { font-size: 10pc }
    p { height: 10pc }
  • in (Inches):英寸。
    div { font-size: 10in }
    p { height: 10in }
  • mm (Millimeter):毫米。
    div { font-size: 10mm }
    p { height: 10mm }
  • cm (Centimeter):厘米。
    div { font-size: 10cm }
    p { height: 10cm }
  • q (Quarter millimeters):1/4毫米。
    div { font-size: 20q }
    p { height: 100q }

相对单位

相对单位则依据其他尺寸或比例来定义。

  • % (Percentage):百分比,相对于父元素的宽度。
    <body>
    <div class="parent">
      <div class="children"></div>
    </div>
    </body>
    <style>
    .parent { width: 100px }
    .children { width: 66.6% }
    /* children的宽度为 66.6px */
    </style>
  • em (Element meter):根据当前文档对象内文本的字体尺寸计算。
    body { font-size: 14px }
    .element { font-size: 16px; width: 2em; /* 2em === 32px */ }
  • rem (Root element meter):根据根文档(body/html)字体计算尺寸。
    body { font-size: 14px }
    .element { font-size: 16px; width: 2rem; /* 2rem === 28px */ }
  • ex (Height of the letter x):文档字符“x”的高度。
    .x { height: 1ex; overflow: hidden; background: #aaa; }
  • ch (Width of the digit 0):文档数字“0”的宽度。
    .0 { width: 10ch; overflow: hidden; background: #ccc; }

运算

  • calc:允许进行四则运算。
    h1 { width: calc(100% - 10px + 2rem); }

单位比例

了解单位之间的转换比例对于精确设计至关重要:

  • 1in = 2.54cm = 25.4 mm = 101.6q = 72pt = 6pc = 96px

视口单位

  • vh (View height) / vw (View width):相对于视口的高度和宽度。
    .element { width: 50vw; height: 80vh; /* 根据视口尺寸计算 */ }
    .full-height { height: 100vh; /* 与视口同等高度 */ }
    h1 { width: 100vw; /* 与视口同宽 */ }
  • vmin / vmax:视口宽度或高度中较小/较大的那个尺寸。
    .box { height: 100vmin; width: 100vmin; /* 根据视口较小尺寸计算 */ }
    .box { height: 100vmax; width: 100vmax; /* 根据视口较大尺寸计算 */ }

以上就是CSS尺寸单位的全面解析,希望对您的Web前端开发之旅有所帮助。如果您想学习更多css免费教程,可以访问W3Cschool的CSS尺寸教程

为什么要学Python?选择Python的八大理由。编程小白请入,写在学习前的建议。

thbcm阅读(196)

0
1
为什么要学Python?

学起来容易:

Python 就像英语⼀样,学起来挺直⽩的。它的代码看起来就像是在写英⽂,所以初学者学起来不会觉得头疼。

啥都能⼲:

想做⽹站?搞数据分析?或者是弄个机器⼈?Python 都能帮忙。它就像是⼀个多⾯⼿,各种活都能⼲。

资源超多:

Python 就像⼀个超⼤的⼯具箱,⾥⾯什么⼯具都有,⽽且⽹上还有超多的教程和帮助,遇到问题也容易找到答案。

到处都能跑:

不管你⽤的是 Windows 还是 Mac,甚⾄是 Linux,Python 都能在上⾯运⾏,⾮常⽅便。

开发快速:

⽤ Python 写程序就像搭积⽊⼀样快。它让你能快速把想法变成现实,不⽤花太多时间在繁琐的代码上。

有个超⼤的社区:

⽤ Python 就像加⼊了⼀个超⼤的俱乐部,遇到问题,总有⼈能帮忙解决。这个社区超级活跃,⽆论你是新⼿还是⽼⼿,都能从中受益。

学校⾥也爱⽤:

Python 因为简单,很多学校都⽤它来教编程。⽽且科学家们也爱⽤它来做研究,可以说是学术界的宠⼉。

新技术的最佳伙伴:

在 AI、机器学习这些最前沿的领域,Python 就像是⼀把利器,帮助⼈们开发出很多酷炫的东⻄。

学习建议
0
2

从基础开始:

先学习 Python 的基本语法,⽐如变量、循环、条件判断等。这是打好基础的关键。

动⼿实践:

编程最重要的是实践。你可以边学边做⼀些⼩项⽬,⽐如⼀个⼩游戏、数据分析项⽬或者⼀个⼩⽹站。这样可以加深理解。

利⽤在线资源:

⽹上有很多免费的 Python 教程和课程,⽐如 Codecademy、W3Cschool编程狮等,这些都是很好的学习资源。

加⼊社区:

Python 有⼀个很活跃的社区。你可以加⼊相关的论坛或社群,⽐如 StackOverflow 上的 Python 板块,那⾥可以找到很多志同道合的朋友,还可以提问和解决问题。

阅读代码:

看看别⼈是怎么写 Python 代码的。GitHub 上有很多开源项⽬,你可以学习其中的代码⻛格和结构。

多做项⽬:

实际的项⽬经验⾮常重要。你可以从⼩项⽬做起,逐渐增加难度。

学习框架和库:

了解和学习⼀些流⾏的 Python 库和框架,⽐如 Flask 或 Django(Web 开发),Pandas 和 NumPy(数据分析),TensorFlow 或 PyTorch(机器学习)。

持续更新知识:

技术是不断发展的,定期更新你的 Python 知识很重要。可以通过阅读官⽅⽂档、技术博客、参加线上或线下的研讨会等⽅式。

错误是你的朋友:

在编程中遇到错误是很正常的,不要⽓馁。错误是学习过程中的⼀部分,通过解决错误,你可以学到更多。

享受编程:

最重要的是,享受编程的过程。让编程成为⼀种乐趣,⽽不仅仅是⼀项任务。

【学习路线】Python基础 详细知识点学习路径(附学习资源)

thbcm阅读(195)

其他路线:

Python基础 >>

Python进阶 >>

Python爬虫 >>

Python数据分析(数据科学) >>

Python 算法(人工智能) >>

Python Web开发 >>

Python自动化运维 >>

符号表解释:

可根据知识点前的符号按需选学,并获取知识点描述和学习资源。

 必学:核⼼知识点,经常⽤到。

建议学:重要知识点,专业⼈⼠的基⽯。

⾯试重点:经常出现的⾯试知识点。

可有可⽆:边缘区域,不是必须探索的地⽅。

知识描绘:知识点描述,快速理解。

学习资源:关联的学习资源。

学习⽬标:阶段性⽬标。

学习路线:基础

资源:

Python3 教程>>>

Python3 入门学练课程>>>

Python3 入门视频课程>>>

Python 官⽅⽂档>>>

⽬标:能⽤Python编写待办事项列表应⽤程序:创建⼀个简单的控制台应⽤,允许⽤户添加、删除和查看待办事项。

Python 安装

教程资源 >>>

课程资源 >>>

开发⼯具:

VS Code

特点:跨平台,插件丰富,内置Git和终端,适⽤于多种编程语⾔。

 PyCharm

特点: 专为Python设计,智能代码助⼿,强⼤的调试⼯具

Sublime

特点: 轻量级,快速,⾼度可定制,⽀持多⽂件同时处理,代码快速跳转。


变量

1、定义变量

  • 在Python中,变量是存储数据值的容器。

  • 定义变量时,不需要显式声明数据类型。Python是动态类型语⾔,会在运⾏时⾃动推断数据类型。

  • 示例:x = 5 这⾥,x 是变量名,它被赋值为整数 5。

2、关键字

  • 关键字是Python中预定义的、具有特殊意义的保留字。

  • 关键字不能⽤作变量名、函数名或其他标识符。

  • 示例:if, else, for, while, class 等。

3、命名规则

  • 变量名必须以字⺟或下划线开头,不能以数字开头。

  • 变量名可以包含字⺟、数字和下划线(A-z, 0-9, 和 _ )。

  • 变量名是⼤⼩写敏感的,例如,myVar 和 myvar 是两个不同的变量。

  • 应避免使⽤Python的内置函数名和关键字作为变量名,以防⽌冲突。

4、基本数据类型

  • 数值类型: 如 int (整数), float (浮点数)。

  • 字符串: ⽤于表示⽂本数据,例如 str。

  • 布尔值: 表示真或假,如 bool(True 或 False)。

  • 列表, 元组, 字典: ⽤于存储集合数据。

5、类型转换

  • 可以使⽤内置函数如 int(), float(), str() 等来转换数据类型。

  • 示例:int(“123”) 会将字符串 “123” 转换为整数 123。

  • ⾃动类型转换发⽣在执⾏特定操作时,例如,将整数与浮点数相加时,整数会⾃动转换为浮点数。

运算符和表达式

描述:Python中的运算符和表达式是编程的基础元素之⼀,它们⽤于执⾏计算、值的⽐较和逻辑运算。

1、算术运算符

  • 加法+​:⽤于两个数值的相加,如 3 + 4 结果为 7。

  • 减法-​:⽤于两个数值的相减,如 5 – 2 结果为 3。

  • 乘法*​:⽤于两个数值的相乘,如 3 * 4 结果为 12。

  • 除法/​:⽤于两个数值的相除,如 8 / 2 结果为 4.0(结果总是浮点数)。

  • 取模%​:返回除法的余数,如 5 % 2 结果为 1。

  • 幂**​:⽤于求幂,如 2 ** 3 结果为 8。

  • 整除//​:返回两数相除的整数部分,如 5 // 2 结果为 2。

2、⽐较运算符

  • 等于== ​: 判断两个值是否相等。

  • 不等于!=​ : 判断两个值是否不等。

  • 大于 >、小于 < ​: ⽐较两个值的⼤⼩。

  • 大于等于 >=、小于等于 <= ​: ⽐较两个值的⼤⼩,包含等于的情况。

3、逻辑运算符

  • 与 and ​: 两个条件同时为真时,结果为真。

  • 或 or ​: 两个条件中⾄少有⼀个为真时,结果为真。

  • 非 not​ : 取反,真变假,假变真。

4、赋值运算符

  • 赋值 =​ : 将右侧的值赋给左侧的变量,如 x = 5。

  • 复合赋值:如 +=, -=, *=, /=, %=, **=, //= 等,将算术操作与赋值结合,例如 x += 3 等同于 x = x + 3。

5、身份运算符

  • is、is not ​: ⽤于判断两个变量是否引⽤同⼀个对象。

6、成员运算符

  • in、not in​ : ⽤于检查序列(如列表、字符串)中是否存在(或不存在)⼀个值。

流程控制

1、条件分⽀

  • if 语句​ : 检查⼀个条件,如果条件为真,则执⾏相关代码块。

  • elif 语句​ : 在if条件不满⾜时,检查另⼀个条件。

  • else 语句​ : 当所有if和elif条件都不满⾜时,执⾏else部分的代码。

2、循环

  • for 循环​ : 遍历序列或其他可迭代对象,对每个元素执⾏代码块。

  • while 循环​ : 当给定条件为真时,重复执⾏代码块。

3、循环控制语句

  • break ​: 提前退出整个循环。

  • continue​ : 跳过当前循环的剩余部分,⽴即开始下⼀次迭代。

基本数据结构

1、字符串 (String)

  • ⽤于存储⽂本。

  • 由字符组成,如 “hello”。

  • 不可变(immutable),意味着⼀旦创建,其内容不能更改。

  • 提供丰富的⽅法进⾏操作,如索引、切⽚、连接和格式化。

2、列表 (List)

  • ⽤于存储有序的数据集合。

  • 可以包含不同类型的元素,如 [1, “hello”, 3.14]。

  • 可变(mutable),可以添加、删除或更改其元素。

  • ⽀持索引和切⽚操作,可以通过索引访问或更改元素。

3、元组 (Tuple)

  • 类似于列表,但是不可变。

  • ⽤于存储有序的数据集合,如 (“apple”, “banana”, “cherry”)。

  • ⼀旦创建,不能修改其内容(添加、删除或更改元素)。

  • 常⽤于函数返回多个值或将多个值作为⼀个整体进⾏处理。

4、集合 (Set)

  • ⽤于存储⽆序的、唯⼀的元素集。

  • 元素不重复,如 {1, 2, 3}。

  • 可变,可以添加或删除元素,但不能包含可变元素(如列表)。

  • ⽀持数学上的集合操作,如并集、交集、差集等。

5、字典 (Dictionary)

  • 存储键值对,每个键对应⼀个值。

  • 例如,{“name”: “Alice”, “age”: 25}。

  • 键通常是字符串或数字,值可以是任何数据类型。

  • 可变,可以添加、删除或更改键值对。

  • ⽆序,不能通过索引。

函数

 资源 >>>

定义

1、参数传递

  • 函数可以接受参数,这些参数在函数调⽤时被传递给函数。

  • 参数可以是必需的,也可以是可选的(带有默认值)。

  • Python还⽀持关键字参数(允许你通过参数名指定参数)和可变数量的参数(使⽤*args和**kwargs)。

2、作⽤域

描述: 在Python中,变量的作⽤域决定了在哪⾥可以访问该变量。

  • 局部作⽤域:在函数内定义的变量只能在该函数内部访问。

  • 全局作⽤域:在函数外定义的变量可以在整个代码中访问。

  • global关键字⽤于在函数内部访问全局变量。

  • nonlocal关键字⽤于在嵌套函数中访问外层函数的局部变量。

3、lambda 表达式

lambda表达式是⼀种创建匿名函数的⽅式。

 资源 >>>

4、常⽤内置函数

描述: Python提供了许多内置函数,这些函数随时可⽤,⽆需导⼊模块。

  • print():打印输出。

  • len():返回对象的⻓度或元素个数。

  • type():返回对象的类型。

  • range():⽣成⼀个数值序列。

  • str(), int(), float(): ⽤于类型转换。

  • input(): ⽤于从⽤户获取输⼊。

  • sum(): 计算序列中所有元素的总和。

  • max(), min(): 查找序列中的最⼤或最⼩值。

  • sorted(): 返回排序后的序列。

向对象编程 (OOP)

1、类和对象

1.1 类 (Class)

  • 类是创建对象的蓝图或模板。它为对象定义了特定的属性和⽅法。

  • 类是⽤来定义数据以及数据操作的⽅法的。你可以将类看作是构建对象的模具。

1.2 对象 (Object)

  • 对象是根据类定义创建的实例。每个对象都有特定的属性和⽅法。

  • 对象是类的实例化,具有类定义的所有特性。每个对象都可以有不同的属性值,使得每个对象都是独⼀⽆⼆的。

  • 对象的创建通常称为实例化,并且对象可以使⽤类中定义的⽅法。

2、三⼤特性

2.1 封装

 描述: 封装是OOP中将数据(属性)和操作数据的代码(⽅法)捆绑在⼀起的概念。这样做的⽬的是隐藏对象的内部状态,只通过公共接⼝暴露功能。

  • self ​: 在类的⽅法中,self代表类的实例⾃身。它是对当前对象的引⽤。

  • 属性: 类的变量,⽤于存储数据。

  • ⽅法: 类中定义的函数,⽤于定义对象的⾏为。

    • 类⽅法(Class Method): 使⽤@classmethod装饰器定义,接受类本身作为第⼀个参数(通常命名为cls)。

    • 实例⽅法(Instance Method): 类的普通⽅法,接受实例⾃身self作为第⼀个参数。

    • 静态⽅法(Static Method): 使⽤@staticmethod装饰器定义,不接受self或cls参数,类似普通函数但属于类的命名空间。

  • 访问控制: 控制外部对类内部属性和⽅法的访问权限。Python通过前置下划线实现(如单下划线 _ 和双下划线 __)。

2.2 继承

 描述: 继承允许⼀个类(⼦类)继承另⼀个类(⽗类)的属性和⽅法,从⽽实现代码重⽤。

  • 单继承: ⼦类只继承⼀个⽗类。

  • 多继承: ⼦类可以继承多个⽗类。Python⽀持多继承,允许定义继承多个⽗类的类。

2.3 多态

 描述: 多态是指不同类的对象对同⼀消息作出响应的能⼒,即相同的接⼝调⽤可以有不同的执⾏结果。

  • ⽅法重写(Method Overriding): ⼦类可以重写⽗类的⽅法,提供特定于⼦类的实现。在调⽤这个⽅法时,会使⽤⼦类的版本,⽽不是⽗类的。

3、运算符重载

 描述: 运算符重载允许为类的实例⾃定义Python内置操作符的⾏为。

  • 通过定义特殊⽅法(magic methods),类可以改变其实例的运算符⾏为。

  • 例如,通过重载__add__⽅法,可以定义两个类实例使⽤+运算符时的⾏为。

4、装饰器

 描述: 装饰器是⼀种设计模式,⽤于修改或增强函数或⽅法的⾏为,⽽不改变其代码。

  • 在Python中,装饰器是⼀种函数,它接受⼀个函数作为参数并返回⼀个新的函数。

  • 装饰器通过在函数定义之前使⽤@符号应⽤,例如@decorator_name。

  • 它们常⽤于⽇志记录、性能测试、事务处理、权限校验等。

  • 装饰器可以应⽤于任何可调⽤的对象,包括类和类的⽅法。

5、反射

 描述: 反射是指程序在运⾏时检查和修改其结构(如类或函数)的能⼒。

  • 在Python中,可以通过内置函数如getattr(), setattr(), hasattr(), 和delattr()实现反射,⽤于动态地访问或修改对象的属性。

  • type()和isinstance()等函数可以⽤于获取对象的类型信息。

  • 反射使得程序可以更加动态,例如根据条件动态调⽤⽅法或访问属性,但也可能使得代码难以理解和维护。

模块

 描述:模块是包含Python代码的⽂件。模块可以定义函数、类和变量,也可以包含可执⾏的代码。模块的使⽤是Python编程的基础之⼀,它提⾼了代码的可重⽤性和组织性。

1、导⼊模块

 描述: Python中导⼊模块通常使⽤import语句。

1.1 基本导⼊

  • 直接使⽤import语句,后⾯跟模块名。

  • 例如:import math。之后可以通过math.function_name的⽅式调⽤模块内的函数。

1.2 从模块导⼊特定项

  • 使⽤from … import …语法。

  • 例如:from math import sqrt。这样可以直接使⽤sqrt⽽⽆需math.sqrt。

1.3 导⼊模块并重命名

  • 使⽤import … as …语法。

  • 例如:import numpy as np。之后可以使⽤np来代替numpy。

1.4 导⼊模块的所有项

  • 使⽤from … import *语法。

  • 这会将模块中的所有项导⼊当前命名空间,但通常不推荐这样做,因为它可能导致命名冲突。

2、常⽤模块

  • math​ : 提供数学运算函数,如三⻆函数、对数函数等。

  • datetime​ : ⽤于处理⽇期和时间的模块。

  • os​ : 提供了许多与操作系统交互的功能。

  • sys ​: ⽤于访问与Python解释器紧密相关的变量和函数。

  • random​ : ⽤于⽣成随机数。

  • json​ : ⽤于读取和写⼊JSON格式数据。

  • re​ : 提供正则表达式⼯具。

 描述: 包(Package)是⼀种组织模块的⽅式,它们是包含模块的⽂件夹,并提供了⼀种层次结构,使得模块组织更加清晰。包的使⽤使得⼤型项⽬的代码管理变得更加容易。

1、导⼊包

 描述: 导⼊包的⽅法类似于导⼊模块,但它还涉及到包的层次结构。

1.1 直接导⼊包下的模块

  • 使⽤import语句指定包名和模块名。

  • 示例:import package.module。

1.2 从包中导⼊特定模块或函数

  • 使⽤from … import …语法。

  • 示例:from package import module 或 from package.module import function。

1.3 导⼊⼦包

  • 如果包中还包含⼦包,可以通过.来导⼊⼦包中的模块。

  • 示例:import package.subpackage.module。

2、⽣成包

 描述: 创建⼀个包涉及到创建⼀个包含模块和⼀个特殊⽂件init.py的⽂件夹。init.py可以为空,但它的存在告诉Python这个⽂件夹应该被视为⼀个Python包。

2.1 创建包⽬录

  • 创建⼀个⽂件夹,⽤于存放相关的模块。⽂件夹的名字就是包的名字。

2.2 添加模块

  • 在这个⽂件夹中创建Python⽂件(.py),每个⽂件都作为包的⼀个模块。

2.3 ​添加__init__.py文件

  • 在⽂件夹中创建⼀个名为__init__.py的⽂件。这个⽂件可以包含包的初始化代码,或者仅仅为空。

异常处理

1、捕获异常

在Python中,使⽤try和except语句来捕获异常。try块包含可能引发异常的代码,⽽except块包含在发⽣异常时要执⾏的代码。

2、try … except … else … finally 结构

try语句还可以包含else和finally块。else块中的代码在try块中的代码没有引发异常时执⾏,⽽finally块中的代码始终会在try块执⾏后执⾏,⽆论是否发⽣异常。

3、⾃定义异常

在Python中,你可以通过创建⾃定义异常类来定义⾃⼰的异常类型。⾃定义异常类通常继承⾃内置的Exception类。

⽂件操作

1、打开⽂件

要与⽂件进⾏交互,⾸先需要打开它。使⽤内置的 open() 函数,传递⽂件路径和打开模式。打开模式包括:

  • ‘r’:只读模式

  • ‘w’:写⼊模式(会覆盖已存在的⽂件)

  • ‘a’:追加模式(将内容添加到⽂件末尾)

  • ‘x’:独占创建模式(如果⽂件已存在,则失败)

  • ‘b’:⼆进制模式

2、读取⽂件内容

通过打开⽂件后,可以使⽤ read() ⽅法读取整个⽂件的内容。你还可以使⽤readline() ⽅法逐⾏读取,或者使⽤ readlines() ⽅法将内容按⾏读取并存储在列表中。

3、写⼊⽂件内容

使⽤ write() ⽅法可以向⽂件写⼊内容。如果⽂件不存在,使⽤ ‘w’ 模式将创建⼀个新⽂件。你还可以使⽤ writelines() ⽅法写⼊多⾏内容。

4、关闭⽂件

在完成⽂件操作后,务必使⽤ close() ⽅法关闭⽂件。这有助于释放系统资源。为了确保⽂件在任何情况下都会被关闭,可以使⽤ with 语句创建上下⽂管理器。

联系我们