ZJK的黑OJ(树的最大独立集)(树形DP)美高梅娱乐4858.com

1.1 编程与编制程序语言

ZJK的黑OJ
zjk开了一家“善良OJ”。那实际是家黑OJ。每AC一道题,网站便会自动在电脑上设置一种木马。zjk通过窃取音信得到收入(如网游帐号、OI资料、和KK的肖像等等)。
作为一名有名黑客,老Z某日突然意识,“善良OJ”上的木马,自个儿电脑上都并未。那可那3个让她过意不去。老Z决定通过多A题,来丰硕友好电脑的病毒库。
通过调查,老Z发现,很多木马是不能够存活的。比如“和谐”木马与“团结”木马,两者只能任选其一。然则,老Z是个完美主义者,他想要本人的病毒库尽恐怕扩充。
老Z不懈的言情最后打动了上天。天上的神仙lemon给那个题材稍稍下滑了有些难度。神仙规定,对于n种木马,有且仅有(n-1)对无法存活,并且对于每个木马,都存在至少1个木马与之无法存活。
老Z不在乎自个儿AC多少题。请报告她,他最多能从“善良OJ”上取得木马的个数。
【输入】
率先行,贰个正整数n,表示木马个数。
结余(n-1)行,每行一对木马,表示他们无法存活。(保险同一的木马可(英文名:mǎ kě)以共存,任意分化两行的描述不等价)
木马编号从0至(n-1)
【输入】
一行,老Z最多收获木马的个数。你能够认为先导时髦未别的木马。
【输入样例】
3
0 1
1 2
【输出样例】
2
【数据规模】
对于100%的数据,1<=n<=200

1.1.1 编制程序语言

处理器的注脚,是为着用机器解放人力,而编制程序的指标则是将人类的探讨流程遵照某种能够被电脑识其他表明形式传递给电脑,从而达成让电脑可以像人脑一样自动执行的功能。

编制程序即程序员依照须要把本人的思索流程遵照某种编制程序语言的语法风格编写下来,产出的结果就是含有一堆字符的公文。

可见被电脑所识别的表明形式即编制程序语言,语言是联系的介质,而编程语言是程序员与电脑交流的介质。在编制程序的社会风气里,总计机更像是人的奴隶,人类编制程序的指标就吩咐奴隶去干活。

