Python版比心

本文介绍运用Python中的turtle库控制函数画比心图。

本文目录

  1. 效果展示
  2. 代码详解 2.1 导入库 2.2 播放音乐 2.3 画手 2.4 定义画心的函数 2.5 定义写名字的函数并实现动态画心

一、效果展示

在介绍代码之前,先来看下本文的实现效果。

http://mpvideo.qpic.cn/0bc3beaqcaableaj543y25rvccodaeeqcaia.f10002.mp4?dis_k=6865ca4fe367f73c661d9d9a80f10f43&dis_t=1673852023&play_scene=10400&vid=wxv_2672992249353355265&format_id=10002&support_redirect=0&mmversion=false

可以参考Pinstaller(Python打包为exe文件)一文把Python文件转化成exe,发给未安装Python的Ta。

二、代码详解

Python绘制比心图的原理是:应用turtle库控制函数绘制不同曲线构成比心图。

1 导入库

首先导入本文需要加载的库,如果你有些库还没有安装,导致运行代码时报错,可以在Anaconda Prompt中用pip方法安装。


# -*- coding: UTF-8 -*-
'''
代码用途 :画比心手
作者     :阿黎逸阳
博客     :  https://blog.csdn.net/qq_32532663/article/details/106176609
'''
import os
import pygame
import turtle as t 
from time import sleep

本文应用到的库较少,只应用了os、pygame、turtle和time四个库。

os库可以设置文件读取的位置。

pygame库是为了绘制过程更有趣,在绘图过程中添加了背景音乐。

turtle库是绘图库,相当于给你一支画笔,你可以在画布上用数学逻辑控制的代码完成绘图。

time库可以设置程序休眠的时间,达到动态画心的效果。

2 播放音乐

接着应用pygame库播放背景音乐,本文的音乐是《赵海洋 - 《瞬间的永恒》夜色钢琴曲》。


#播放音乐
print('播放音乐')
pygame.mixer.init()
pygame.mixer.music.load(r"F:\公众号\520\赵海洋 - 《瞬间的永恒》夜色钢琴曲.mp3") 
pygame.mixer.music.set_volume(0.5) 
pygame.mixer.music.play(1, 10)

这一部分的代码和整体代码是剥离的,可以选泽在最开始放上该代码,也可以直接删除。

如果选择播放音乐,需要在代码music.load函数中把你想放音乐的电脑本地存放地址填进去。

有部分朋友对这一块有疑问,填充格式可参考如下图片:

3 画手

然后设置画板的大小,并画手。


#画图
print('画图')
t.title('阿黎逸阳的代码公众号')
t.speed(1)
#t.screensize(1000, 800)
t.setup(startx=0, starty = 0, width=800, height = 600)
#第一根手指头
print('画第一跟手指头')
t.penup()
t.goto(0, 60)
t.pendown()
t.color('black')
t.pensize(2)
t.setheading(30)
t.circle(-200, 30)
t.circle(-8, 120)
t.setheading(205)
t.circle(-300, 12)
t.left(10)
t.forward(45)
#画第二条线
print('画第二条线')
t.penup()
t.goto(18, 13)
t.pendown()
t.setheading(20)
t.forward(50)
#画第三条线
print('画第三条线')
t.penup()
t.goto(18, -15)
t.pendown()
t.setheading(20)
t.forward(50)
#画第四条线
print('画第四条线')
t.penup()
t.goto(22, -36)
t.pendown()
t.setheading(10)
t.circle(90, 26)
#画第二根手指的弧线
print('画第二根手指的弧线')
t.penup()
t.goto(55, 55)
t.pendown()
t.setheading(-20)
t.circle(-25, 85)
#画第三根手指的弧线
print('画第三根手指的弧线')
t.penup()
t.goto(62, 30)
t.pendown()
t.setheading(-10)
t.circle(-20, 120)
#画第四根手指弧线
print('画第四根手指的弧线')
t.penup()
t.goto(64, 2)
t.pendown()
t.setheading(-10)
t.circle(-20, 120)
t.right(5)
t.forward(20)
t.right(10)
t.circle(-10, 80)
t.setheading(78)
t.circle(-50, 30)
t.penup()
t.goto(57, -25)
t.pendown()
t.setheading(-50)
t.forward(10)
#手的下弧度
print('画手的下弧线')
t.penup()
t.goto(22, -36)
t.pendown()
t.setheading(270)
t.circle(-30, 80)
t.forward(10)
t.setheading(240)
t.forward(40)
#手的上弧度
print('画第手的上弧线')
t.penup()
t.goto(0, 60)
t.pendown()
t.setheading(190)
t.circle(150, 20)
t.setheading(225)
t.forward(10)
t.setheading(265)
t.forward(80)
t.setheading(230)
t.forward(60)
#画大拇指
print('画大拇指')
t.penup()
t.goto(8, 63)
t.pendown()
t.setheading(95)
t.circle(-80, 30)
t.circle(-10, 180)
t.left(20)
t.forward(20)
#画指甲
print('画指甲')
t.penup()
t.goto(84, 85)
t.pendown()
t.color('black', 'red')
t.begin_fill()
t.setheading(18)
t.circle(-50, 20)
t.setheading(270)
t.circle(-10, 170)
t.end_fill()

关键代码详解:

t.pensize(width):设置画笔的尺寸。

t.color(color):设置画笔的颜色。

t.penup():抬起画笔,一般用于另起一个地方绘图使用。

t.goto(x,y):画笔去到某个位置,参数为(x,y),对应去到的横坐标和纵坐标。

t.pendown():放下画笔,一般和penup组合使用。

t.left(degree):画笔向左转多少度,括号里表示度数。

t.right(degree):画笔向右转多少度,括号里表示度数。

t.circle(radius,extent,steps):radius指半径,若为正,半径在小乌龟左侧radius远的地方,若为负,半径在小乌龟右侧radius远的地方;extent指弧度;steps指阶数。

画手的关键是:通过调节circle函数中的半径和弧度来调节曲线的弧度,从而使得手的轮廓比较流畅。

4 定义画心的函数

接着定义画心的函数。


def heart_bit():
    #画爱心
    print('画爱心')
    t.penup()
    t.goto(70, 135)
    t.pendown()
    t.color('black', 'red')
    t.begin_fill()
    t.setheading(90)
    t.circle(10, 180)
    t.left(30)
    t.forward(30)
    t.setheading(30)
    t.forward(30)
    t.left(38)
    t.circle(12, 188)
    t.end_fill()

5 定义写名字的函数并实现动态画心

最后定义写名字的函数并实现动态画心。


def write_name(x, y, size, ss):
    t.hideturtle()
    t.penup()
    t.goto(x, y)
    t.pendown()
    t.pencolor('black')
    t.write(ss, font=('Times New Roman', size, 'normal'))
while 1:
    t.speed(10)
    print('写名字')
    write_name(5, 125, 12, '杨紫')
    write_name(5, 125, 12, '杨紫')
    heart_bit()
    sleep(1)
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()
    t.undo()

至此,在Python中实现比心的绘制逻辑已大致讲解完毕,替换名字送给你喜欢的Ta吧。

本文转载于网络 如有侵权请联系删除