/*
不建树.
用链表搞.
双向建边. 
只需要判断father和son是否一样. 
然后裸的树上最大独立集.
用树形DP搞. 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 1001
using namespace std;
int tot,fa[MAXN][3],w[MAXN],head[MAXN],n;
struct data
{
    int v,next,x;
}e[MAXN];
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
    return x*f;
}
void add(int u,int v)
{
    e[++tot].v=v;
    e[tot].next=head[u];
    head[u]=tot;
}
void dfs(int father,int u)
{
    for(int i=head[u];i;i=e[i].next)
    {
        int v=e[i].v;
        if(v==father) continue;
        dfs(u,v);
        fa[u][0]+=max(fa[v][0],fa[v][1]);
        fa[u][1]+=fa[v][0];
    }
}
int main()
{

    int x,y;
    n=read();
    for(int i=1;i<=n;i++) fa[i][1]=1;
    for(int i=1;i<n;i++)
    {
        x=read();y=read();
        x++;y++;
        add(x,y);add(y,x);
    }
    dfs(0,1);
    printf("%d\n",max(fa[1][0],fa[1][1]));
    return 0;
}

/*
先建树.
不然没法确定点的关系.
然后裸的树上最大独立集.
用树形DP搞. 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 1001
using namespace std;
int tot,fa[MAXN][3],w[MAXN],head[MAXN],father[MAXN],son[MAXN][MAXN],n;
struct data
{
    int v,next,x;
}e[MAXN];
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
    return x*f;
}
void add(int u,int v)
{
    e[++tot].v=v;
    e[tot].next=head[u];
    head[u]=tot;
}
void build(int x)
{
    for(int i=head[x];i;i=e[i].next)
    {
        int t=e[i].v;
        if(!father[t])
        {
            father[t]=x;
            son[x][++son[x][0]]=t;
            build(t);
        }
    }
}
void dfs(int u)
{
    if(fa[u][1])return;
    fa[u][1]=1;
    for(int i=1;i<=son[u][0];i++)
    {
        int v=son[u][i];
        dfs(v);
        fa[u][0]+=max(fa[v][0],fa[v][1]);
        fa[u][1]+=fa[v][0];
    }
}
int main()
{

    int x,y;
    n=read();
    for(int i=1;i<n;i++)
    {
        x=read();y=read();
        x++;y++;
        add(x,y);
        add(y,x);
    }
    father[1]=1;
    build(1);
    dfs(1);
    printf("%d\n",max(fa[1][0],fa[1][1]));
    return 0;
}

1.1.1.1  机器语言

出于总计机内部只好接受二进制代码,由此,用二进制代码0和1描述的下令称为机器指令,全体机器指令的会晤构成总计机的机器语言,用机器语言编制程序的次第名为指标程序。唯有指标程序才能被电脑直接识别和履行。不过机器语言编写的顺序无强烈特点,难以回想,不便阅读和书写,且依赖于现实机种,局限性非常的大,机器语言属于低级语言。

 

1.1.1.2  汇编语言

汇编语言的真面目和机器语言是一律的,都是间接对硬件操作,只可是指令采纳了英文缩写的标识符,更便于辨认和回忆。它同样供给编制程序者将每一步具体的操成效命令的格局写出来。汇编制程序序的每一句发号施令只好对应实操进程中的3个很微小的动作。例如移动、自增,由此汇编源程序一般相比较冗长、复杂、不难出错,而且动用汇编语言编制程序供给有越多的电脑专业知识,但汇编语言的独到之处也是有目共睹的,用汇编语言研商所能达成的操作不是一般高级语言探究所可以落实的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行进度非常快。

1.1.1.3  高级语言

高级语言是超越十分之五编制程序者的选用。和汇编语言相比较,它不但将许多息息相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与成功工作非亲非故的细节,例如利用堆栈、寄存器等,那样就大大简化了程序中的指令。同时,由于省略了成都百货上千细节,编制程序者也就不须求有太多的专业知识。

高等语言主假使对峙于汇编语言而言,它并不是特指某一种具体的语言,而是席卷了很多编制程序语言,像最简单易行的编制程序语言PASCAL语言也属于高级语言。

高等语言钻探所编纂的程序不能够一向被电脑识别,必须通过转换才能被实施,按转换情势可将它们分为两类:

  • 编写翻译类:编写翻译是指在应用源程序执行在此以前,就将程序源代码“翻译”成靶子代码(机器语言),由此其目的程序能够脱离其语言环境独立执行(编译后生成的可执行文件,是cpu能够清楚的2进制的机器码组成的),使用比较有利、功效较高。但应用程序一旦需求修改,必须先修改源代码,再重复编写翻译生成新的目的文件(*
    .obj,也正是OBJ文件)才能实施,唯有指标文件而从未源代码,修改很不便利。

编写翻译后程序运转时不供给重新翻译,直接选择编写翻译的结果就行了。程序执行作用高,依赖编写翻译器,跨平台性差些。如C、C++、Delphi等

  • 诠释类:执行措施接近于大家平常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成靶子代码(机器语言),一边实践,因而功效比较低,而且不能够生成可独立执行的可执行文件,应用程序不可能脱离其解释器(想运营,必须先装上解释器,就如跟老外说话,必须有翻译在场),但这种措施相比灵敏,能够动态地调动、修改应用程序。如Python、Java、PHP、Ruby等语言。

瞩目:程序在未运转前跟普通文书一律,唯有程序在运维时,文件内所写的字符才有特定的语法意义 

编制程序的言语的开拓进取经历了机器语言,汇编语言,高级语言的提高,种种阶段具有以下特点:

  • 机器语言:站在电脑(奴隶)的角度,说电脑能听懂的语言,那正是直接用二进制编制程序,直接操作硬件。
  • 汇编语言:站在微型总结机(奴隶)的角度,简写的英文标识符取代二进制去编写程序,本质依旧是直接操作硬件。
  • 尖端语言:站在人(奴隶主)的角度,说人话,即用人类的字符去编写程序,屏蔽了硬件操作。

高等语言更靠近人类语言,因此导致了:它必须被翻译成总括机能读懂二进制后,才能被实施,依据翻译格局分为:

  1. 编写翻译型(须要编写翻译器,也就是用谷歌(谷歌(Google))翻译):如C,执行进程快,调节和测试麻烦。
  2. 解释型(须要解释器,相当于同声传译):如python,执行过程慢,调节和测试方便。

美高梅娱乐4858.com 1

 

 

图1-1  

1.1.2 语言特点

1.1.2.1  机器语言

l  优点是最底部,执行过程最快

l  缺点是最复杂,开发效用最低

 

1.1.2.2  汇编语言

l  优点是比较底层,执行进度最快

l  缺点是繁体,开发功效最低

 

1.1.2.3  高级语言

l  编写翻译型语言执行进程快,不注重语言环境运转,跨平台差

l  解释型跨平台好,一份代码,到处使用,缺点是实施进程慢,依赖解释器运转

小心:以上两种语言

读书难度:机器语言  > 汇编语言 > 高级语言

进行成效:机器语言  > 汇编语言  > 高级语言

开发功用:机器语言  < 汇编语言  < 高级语言

速度不是根本(瓶颈理论),开发成效高才是王道

 

1.2 主流编制程序语言介绍

世界上的编程语言有600二种,但实在大家主流在接纳的最多二三十种,不相同的言语有投机的性情和善于领域,随着计算机的源源不断前行,新语言在相连诞生,也同时有许多老旧的语言渐渐无人用了。有个高于的言语排名网站,能够见见主流的编制程序语言是如何

2017年5月数据(https://www.tiobe.com/tiobe-index/ )

 美高梅娱乐4858.com 2

 

图1-2  

悠长语言排名

美高梅娱乐4858.com 3

 

 

图1-3  

1.2.1 C语言:

C语言是一种总括机程序设计语言,它既拥有高级语言的风味,又独具汇编语言的表征。它由美利坚合众国贝尔商讨所的D.M.Ritchie于一九七二年出产,1977年后,C语言已先后被移植到大、中、小及微型机上,它能够看成工作系统规划语言,编写系统应用程序,也得以看做应用程序设计语言,编写不信赖计算机硬件的应用程序。它的行使范围广阔,具备很强的多少处理能力,不仅仅是在软件开发上,而且各项科学研商都供给用到C语言,适于编写系统软件,三维,二维图形和动画,具体选用比如单片机以及嵌入式系统开发。

 

1.2.2 C++:

C++是C语言的持续的壮大,它既能够拓展C语言的进程化程序设计,又足以举办以抽象数据类型为特点的依照对象的主次设计,还足以开始展览以再而三和多态为特征的面向对象的次序设计。C++擅长面向对象程序设计的还要,还足以拓展基于进度的程序设计,由此C++就适应的题材规模而论,大小由之。

C++不仅全体电脑高效运作的实用性特征,同时还从事于增长广大程序的编制程序品质与程序设计语言的标题讲述能力。

 

1.2.3 JAVA:

Java是一种能够编写跨平台运用软件的面向对象的次序设计语言,是由Sun
索泰公司于一九九四年七月生产的Java程序设计语言和Java平台(即JavaSE,
JavaEE, JavaME)的总称。Java
技术具有至高无上的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据大旨、游戏控制台、科学拔尖总结机、移动电话和互连网,同时全体整个世界最大的开发者专业社会群众体育。在中外云总括和平运动动互连网的家当条件下,Java更富有了路人皆知优势和广泛前景。

 

1.2.4 PHP:

PHP(外文名:PHP: Hypertext
Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的表征,利于学习,使用大规模,首要适用于Web开发领域

1.2.5 Ruby:

Ruby 是开源的,在Web 上免费提供,但要求2个许可证。[4]

Ruby 是一种通用的、解释的编制程序语言。

Ruby 是一种真正的面向对象编程语言。

Ruby 是一种恍若于 Python 和 Perl 的劳动器端脚本语言。

Ruby 能够用来编排通用网关接口(CGI)脚本。

Ruby 能够被停放到超文本标记语言(HTML)。

Ruby 语法简单,那使得新的开发人士可以一点也不慢轻松地上学 Ruby

 

1.2.6 GO:

Go 是四个开源的编制程序语言,它能让组织不难、可信且极快的软件变得容易。

Go是从2005年末由罗Bert Griesemer, 罗布 Pike, Ken
汤普森主持开发,后来还参与了Ian 兰斯 Taylor, RussCox等人,并最后于二〇〇八年八月开源,在二零一一年早些时候发表了Go
1稳定版本。以往Go的付出已经是一点一滴开放的,并且有着二个活蹦乱跳的社区。

由其擅长并发编制程序

 

1.2.7 Python:

Python是一门优异的汇总语言,
Python的宗旨是可想而知、优雅、强大,在人工智能、云总括、金融分析、大数额开发、WEB开发、自动化运行、测试等倾向使用广泛,已是全世界第⑥大最流行的语言。

 

1.3 python介绍

1.3.1 关于Python

python的创办者为吉多·范罗苏姆(吉多 van
Rossum)。壹玖捌捌年的圣诞节之间,吉多开始写能够分解Python语言语法的解释器。Python那几个名字,来自吉多所挚爱的电视机剧Monty
Python’s Flying
Circus。他希望这些新的称之为Python的言语,能适合他的佳绩:创设一种C和shell之间,作用完善,易学易用,可进行的言语。

   最新的TIOBE排行榜,Python赶上并超过PHP占据第⑤,
Python崇尚精彩、清晰、简单,是多个名特别减价并大面积选择的言语。

Python能够动用于广大世界,如:数据解析、组件集成、网络服务、图像处理、数值总括和科学总括等居多天地。如今正式差不离全体大中型网络集团都在应用Python,如:Youtube、Dropbox、BT、Quora(中华夏族民共和国博客园)、豆瓣、新浪、谷歌(Google)、Yahoo!、Instagram、NASA、百度、腾讯、汽车之家、美团等。

1.3.2 方今Python首要应用领域

  1. WEB开发——最火的Python web框架Django,
    支持异步高并发的Tornado框架,短小精悍的flask,bottle,
    Django官方的口号把Django定义为the framework for perfectionist with
    deadlines(马虎是二个为完全主义者开发的高功能web框架)

  2. 网络编制程序——援助高产出的Twisted互连网框架,
    py3引入的asyncio使异步编制程序变的十分不难

3.
爬虫——爬虫领域,Python大致是霸主地位,Scrapy\Request\BeautifuSoap\urllib等,想爬啥就爬啥

4.
云计算——近期最火最显赫的云总括框架正是OpenStack,Python今后的火,非常的大片段便是因为云计算

  1. 事在人为智能——何人会成为AI
    和大数量时代的率先开销语言?那本已是三个不需求争辨的难题。假若说三年前,Matlab、Scala、冠道、Java

    Python还各有机遇,局面尚且不知晓,那么三年之后,趋势已经卓殊鲜明了,特别是前两日Instagram(TWT中华V.US) 开源了 PyTorch 之后,Python 作为 AI
    时期头牌语言的岗位基本建立,今后的悬念仅仅是哪个人能坐稳第②把交椅。

6.
自动化运转——问问中中原人民共和国的种种运行职员,运营职员必须会的言语是如何?10私人住房相信会给你一个一如既往的答案,它的名字叫Python

7.
金融分析——小编个人此前在金融行业,10年的时候,大家集团写的诸多分析程序、高频交易软件正是用的Python,到当前,Python是金融分析、量化交易领域里用的最多的言语

  1. 毋庸置疑运算——
    你知道么,97年启幕,NASA就在大方应用Python在进展各样繁复的不利运算,随着NumPy,
    SciPy, Matplotlib, Enthought
    librarys等许多程序库的支付,使的Python越来越适合于做科学计算、绘制高品质的2D和3D图像。和科学总括领域最风靡的商业软件Matlab比较,Python是一门通用的顺序设计语言,比Matlab所采取的脚本语言的使用范围更宽广

  2. 游戏开发——在网络游戏开发中Python也有广大接纳。相比较Lua or C++,Python
    比 Lua 有更高阶的虚幻能力,能够用更少的代码描述游戏业务逻辑,与 Lua
    相比较,Python 更合乎当作一种 Host 语言,即程序的入口点是在 Python
    那一端会相比好,然后用 C/C++ 在卓殊须要的时候写一些扩展。Python
    相当适合编写 1 万行以上的项目,而且可以很好地把网游项指标框框控制在 10
    万行代码以内。其它据作者所知,著名的玩乐<文明> 正是用Python写的

1.3.3 Python在局地商家的选拔

谷歌(Google):谷歌 App Engine 、code.google.com 、谷歌 earth
、谷歌(谷歌(Google))爬虫、谷歌广告等类型都在大方选用Python开发

CIA: United States中情局网站就是用Python开发的

NASA: U.S.A.航天局(NASA)大批量选用Python进行多少解析和运算

YouTube:世界上最大的录像网站YouTube正是用Python开发的

Dropbox:美利哥最大的在线云存款和储蓄网站,全体用Python实现,每日网站拍卖10亿个公文的上传和下载

照片墙:美利坚同车笠之盟最大的图形分享社交网站,每一日超越3千万张相片被分享,全体用python开发

推文(Tweet):大量的基础库均通过Python达成的

Redhat: 世界上最盛行的Linux发行版本中的yum包管理工科具正是用python开发的

豆瓣: 公司大约全部的工作均是由此Python开发的

腾讯网: 国内最大的问答社区,通过Python开发(海外Quora)

春雨医务人士:国内老牌的在线医疗网站是用Python开发的

除上边之外,还有天涯论坛、金山、腾讯、盛大、搜狐、百度、Ali、淘宝、土豆、腾讯网、果壳等集团都在接纳Python实现各个种种的职责。

1.3.4 Python(解释器)的发展史

一九八九年,吉多开头写Python语言的编写翻译器。

 一九九四年,第3个Python编写翻译器诞生。它是用C语言达成的,并能够调用C语言的库文件。从一出世,Python已经持有了:类,函数,十分处理,包罗表和词典在内的基本数据类型,以及模块为底蕴的展开系统。

Granddaddy of Python web frameworks, Zope 1 was released in 1999

Python 1.0 – January 1994 增加了 lambda, map, filter and reduce.

Python 2.0 – October 16,
三千,参加了内部存款和储蓄器回收机制,构成了今日Python语言框架的功底

Python 2.4 – November 30, 二零零四, 同年近年来最盛行的WEB框架Django 诞生

Python 2.5 – September 19, 2006

Python 2.6 – October 1, 2008

Python 2.7 – July 3, 2010

In November 2014, it was announced that Python 2.7 would be supported
until 2020, and reaffirmed that there would be no 2.8 release as users
were expected to move to Python 3.4+ as soon as possible

Python 3.0 – December 3, 二零零六 (那里要说西魏楚
为啥08年就出3.0,二零零六年反而又推出了2.7?是因为3.0不向下包容2.0,导致大家都推辞升级3.0,无奈官方不得不生产2.7连片版本)

Python 3.1 – June 27, 2009

Python 3.2 – February 20, 2011

Python 3.3 – September 29, 2012

Python 3.4 – March 16, 2014

Python 3.5 – September 13, 2015

Python 3.6 – 2016-12-23 发布python3.6.0版

1.3.5 Pyhton的发展前景

果壳网上有一篇作品,问Python今后10年的发展前景,亚历克斯强烈要求我报告你们去看望她的答问

前程十年Python的前景会什么?
https://www.zhihu.com/question/22112542/answer/166053516

1.3.6 Python 有怎么样项目?

我们将来知道了Python是一门解释型语言,代码想运维,必须透过解释器执行,Python的解释器自个儿也能够看作是个程序(翻译官司是哪国人不首要),这几个程序是什么样语言开发的吧?
答案是少数种语言? what?
因为Python有一些种解释器,分别依据差别语言开发,每种解释器特点各异,但都能健康运作大家的Python代码,上边分别来看下:

1.3.6.1  CPython:

CPython是应用最广且被的Python解释器。本学科以CPython为准。

当大家从Python官方网站下载并设置好Python
2.7后,大家就直接拿走了一个法定版本的解释器:CPython。那些解释器是用C语言开发的,所以叫CPython。在指令行下运维python正是开发银行CPython解释器。

 

1.3.6.2  IPython

IPython是依据CPython之上的三个交互式解释器,约等于说,IPython只是在交互方式上存有增强,可是进行Python代码的职能和CPython是一点一滴等同的。好比许多进口浏览器固然外观分歧,但基础其实都以调用了IE。

CPython用>>>作为提醒符,而IPython用In [序号]:作为提醒符。

 

1.3.6.3  PyPy

PyPy是另八个Python解释器,它的对象是进行进程。PyPy选取JIT技术,对Python代码进行动态编写翻译(注意不是演讲),所以可以明显升高Python代码的履行进程。

多方Python代码都足以在PyPy下运转,可是PyPy和CPython有一部分是不一致的,那就导致相同的Python代码在二种解释器下执行可能会有两样的结果。假使您的代码要放权PyPy下举办,就供给通晓PyPy和CPython的差异点。

 

1.3.6.4  Jython

Jython是运作在Java平台上的Python解释器,能够直接把Python代码编写翻译成Java字节码执行。

 

1.3.6.5  IronPython

IronPython和Jython类似,只然而IronPython是运转在微软.Net平台上的Python解释器,能够一向把Python代码编译成.Net的字节码。

 

1.3.7 Python 2 or Python 3

脚下就算标准很多商家还在大批量行使Python2.6 or
2.7,因为旧项目几八千0居然上百万行的代码想火速进步到3.0不是件不难的事,但是大家在开发新项目时大约都会选取3.x。

其它Python3
确实想比2.x做了过多的更正,直观点来讲,就如从XP升级到Win7的感觉到一样,棒棒的。

Py2 和Py3的实际细节分裂大家在以往课程中会稳步浓密。

1.4 安装python解释器

Python近期已支持具有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows系统上要求设置一下,超简单

打开官网 https://www.python.org/downloads/windows/

美高梅娱乐4858.com 4

 

 

图1-4  

先安装python2

 美高梅娱乐4858.com 5

 

图1-5  

再安装python3

 

美高梅娱乐4858.com 6

 

 

图-6  

测试安装是还是不是中标

windows –> 运行 –> 输入cmd
,然后回车,弹出cmd程序,输入python,假设能跻身互相环境 ,代表安装成功。

多版本共存

在意:在设置目录下找到python.exe,拷贝一份,命名为python2.exe或python3.exe,一定要保存原版,因为pip工具会调用它。

 

1.5 第一个python程序

进入解释器的交互式情势:调节和测试方便,不也许永久保存代码

 

剧本文件的法门(使用nodpad++演示):永久保存代码

 

强调:python解释器执行顺序是表达实施,即打开文件读内容,由此文件的后缀名没有硬性限制,但一般定义为.py结尾

1.5.1 种种语言的hello world

1.5.1.1  C++

#include <iostream>

 int main(void)

 {

  std::cout<<"Hello world";

 }

  

 

1.5.1.2  C

#include <stdio.h>

int main(void)

{

printf("\nhello world!");

return 0;

}

 

 

1.5.1.3  JAVA

public class HelloWorld{

  // 程序的入口

  public static void main(String args[]){

    // 向控制台输出信息

    System.out.println("Hello World!");

  }

}

 

 

1.5.1.4  PHP

<?php 

             echo "hello world!"; 

?>

 

1.5.1.5  Ruby

日本人付出

 puts "Hello world."

 

 

1.5.1.6  GO

package main

import "fmt"

func main(){



    fmt.Printf("Hello World!\n God Bless You!");



}

 

1.6 变量

变量即变化的量,主题是“变”与“量”二字,变即变化,量即衡量状态。

程序执行的本来面目正是一多元情景的转移,变是程序执行的第2手显示,所以大家需求有一种机制能够反映大概说是保存下去程序执行时意况以及气象的成形。

1.6.1 发生3个变量的三要素(重点)

1.6.1.1  变量值:

用来代表情况

              用变量名取变量值

       print(name)

1.6.1.2  变量值的门类:

表示差别的情状应该用不一样类其他值去表示(数字:年龄,字符串:名字)

print(type(name))

1.6.1.3  变量值的id号:

        print(id(name))

1.6.2 如何定义变量

变量名(相当于门牌号,指向值所在的空间),等号,变量值

name='Egon'

sex='male'

age=18

level=10

1.6.3 变量的概念规范

  1. 变量名只好是 字母、数字或下划线的私自己组建合

  2. 变量名的首先个字符不能够是数字

  3. 重在字不能声称为变量名[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’,
    ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’,
    ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’,
    ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’,
    ‘yield’]

 

1.6.4 定义方式

1.6.4.1  驼峰体

AgeOfOldboy = 56

NumberOfStudents = 80

1.6.4.2  下划线(推荐使用)

age_of_oldboy = 56

number_of_students = 80

 

1.6.4.3  定义变量名不好的法门:

  1. 变量名为华语、拼音

  2. 变量名过长

  3. 变量名词不达意

1.6.4.4  定义变量会有:id,type,value

1.等号比较的是value,

2 .is相比的是id

 

强调:

  1. id相同,意味着type和value必定相同

  2. value相同type肯定相同,但id也许两样,如下

    x=’Info Egon:18′

    y=’Info Egon:18′

    id(x)

    4376607152

    id(y)

    4376607408

    >

    x == y

    True

    x is y

    False

 

1.7 常量

常量即指不变的量,如pai 3.141592653…, 或在程序运维进程中不会改变的量

假设老男孩老师的岁数会变,那那就是个变量,但在局地意况下,他的年华不会变了,那就是常量。在Python中没有三个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量

AGE_OF_OLDBOY = 56

ps:在c语言中有特意的常量定义语法,const int count =
60;一旦定义为常量,更改即会报错

 

1.8 执行进程

       python3 C:\test.py的过程

       1、先启动python3.exe

       2、把C:\test.py从硬盘读入内部存款和储蓄器

       叁 、解释实施文书内容(识别python语法)

1.9 用户与程序交互

l  在python3中

input:用户输入任何值,都存成字符串类型

 

l  在python2中

input:用户输入什么类型,就存成什么项目

raw_input:等于python3的input

 

1.10 注释

   
随着学习的深远,用持续多长期,你就足以写复杂的上千居然上万行的代码啦,某个代码你花了很久写出来,过了些天再回到看,发现竟是看不懂了,那太符合规律了。
其余,你现在在工作中会发现,三个项目多是由多少个甚至几11个开发职员一起做,你要调用外人写的代码,外人也要用你的,若是代码不加注释,你协调都看不懂,更别说旁人了,那产会挨打地铁。所以为了制止那种两难的事务爆发,一定要增添你代码的可读性。

代码注释分单行和多行注释:

单行注释用#

多行注释能够用三对双引号””” “””

1.10.1 代码注释的规范:

  1. 永不任何加注释,只须求在投机认为根本或不佳精晓的某个加注释即可

  2. 注明能够用中文或英文,但不用用拼音

1.11 文件头

#!/usr/bin/env python

# -*- coding: utf-8 -*-

  

1.12 基本数据类型

数码即变量的值,如age=18,18则是大家保留的数据。变量的是用来反映/保持状态以及气象变化的,毫无疑问针对差异的情景就相应用分裂品类的数码去标识

1.12.1 数字

1.12.2 int整型

定义:age=10 #age=int(10)

用以标识:年龄,等级,身份证号,qq号,个数

在叁16位机器上,整数的位数为三十八位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

在6三人系统上,整数的位数为63人,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

在意,自从Python2.2起,倘诺整数发生溢出,Python会自动将整数数据转换为长整数,所以今后在长整数数据背后不加字母L也不会招致严重后果了。在Python3里不再有long类型了,全都以int

1.12.3 float浮点型

定义:salary=3.1 #salary=float(3.1)

用来标识:报酬,身高,体重,

>>> a= 2**64

>>> type(a)  #type()是查看数据类型的方法

<type 'long'>

>>> b = 2**60

>>> type(b)

<type 'int'>

  

 

1.12.4 字符串

在python中,加了引号的字符正是字符串类型,python并从未字符类型。

定义:name=’egon’ #name=str(‘egon’)

用来标识:描述性的始末,如姓名,性别,国籍,种族

1.12.4.1  单引号,双引号,三引号的分别

那单引号、双引号、多引号有怎么着差异吗?
让自个儿大声告诉您,单双引号木有任何分化,唯有上面那种景况你必要考虑单双的匹配

msg = "My name is Egon , I'm 18 years old!"

  

 

多引号什么成效吗?成效正是多行字符串必须用多引号

 

1.12.4.2  字符串拼接(只可以在字符串之间开始展览,且只可以相加或相乘)

数字可以拓展加减乘除等运算,字符串呢?让自身大声告诉您,也能?what
?是的,但不得不进展”相加”和”相乘”运算。

>>> name='egon'

>>> age='18'

>>> name+age #相加其实就是简单拼接

'egon18'

>>> name*5

'egonegonegonegonegon'

 

 

注意1:字符串相加的成效不高

字符串1+字符串3,并不会在字符串1的根底上加字符串2,而是申请2个簇新的内部存款和储蓄器空间存入字符串1和字符串3,非常字符串1与字符串3的空中被复制了一次,

在意2:只可以字符串加字符串,不能够字符串加任何连串

1.12.5 列表

在[]内用逗号分隔,能够存放n个任意档次的值

定义:students=[‘egon’,’alex’,’wupeiqi’,]
#students=list([‘egon’,’alex’,’wupeiqi’,])

用来标识:存款和储蓄八个值的情形,比如1个人有多少个爱好

#寄存多少个学生的音讯:姓名,年龄,爱好

>>> students_info=[['egon',18,['play',]],['alex',18,['play','sleep']]]

>>> students_info[0][2][0] #取出第一个学生的第一个爱好

'play'

 

列表:在[]内,用逗号分隔绝,存放七个随机档次的成分

动静:有序存放多少个值

 

1.12.6 字典

#何以还要用字典?

存放一位的音讯:姓名,性别,年龄,很强烈是多少个值,既然是存多少个值,大家一齐能够依照刚刚学习的列表去存放,如下

>>> info=['egon','male',18]

定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用

>>> info[2]

18

 

但那是依照我们曾经知道在第二个地方存放的是年龄的前提下,大家才清楚索引2对应的是年纪

即:

        #name, sex, age

info=[‘egon’,’male’,18]

而这一点一滴只是一种借使,并不曾真的意义上规定第多个职位存放的是年纪,于是大家要求寻求一种,即能够存放多少个随机档次的值,又有什么不可硬性规定值的炫耀关系的品类,比如key=value,那就用到了字典

 

字典类型:定义花括号内,用逗号分割key:value,value可以是即兴档次,可是key必须不可变类型

事态:存放四个值

 

#在{}内用逗号分隔,能够存放多少个key:value的值,value能够是专擅档次

定义:info={‘name’:’egon’,’age’:18,’sex’:18}
#info=dict({‘name’:’egon’,’age’:18,’sex’:18})

用来标识:存款和储蓄多个值的动静,每一个值都有唯一八个一见还是的key,能够尤其有利于飞快地取值

1.12.6.1  字典相关的嵌套、取值

info={

    'name':'egon',

    'hobbies':['play','sleep'],

    'company_info':{

        'name':'Oldboy',

        'type':'education',

        'emp_num':40,

    }

}

print(info['company_info']['name']) #取公司名





students=[

    {'name':'alex','age':38,'hobbies':['play','sleep']},

    {'name':'egon','age':18,'hobbies':['read','sleep']},

    {'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},

]

print(students[1]['hobbies'][1]) #取第二个学生的第二个爱好

 

 

1.12.7 布尔

#布尔值,一个True一个False

#处理器俗称电脑,即大家编写程序让电脑运转时,应该是让电脑无限接近人脑,或许说人脑能干什么,总计机就应当能干什么,人脑的机要功效是数额运营与逻辑运算,此处的布尔类型就模仿人的逻辑运维,即判断3个条件建马上,用True标识,不树立则用False标识

>>> a=3

>>> b=5

>>>

>>> a > b #不成立就是False,即假

False

>>>

>>> a < b #成立就是True, 即真

True

 

 

接下去就能够遵照标准结果来干不相同的作业了:

if a > b

   print(a is bigger than b )



else

   print(a is smaller than b )

 

上边是伪代码,但表示,
计算机已经得以像人脑一样基于判断结果不一致,来实施不相同的动作。

布尔类型的第②文化!!!:

具备数据类型都自带布尔值

一 、None,0,空(空字符串,空驶列车表,空字典等)三种境况下布尔值为False

② 、别的均为真

 

1.13 可变类型与不可变类型

1.可变类型:在id不变的意况下,value能够变,则号称可变类型,如列表,字典

2.
不得变类型:value一旦改变,id也变更,则号称不可变类型(id变,意味着成立了新的内部存款和储蓄器空间)

 

1.14 格式化输出

先后中时时会有那般场景:要求用户输入新闻,然后打字与印刷成固定的格式

例如需要用户输入用户名和年龄,然后打字与印刷如下格式:

My name is xxx,my age is xxx.

很扎眼,用逗号举行字符串拼接,只可以把用户输入的名字和年龄放到最后,不能够松手内定的xxx地方,而且数字也必须透过str(数字)的转换才能与字符串实行拼接。

    那就用到了占位符,如:%s、%d

#%s字符串占位符:可以选拔字符串,也可接受数字

print('My name is %s,my age is %s' %('egon',18))

 

#%d数字占位符:只好收到数字

print('My name is %s,my age is %d' %('egon',18))

print('My name is %s,my age is %d' %('egon','18')) #报错

 

#收到用户输入,打字与印刷成钦赐格式

name=input('your name: ')

age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d

print('My name is %s,my age is %s' %(name,age))

 

 

注意:

print(‘My name is %s,my age is %d’ %(name,age))
#age为字符串类型,不可能传给%d,所以会报错

复制代码

 

1.15 基本运算符

微型计算机可以展开的运算有那多少个种,可不只加减乘除这么不难,运算按连串可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,明天大家暂只学习算数运算、相比运算、逻辑运算、赋值运算

1.15.1 算数运算

    以下要是变量:a=10,b=20

美高梅娱乐4858.com 7

图1-7  

1.15.2 比较运算

    以下借使变量:a=10,b=20

 美高梅娱乐4858.com 8

 

图1-8  

1.15.3 赋值运算

以下若是变量:a=10,b=20

 美高梅娱乐4858.com 9

 

图1-9  

 

1.15.4 逻辑运算

 美高梅娱乐4858.com 10

 

图1-10  

>>> True or Flase and False

True

>>> (True or Flase) and False

False

  

1.15.5 身份运算

#is比较的是id

#而==比较的是值

 

1.16 流程序控制制之if…else

既是大家编制程序的指标是为了操纵电脑能够像人脑一样工作,那么人脑能做什么样,就需求程序中有照应的机制去模拟。人脑无非是数学生运动算和逻辑运算,对于数学生运动算在上一节大家曾经说过了。对于逻辑运算,即人依据外部规范的更动而做出分化的反映,比如:

    1 只要:女生的年华>2玖岁,那么:叫丈母娘

age_of_girl=31

if age_of_girl > 30:

    print('阿姨好')

 

    2 假若:女孩子的年华>三十虚岁,那么:叫三姨,不然:叫小姐

age_of_girl=18

if age_of_girl > 30:

    print('阿姨好')

else:

    print('小姐好')

 

    3
就算:女子的年龄>=18而且<24周岁还要身高>170而且体重<100同时是名不虚传的,那么:求爱,不然:叫丈母娘

age_of_girl=18

height=171

weight=99

is_pretty=True

if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:

    print('表白...')else:

    print('阿姨好')

 

 

1.16.1 if套if

 

if 条件1:



    缩进的代码块



  elif 条件2:



    缩进的代码块



  elif 条件3:



    缩进的代码块



  ......



  else:  



    缩进的代码块

 

#在求亲的底蕴上持续:

#一旦表白成功,那么:在一块

#否则:打印。。

age_of_girl=18

height=171

weight=99

is_pretty=True



success=False



if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:

    if success:

        print('表白成功,在一起')

    else:

        print('什么爱情不爱情的,爱nmlgb的爱情,爱nmlg啊...')

else:

    print('阿姨好')

 

 

4 如果:成绩>=90,那么:优秀

只要战绩>=80且<90,那么:出色

假设成绩>=70且<80,那么:普通

其余景况:很差

score=input('>>: ')

score=int(score)



if score >= 90:

    print('优秀')

elif score >= 80:

    print('良好')

elif score >= 70:

    print('普通')

else:

    print('很差')

 

 

 

演习一:用户登陆验证

#!/usr/bin/env python



name=input('请输入用户名字:')

password=input('请输入密码:')



if name == 'egon' and password == '123':

    print('egon login success')

else:

    print('用户名或密码错误')

 

 

勤学苦练二:根据用户输入内容输出其权力

#!/usr/bin/env python

#根据用户输入内容打印其权限



'''

egon --> 超级管理员

tom  --> 普通管理员

jack,rain --> 业务主管

其他 --> 普通用户

'''

name=input('请输入用户名字:')



if name == 'egon':

    print('超级管理员')

elif name == 'tom':

    print('普通管理员')

elif name == 'jack' or name == 'rain':

    print('业务主管')

else:

    print('普通用户')

 

 

练习三

# 如果:今天是Monday,那么:上班

# 如果:今天是Tuesday,那么:上班

# 如果:今天是Wednesday,那么:上班

# 如果:今天是Thursday,那么:上班

# 如果:今天是Friday,那么:上班

# 如果:今天是Saturday,那么:出去浪

# 如果:今天是Sunday,那么:出去浪

 

#方式一:

today=input('>>: ')

if today == 'Monday':

    print('上班')

elif today == 'Tuesday':

    print('上班')

elif today == 'Wednesday':

    print('上班')

elif today == 'Thursday':

    print('上班')

elif today == 'Friday':

    print('上班')

elif today == 'Saturday':

    print('出去浪')

elif today == 'Sunday':

    print('出去浪')

else:

    print('''必须输入其中一种:

    Monday

    Tuesday

    Wednesday

    Thursday

    Friday

    Saturday

    Sunday

    ''')

 

 

#方式二:

today=input('>>: ')

if today == 'Saturday' or today == 'Sunday':

    print('出去浪')



elif today == 'Monday' or today == 'Tuesday' or today == 'Wednesday' \

    or today == 'Thursday' or today == 'Friday':

    print('上班')

else:

    print('''必须输入其中一种:

    Monday

    Tuesday

    Wednesday

    Thursday

    Friday

    Saturday

    Sunday

    ''')

 

 

 

 

#方式三:

today=input('>>: ')

if today in ['Saturday','Sunday']:

    print('出去浪')

elif today in ['Monday','Tuesday','Wednesday','Thursday','Friday']:

    print('上班')

else:

    print('''必须输入其中一种:

    Monday

    Tuesday

    Wednesday

    Thursday

    Friday

    Saturday

    Sunday

    ''')

 

 

1.17 流程序控制制之while循环

1.17.1 为什么要用循环

上节课大家曾经学会用if .. else
来猜年龄的玩耍啊,可是只好猜二回就中的机率太小了,假若小编想给玩家壹回机遇啊?正是程序运维后,玩家最多能够试3遍,那么些怎么弄呢?你总不会想着把代码复制一回啊。。。。

那就是说如何成功永不写重复代码又能让程序重复一段代码多次啊?
循环语句就派上用场啦

1.17.2 条件循环:while,语法如下

hile 条件:   

    # 循环体

    #
假诺基准为真,那么循环体则履行,执行完成后再一次循环,重新衡量圭表。。。

    # 假设基准为假,那么循环体不进行,循环终止

#打印0-10

count=0

while count <= 10:

    print('loop',count)

    count+=1

 

 

#打字与印刷0-10之间的偶数

count=0

while count <= 10:

    if count%2 == 0:

        print('loop',count)

    count+=1

 

 

#打字与印刷0-10里头的奇数

count=0

while count <= 10:

    if count%2 == 1:

        print('loop',count)

    count+=1

 

 

1.17.3 死循环

import time

num=0

while True:

    print('count',num)

    time.sleep(1)

    num+=1  

 

 

1.17.4 循环嵌套与tag

tag=True



  while tag:



    ......



    while tag:



      ........



      while tag:



        tag=False

 

 

演习,供给如下:

    1 循环验证用户输入的用户名与密码

    2 评释通过后,运转用户重复执行命令

    3 当用户输入指令为quit时,则脱离整个程序

实现一:

name='egon'

password='123'



while True:

    inp_name=input('用户名: ')

    inp_pwd=input('密码: ')

    if inp_name == name and inp_pwd == password:

        while True:

            cmd=input('>>: ')

            if not cmd:continue

            if cmd == 'quit':

                break

            print('run <%s>' %cmd)

    else:

        print('用户名或密码错误')

        continue

    break

 

 

#实现二:使用tag

name='egon'

password='123'



tag=True

while tag:

    inp_name=input('用户名: ')

    inp_pwd=input('密码: ')

    if inp_name == name and inp_pwd == password:

        while tag:

            cmd=input('>>: ')

            if not cmd:continue

            if cmd == 'quit':

                tag=False

                continue

            print('run <%s>' %cmd)

    else:

        print('用户名或密码错误')

 

 

1.17.5 break与continue

#break用于退出本层循环

while True:

    print "123"

    break

    print "456"

 

 

#continue用于退出这次巡回,继续下2回巡回

while True:

    print "123"

    continue

print "456"

 

1.17.6 while+else

#与其余语言else 一般只与if 搭配分裂,在Python 中还有个while …else
语句,while 前边的else 功用是指,当while 循环平常实施完,中间没有被break
中止的话,就会执行else前面的语句

count = 0

while count <= 5 :

    count += 1

    print("Loop",count)



else:

    print("循环正常执行完啦")

print("-----out of while loop ------")

输出

Loop 1

Loop 2

Loop 3

Loop 4

Loop 5

Loop 6

循环正常执行完啦

-----out of while loop ------

 

 

#只要执行进程中被break啦,就不会执行else的语句啦

count = 0

while count <= 5 :

    count += 1

    if count == 3:break

    print("Loop",count)



else:

    print("循环正常执行完啦")

print("-----out of while loop ------")

输出



Loop 1

Loop 2

-----out of while loop ------

 

 

1.17.7 while循环演练题

#1. 运用while循环输出1 2 3 4 5 6     8 9 10

#2. 求1-100的全体数的和

#3. 输出 1-100 内的享有奇数

#4. 输出 1-100 内的具备偶数

#5. 求1-2+3-4+5 … 99的全部数的和

#6. 用户登陆(一遍机遇重试)

#7:猜年龄游戏

要求:

   
允许用户最多品尝叁次,叁次都没猜对的话,就径直退出,假使猜对了,打字与印刷恭喜音信并脱离

#8:猜年龄游戏升级版

要求:

    允许用户最多品尝三次

    每尝试一遍后,假若还没猜对,就问用户是不是还想继承玩,要是答应Y或y,
就继续让其猜三遍,以此往复,假若回答N或n,就退出程序

    怎么着猜对了,就径直退出

#题一

count=1

while count <= 10:

    if count == 7:

        count+=1

        continue

    print(count)

    count+=1

 

count=1

while count <= 10:

    if count != 7:

        print(count)

    count+=1

 

 

   

#题目二

res=0

count=1

while count <= 100:

    res+=count

    count+=1

print(res)

 

#题目三

count=1

while count <= 100:

    if count%2 != 0:

        print(count)

    count+=1

 

   

#题目四

count=1

while count <= 100:

    if count%2 == 0:

        print(count)

    count+=1

 

   

#题目五

res=0

count=1

while count <= 5:

    if count%2 == 0:

        res-=count

    else:

        res+=count

    count+=1

print(res)

 

 

#题目六

count=0

while count < 3:

    name=input('请输入用户名:')

    password=input('请输入密码:')

    if name == 'egon' and password == '123':

        print('login success')

        break

    else:

        print('用户名或者密码错误')

        count+=1

 

 

#题目七

age_of_oldboy=73



count=0

while count < 3:

    guess=int(input('>>: '))

    if guess == age_of_oldboy:

        print('you got it')

        break

    count+=1

 

 

#题目八

age_of_oldboy=73



count=0

while True:

    if count == 3:

        choice=input('继续(Y/N?)>>: ')

        if choice == 'Y' or choice == 'y':

            count=0

        else:

            break

guess=int(input('>>: '))

    if guess == age_of_oldboy:

        print('you got it')

        break

    count+=1

 

 

    

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注