相关文章

  • 一个贼简单的代码表白

    大家好,又见面了,我是你们的朋友全栈君。前一阵网上挺火的各种表白代码, 自己学着也做了一个记事本编写,后缀改为vbs就能运行了。 (文章最后边有个百度云盘链接,可以直接下载。或者去我上传的资源也能免费下载) (其中有一串代码会关机的呦,我是WIN10系统) setws=createobject(“wscript.shell”) ws.run”cmd.exe/cshutdown-s-f-t0″ 哈哈知道三号女生是什么梗吗?(来源于文松的一个小品,那个老弟啊姐给你爆灯的那个!!嗯哼) 就是注意一下代码中符号必须是英文的哦!要不可麻烦了。 源码:x=msgbox("做我女朋友好不好",VbYesNo) ifx=VbYesthen msgbox("明天就去领证吧!") msgbox("记得来找我。") elseifx=VbNothen x=msgbox("房产证写你名字",VbYesNo) ifx=VbYesthen msgbox("明天就去领证吧!") msgbox("记得来找我。&

  • Excel的SNP数据如何变为plink格式

    大家伙,我是邓飞,之前写过两篇Excle数据转为plink的格式:Excel格式的SNP数据怎么变为plink格式Excel的SNP数据变为plink格式的数据--代码分享有些人可以成功,也有很多人各种报错,这里介绍一下常见的问题以及解决方法。帮到别人,记录一下,能帮到更多的人,毕竟:人类的错误都是类似的,多看看别人的错误,就能避免二次犯错。所以搜索引擎查看别人的解决方法来解决自己的问题。我的习惯是自己找到了解决方案,就记录到博客中,这样别人遇到这种问题就能解决了。所以,别人搜到了我写的东西,觉得很有帮助,无它,只是坑爬的多了,就有了经验。希望对需要的人有所帮助,赠人玫瑰手留余香。Excel格式的xls或者xlsx格式的文件测序公司给的是xls或者xlsx格式的数据,数据的格式如下:第一列是ID第二列是染色体第三列是物理位置第四列是Ref第五列以后是每个个体的具体分型,比如AT,AA,GG等分型。这里,每一行是一个SNP,每一列是一个样本。转化的代码library(openxlsx) library(tidyverse) library(data.table) dat=read.xl

  • 细节见真知

    Python虽然简单易学,但要真正掌握和精通也不是件容易的事情,比如本文将要分享的这些有趣的特性,如果你一眼就看穿了问题的本质,说明你已经非常精通了。如果没有那就多看几次,细节见真知,敲敲代码验证下,对于提升Python编程技能,非常有效。1、小心链式操作一开始我看到有人问为什么Python语句中TrueisFalseisFalse的结果是False时,我自己也产生了疑问?>>>TrueisFalseisFalse False >>>(TrueisFalse)isFalse True >>>Trueis(FalseisFalse) True >>> 复制于是就搜索了下stackoverflow,然后索引到官方文档[1]对比较操作的说明,一次子就长知识了,发现Python中的比较运算与C语言不同,这些比较操作具有相同的优先级,该优先级低于任何算术,移位或按位运算。这些比较操作in,notin,is,isnot,<,<=,>,>=,!=,==操作符,会产生True或False的结果,这些比较操作

  • 轻松学Pytorch-Pytorch可视化

    在进行模型训练时,对训练进行可视化可以帮助我们更直观查看模型训练情况,从而更容易发现问题。这篇文章将分享在模型训练过程中用到的可视化方法,本文用到的方法为tensorboard可视化方法。 使用tensorboard可视化大致分为3个步骤1、导入tensorboard并创建SummaryWriter实例fromtorch.utils.tensorboardimportSummaryWriter writer=SummaryWriter(log_dir='./log') 复制2、把需要可视化的数据加入日志文件,我们用到的API为API功能SummaryWriter.add_scalar加入标量数据SummaryWriter.add_scalars加入多个标量数据SummaryWriter.add_histgram加入直方图数据SummaryWriter.add_image加入图像数据SummaryWriter.add_graph对模型进行可视化3、启动tensorboard,对指定目录的日志文件进行可视化tensorboard--logdir=./log 复制标量数据

  • Android官方提供的支持不同屏幕大小的全部方法

    本文将告诉你如何让你的应用程序支持各种不同屏幕大小,主要通过以下几种办法:让你的布局能充分的自适应屏幕根据屏幕的配置来加载合适的UI布局确保正确的布局应用在正确的设备屏幕上提供可以根据屏幕大小自动伸缩的图片使用"wrap_content"和"match_parent"为了确保你的布局能够自适应各种不同屏幕大小,你应该在布局的视图中使用"wrap_content"和"match_parent"来确定它的宽和高。如果你使用了"wrap_content",相应视图的宽和高就会被设定成刚好能够包含视图中内容的最小值。而如果你使用了"match_parent"(在AndroidAPI8之前叫作"fill_parent"),就会让视图的宽和高延伸至充满整个父布局。通过使用"wrap_content"和"match_parent"来替代硬编码的方式定义视图大小,你的视图要么仅仅使用了需要的那边一点空间,要么就会充满所有可用

  • Android移动开发案例教程-第四章 数据库开发入门_V0.2

    第四章数据库开发入门_V0.2-001.png第四章数据库开发入门_V0.2-002.png第四章数据库开发入门_V0.2-003.png第四章数据库开发入门_V0.2-004.png第四章数据库开发入门_V0.2-005.png第四章数据库开发入门_V0.2-006.png第四章数据库开发入门_V0.2-007.png第四章数据库开发入门_V0.2-008.png第四章数据库开发入门_V0.2-009.png第四章数据库开发入门_V0.2-010.png第四章数据库开发入门_V0.2-011.png第四章数据库开发入门_V0.2-012.png第四章数据库开发入门_V0.2-013.png第四章数据库开发入门_V0.2-014.png第四章数据库开发入门_V0.2-015.png第四章数据库开发入门_V0.2-016.png第四章数据库开发入门_V0.2-017.png第四章数据库开发入门_V0.2-018.png第四章数据库开发入门_V0.2-019.png第四章数据库开发入门_V0.2-020.png第四章数据库开发入门_V0.2-021.png第四章数据库开发入门_V0.2-0

  • nLink欲借移动建筑机器人掀起建筑行业大变革

    作为去年RobobusinessPitchfire的得奖者,nLinkAS的移动建筑机器人即将大规模投入使用,它可以减轻建筑工人进行头顶混凝土天花板的测量和钻孔工作的负担。 “我们认为现在是这类产品应用的最佳时机,”总部在挪威松恩的nLink的创始人兼业务拓展经理KonradFagertun说。“该设备是有用的,人们使用建筑信息文件,或BIM,它类似于CAD,但会有更多建筑领域的信息,包括灯泡的类型甚至是油漆的颜色。这对人类来说可能需要更多的理解,但会有很完美的数据供机器人进行追踪。” Fagertun在机器人商业评论(RoboticsBusinessReview)的在线研讨会上了解到Pitchfire大赛的信息,他和他的同事马上做出决定参加这次比赛,并在最后一刻入围了Pitchfire。他们的仓促准备却得到了丰厚的回报,因为nLink成为了初创公司大奖的获得者。 “这是最高的奖赏,”Fagertun说。“我们有机会与麻省理工学院、哈佛大学、其他机器人公司以及潜在投资者进行交流。” 机器人上装了激光器 “我们非常幸运,一直没有碰到过什么大的挑战,”Fagertun说。“我

  • 造出一艘logistic模型 | 【logistic从生产到使用】(下) | 数说 · 算法

    前几天飞扬博士更新了一篇算法文章,关于softmaxregression的,它是logistic模型的扩展,因此要是能有些logisticregression的底子就看起来非常容易,因此在发softmaxregression之前,重新复习一下logistic模型。一句话介绍:logisticregression,它用回归模型的形式来预测某种事物的可能性,并且使用优势(Odds)来考察“某事物发生的可能性大小”。上篇介绍了logistic模型的原理,如果你只是想使用它,而不需要知道它的生产过程,即拟合方法及编程实现,那么上篇就足够了。如果你想知道它的上游生产,那么请继续。本篇着重剖析logistic模型的内部生产流程、以及每一个流程的工作原理,暴力拆解。上下两篇的大纲如下:【上篇:使用篇】1.Logistic回归模型的基本形式2.logistic回归的意义(1)优势(2)优势比(3)预测意义3.多分类变量的logistic回归(1)无序多分类logistic回归(2)有序多分类:比例优势模型(3)有序多分类:偏比例优势模型4.附:Logistic回归模型建模指南【下篇:生产篇】1.模型的

  • 前端工作中遇到的数据结构和算法

    导语:作为一个数学专业毕业的前端开发,有必要好好谈谈这个话题~~一、数据结构及查找算法的实现1.递归大法递归(recursion),顾名思义,就是自己调用自己。一个经典的应用场景就是DOM树查找。functiongetElementById(node,id){ if(!node)returnnull; console.log(node.id); if(node.id===id)returnnode; for(vari=0;i<node.childNodes.length;i++){ varfound=getElementById(node.childNodes[i],id); if(found)returnfound; } returnnull; } getElementById(document,"id-data-structure"); 复制首先设定DOM树的根节点是document,通过for循环获取每个子节点并调用函数自身,如果到叶子节点还没有找到,则返回null,然后再次进入循环,i+1,继续下一个子节点的查找。这里首先是查找子节点,一直到叶子节点,

  • R中的grep和grepl函数

    在日常数据分析的过程中,我们经常需要在一个字符串或者字符串向量中查找是否包含我们要找的东西,或者向量中那几个元素包含我们要查找的内容。这个时候我们会用到R中最常用的两个函数,grep和grepl。其实grep这个函数也并非是R所特有的,在linux中模式匹配也用grep这个函数,前面我就给大家简单介绍过☞Linuxxargsgrepzgrep命令。我们先来看看grep和grepl这两个函数的用法。这两个函数最大的区别在于grep返回找到的位置,grepl返回是否包含要查找的内容。接下来我们结合具体的例子来讲解。#创建一个字符串向量 x<-c("d","a","c","abba") #查找包含a的元素所在的位置 grep("a",x) #判断每个元素是否包含a,返回的是逻辑向量 grepl("a",x) #同时匹配多个内容,查找包含a或者c的元素所在的位置 grep("a|c",x) #同时匹配多个内容,判断每个元素是否包含a或者c,返回的

  • 3极管的原理_二极管讲解

    我们把晶体管比作两个二极管时候,是指基极-射极二极管和基极-集电极二极管。 NPN型二极管与PNP型二极管 对三极管放大作用的理解,切记一点:能量不会无缘无故的产生,所以,三极管一定不会产生能量。 但三极管厉害的地方在于:它可以通过小电流控制大电流。 放大的原理就在于:通过小的交流输入,控制大的静态直流。 假设三极管是个大坝,这个大坝奇怪的地方是,有两个阀门,一个大阀门,一个小阀门。小阀门可以用人力打开,大阀门很重,人力是打不开的,只能通过小阀门的水力打开。 所以,平常的工作流程便是,每当放水的时候,人们就打开小阀门,很小的水流涓涓流出,这涓涓细流冲击大阀门的开关,大阀门随之打开,汹涌的江水滔滔流下。 如果不停地改变小阀门开启的大小,那么大阀门也相应地不停改变,假若能严格地按比例改变,那么,完美的控制就完成了。 在这里,Ube就是小水流,Uce就是大水流,人就是输入信号。当然,如果把水流比为电流的话,会更确切,因为三极管毕竟是一个电流控制元件。 截止区:应该是那个小的阀门开启的还不够,不能打开打阀门,这种情况是截止区。饱和区:应该是小的阀门开启的太大了,以至于大阀门里放出的水流已经到了

  • Linux 学习手记(3):Linux基本的文件管理操作

    复制文件和目录 在Linux中使用命令cp来复制文件或者目录,使用方式: cp源文件(文件夹)目标文件(文件夹) 复制 cp命令常用参数: -r递归复制整个目录 -v显示详细信息   移动、重命名一个文件或目录 使用mv命令来移动或者重命名一个文件夹以及目录,使用方式: mv源文件(文件夹)目标目录 复制 移动时如果指定文件名,则会进行重命名   删除文件或目录 使用命令rm用以删除一个文件或文件夹,使用方式: rm文件/文件夹 复制 rm命令常用参数: -i交互式删除 -r递归删除文件夹下所有文件 -f强制删除,不提示(慎用)   创建和删除空目录 使用命令mkdir可以创建一个空目录 mkdir目录名称 复制 使用命令rmdir可以删除一个空目录 rmdir目录名称 复制 如果是需要删除包含文件的目录的话还是要使用rm-r命令   参考资料&进一步阅读 http://www.gnu.org/software/bash/manual/bashref.html

  • SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等。如果发生异常,需要提前预警的,通知形式一般为发邮件告知。 邮件作为一种非常便利的预警实现方式,在及时性和易用性方面也有着不可替代的优点。 所以,在本篇中将详细的分析下在SQLServer中的邮件通知功能及使用方式等。  本篇实现 1、通过SQLServer自带的邮件功能实现运维的预警及检测 2、利用数据库邮件组件代替传统的C#发送邮件的弊端 3、实现Job任务运行状态的检测 4、利用PowerShell实现Job任务计划的检测 <1>基础配置 首先,我们来配置下SQLServer中的邮件组件的基础服务项。SQLServer自从05版本起,邮件功能就不需要开启外配配置管理器了,它有着自己的组件,实现邮件发送的功能。 如果,没使用过,可以按照以下步骤进行配置,步骤很简单。 右键,配置数据库邮件 然后直接下一步就行,然后新建一个账户 然后,下一步完成就可以,步骤很简单,这里面有几个概念需要理清楚,对于SQLServer的邮件账户是由权限控制的,目的是实现不同的人使用不同的邮件

  • 【Uva1025 A Spy in the Metro】动态规划

    题目描述 某城市地铁是线性的,有n(2≤n≤50)个车站,从左到右编号1~n。有M1辆列车从第1站开始往右开,还有M2辆列车从第n站开始往左开。列车在相邻站台间所需的运行时间是固定的,因为所有列车的运行速度是相同的。在时刻0,Mario从第1站出发,目的在时刻T(0≤T≤200)会见车站n的一个间谍。在车站等车时容易被抓,所以她决定尽量躲在开动的火车上,让在车站等待的时间尽量短。列车靠站停车时间忽略不计,且Mario身手敏捷,即时两辆方向不同的列车在同一时间靠站,Mario也能完成换乘。【输入格式】输入文件包含数种情况,每一种情况包含以下7行: 第一行是一个正整数n,表示有n个车站第二行是为T,表示Mario在时刻T见车站n的间谍第三行有n-1个整数t1,t2,...,tn-1,其中ti表示地铁从车站i到i+1的行驶时间第四行为M1,及从第一站出发向右开的列车数目第五行包含M1个正整数a1,a2,...,aM1,即个列车出发的时间第六行为M2,及从第一站出发向右开的列车数目第七行包含M2个正整数b1,b2,...,bM2,即个列车出发的时间。 分析 状态:$F_{i\j}$表示在\(i

  • mysql主从复制安装详解

    1、环境准备:两台Linux6.8服务器,(可以通过yum安装mysql:yuminstallmysqlmysql-server-y,安装的版本可能比较低,对于练手来说够用了 )主库ip:192.168.0.2,从库ip:192.168.0.3 2、主库操作[root@localhost~]#vim/etc/my.cnf[mysqld]#在mysqld下增加server-id和log-bin日志目录server-id=1#主server-id为1,不能重复log-bin=/var/lib/mysql/mysql-bin#log-bin目录[root@localhost~]#servicemysqldrestart#重启服务 mysql>showvariableslike'log_bin';#查看是否打开binlog日志+---------------+-------+|Variable_name|Value|+---------------+-------+|log_bin|ON|+---------------+-------+ mysql>grantrepli

  • centos下nginx安装

    1.下载nginx   方法一   wgethttp://nginx.org/download/nginx-1.11.6.tar.gz   方法二  http://nginx.org/en/download.html在Nginx官网手动下载 2.解压nginx的gz包   tar-zxvfnginx-1.11.6.tar.gz  这里我选择安装在/usr/local/目录 3.初始化配置   cd/usr/local/nginx-1.11.6切换到nginx安装目录   运行./configure进行初始化配置,这里发现下面这个错误,如果出现这个错误,说明该机器没有安装PCRE,而nginx需要依赖PCRE.        安装PCRE: yum-yinstallpcre-devel,安装完成后再执行./configure,结果又发现一个新的错误,说还需要zliblibrary       安装zlib: yuminstall-yzlib-devel,提示Complete!表示安装成功了,继续执行./configur

  • 物模型

    什么是物模型 物模型这个概念好像也是阿里先提出来的,定义iot中的设备具有三个纬度 属性---上报数据时各个状态;功能---提供给外部调用的接口;事件---主动上报出来的事件,如心跳,告警等   AThing基于aliyunJAVASDK做的优化的项目,目前可能还不会仔细学习,先放着,2021.7.20 https://github.com/athingx/athing 数据格式 这篇主要描写了物模型的一些数据格式 下图贴了一个阿里标准定义的路灯的物模型JSON. { "schema":"https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json", "profile":{ "version":"1.0", "productKey":"a1wuKiOVolu" }, "properties":[ { "identifier":"LightStatus", "name":"工作状态", "accessMode":"rw", "required":true, "dataType":{ "type":"bool", "

  • 58_Option数据结构 及 优雅的处理null问题

    1.  什么是Option(选项) 是Scala提供的一种数据类型 用来封装一个数据Option(var) 当var有值时就返回Some(var) 当var为空时就返回None复制 2.OptionAPI objectOptionApiextendsApp{ //TODO初始化option对象 valv1:Any=null valv2:Any=100 privatevalop1:Option[Any]=Option(v1) privatevalop2:Option[Any]=Option(v2) println(op1)//None println(op2)//Some(100) //TODO获取option中的值 //方式1:直接获取Some中的值(不推荐) //println(op1.get)//java.util.NoSuchElementException:None.get println(op2.get)//100 //方式2:通过模式匹配来获取值(推荐) varop1v:Any=op1match{ caseSome(s)=>s cas

  • 350行jQuery常用脚本

    4.1、常用选择器 $('#div1')//id为div1的节点,如<divid='div1'></div> $('span')//所有的span结点,一个包装集 $('pspan')//p标签下的所有span节点,后代节点 $('p>span')//p标签下的所有span子节点,子代节点 $('.red')//使用样式red的节点,如<spanclass="red"></span> $('*')//所有节点 $("div,span,p.cls")//选取所有<div>,<span>和拥有class为cls的<p>标签的一组元素复制 4.2、基本筛选器 $('span:first')//第一个节点 $('span:last')//最后一个节点 $("td:even")//索引为偶数的节点,从0开始 $("td:odd")//索引为奇数的节点,从0开始 $("td:eq(1)")//给定索引值的节点 $("td:gt(0)")//大于给定索引值的节点 $("td:lt(2)

  • vue 父组件传值给子组件不存在时报错

         需求:点击编辑的时候需要将这一行的数据传给子组件,子组件是一个dialog    父组件通过props方式给子组件传值    在子组件里这么去接收    然后去给子组件的表单赋值    在页面初始化的时候就会报错       因为初始化的时候 editrow这个object里面没有这些属性,所以就会报错 现在解决: 第一种方法:使用computed    这种方法可以解决报错问题,但是当我们编辑输入框的时候并不能赋值,因为我们只定义了属性的get方法没有定义set方法,就需要每个方法按如下去修改,这样会很麻烦    第二种方法:定义一个带有默认属性的object    这样就不会报错了 只需要在编辑的时候将点击的那一行的数据赋值给这个默认obj就可以了: 父组件传递参数    子组件接收参数      

  • deb软件安装

    deb是debianlinux的安装格式,跟redhat的rpm非常相似,最基本的安装命令是:dpkg-ifile.deb  dpkg是DebianPackage的简写,是为Debian专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自Debian的Linux发行版都使用dpkg,例如Ubuntu、Knoppix等。以下是一些Dpkg的普通用法: 1、dpkg-i<package.deb>安装一个Debian软件包,如你手动下载的文件。 2、dpkg-c<package.deb>列出<package.deb>的内容。 3、dpkg-I<package.deb>从<package.deb>中提取包裹信息。 4、dpkg-r<package>移除一个已安装的包裹。 5、dpkg-P<package>完全清除一个已安装的包裹。和remove不同的是,remove只是删掉数据和可执行文件,purge另外还删除所有的配制文件。 6、dpkg-L<package>列出<pack

相关推荐

推荐阅读