热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编程基础及分支循环语句

编程基础程序:一组能让计算机识别和执行的指令电子计算机能够执行程序的机器现代计算机:艾伦·麦席森·图灵(AlanMathisonTuring,1912年6月23日-1954年6月7

编程基础

程序:

  一组能让计算机识别和执行的指令

电子计算机
  能够执行程序的机器

现代计算机:

  艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家、
逻辑学家,被称为计算机科学之父,人工智能之父。图灵提出的著名的图灵机模型为现代计算
机的逻辑工作方式奠定了基础
  冯·诺依曼著名匈牙利裔美籍犹太人数学家、计算机科学家、物理学家和化学家,数字计算机之
父。他提出了以二进制作为数字计算机的数制基础,计算机应该按照程序顺序执行,计算机应
该有五大部件。

CPU由运算器和控制器组成

  运算器,完成各种算数运算、逻辑运算、数据传输等数据加工处理

  控制器,控制程序的执行

  存储器,用于记忆程序和数据,例如内存

  输入设备,将数据或者程序输入到计算机中,例如键盘、鼠标

  输出设备,将数据或程序的处理结果展示给用户,例如显示器、打印机等

    硬盘是输入输出设备,CPU只跟内存交换数据

    CPU中还有寄存器和多级缓存Cache

机器语言

   一定位数组成二进制的0和1的序列,称为机器指令。机器指令的集合就是机器语言

   与自然语言差异太大,难学、难懂、难写、难记、难查错
汇编语言
   用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中

  汇编语言写好的程序需要汇编程序转换成机器指令
   汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言

低级语言

  面向机器的语言,包括机器语言、汇编语言

  不同的机器不能通用,不同的机器需要不同的机器指令或者汇编程序

高级语言

  接近自然语言和数学语言的计算机语言

  高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序

  1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译

  人们只需要关心怎么书写源程序,针对不同机器的编译的事交给编译器关心处理

低级语言到高级语言

  语言越高级,越接近人类的自然语言和数学语言

  语言越低级,越能让机器理解

  高级语言和低级语言之间需要一个转换的工具:编译器、解释器

  C、C++等语言的源代码需要本地编译

  Java、Python、C#的源代码需要被解释器编译成中间代码(Bytecode),在虚拟机上运行

高级语言的发展

非结构化语言
  编号或标签、GOTO,子程序可以有多个入口和出口
  有分支、循环
结构化语言
  任何基本结构只允许是唯一入口和唯一出口
   顺序、分支、循环,废弃GOTO
面向对象语言
  更加接近人类认知世界的方式,万事万物抽象成对象,对象间关系抽象成类和继承
  封装、继承、多态
 函数式语言
  古老的编程范式,应用在数学计算、并行处理的场景。引入到了很多现代高级语言中
  函数是“一等公民”,高阶函数

Python解释器

  CPython     C语言开发,最广泛的Python解释器

  IPython     一个交互式、功能增强的Cpython

  JPython:将Python代码动态编译成Java字节码,然后在JVM上运行。

  IronPython   与Jython类似,运行在.Net平台上的解释器,Python代码被编译成.Net的字节码

  pypy --Python语言写的Python解释器,JIT技术,动态编译Python代码

基础语法

# 注释

数字 不区分long和int

进制x    o     b

bool值 2个值Ture、False

字符串

使用‘ " 单双引号引用的字符的序列
 ‘‘‘和""" 单双三引号,可以跨行、可以在其中自由的使用单双引号
在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理

转义序列

\\     \t    \r   \n    \‘     \"

前缀r

缩进
   未使用C等语言的花括号,而是采用缩进的方式表示层次关系
   约定使用4个空格缩进
续行
  在行尾使用\
  如果使用各种括号,认为括号内是一个整体,内部跨行不用\

 标识符

  1. 一个名字,用来指代一个值

  2. 只能是字母、下划线和数字

  3. 只能以字母或下划线开头

  4. 不能是python的关键字,例如def、class就不能作为标识符

  5. Python是大小写敏感的

 约定

  不允许使用中文
  不允许使用歧义单词,例如class_
  在python中不要随便使用下划线开头的标识符

 常量

  一旦复制就不能改变值的标识符

  python无法定义常量

  字面常量 :一个单独的量,例如12、"abc" 、‘2341356514.03e-9‘

变量

  赋值后,可以改变值的标识符

 Python的语言类型

Python是动态语言、强类型语言

技术分享图片

静态编译语言

  实现声明变量类型,类型不能再改变
  编译时检查

动态编译语言

   不用事先声明类型,随时可以赋值为其他类型

  编程时不知道是什么类型,很难推断

 强类型语言

   不同类型之间操作,必须先强制类型转换为同一类型。print(‘a‘+1)

弱类型语言

   不同类型间可以操作,自动隐式转换,Javascript中console.log(1+‘a‘)

算数运算符

  + - * / % **

  自然除/结果是浮点数,整除//。注:2.x中/和//都是整除

位运算符

  &   |   ~   ^   <<  >>

  常用方式:乘除2的倍数,32 // 8相当于32 >> 3

  12,0xc,0o14,0b1100

原码、反码、补码,负数表示法

   5=> 0b101,1 => 0b1 ,-1 => -0b1, bin(-1)

反码

  正数的反码与原码相同;负数的反码符号位不变其余按位取反

补码

  正数的补码与原码相同;负数的补码符号位不变其余按位取反后+1

负数表示法

  早期数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法要转换成加法
  负数在计算机中使用补码存储,-1的补码为1111 1111
  5-1 => 5+(-1)直觉上是0b101-0b1,其实计算机中是0b101+0b11111111,溢出位舍弃
  10^9 等于? 10^-9等于?为什么      异或   :相异出1,相同出0

    10->   0000 1010

    9->     0000 1001

       00000011->3

运算符

  ==   !=   >   <  >=   <=    返回一个bool值

逻辑运算符 

  与或非and or not

  短路运算符

    and 如果第一个表达式为False,后面就没有必要计算了,这个逻辑表达式一定是False

    or 如果第一个表达式True,后面没有必要计算了,这个逻辑表达式一定是True

赋值运算符

  a = min(3, 5)

  += -= *= /= %= 等

  x = y = z = 10

成员运算符

  in、not in

身份运算符

  is 、is not

运算符优先级(由高到低)

技术分享图片

算数运算符> 位运算符> 身份运算符> 成员运算符> 逻辑运算符

  长表达式,多用括号,易懂、易读

表达式Expression

  由数字、符号、括号、变量等的组合

    算数表达式

    逻辑表达式

    赋值表达式    python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义

内存管理

变量无须事先声明,也不需要指定类型(动态语言的特性)

Python编程中一般无须关心变量的存亡,一般也不用关心内存的管理

python使用引用计数记录所有对象的引用数

  当对象引用数变为0,它就可以被垃圾回收GC

  计数增加:赋值给其它变量就增加引用计数,例如x=3;y=x

  计数减少:

    函数运行结束时,局部变量就会被自动销毁,对象引用计数减少

    变量被赋值给其它对象。例如x=3;y=x;x=4

有关性能的时候,就需要考虑变量的引用问题,但是该释放内存,还是尽量不释放内存,看需求

单分支结构

  if语句
    if condition:
      代码块
    condition必须是一个bool类型,这个地方有一个隐式转换bool(condition)
    if 1<2:
      print(‘1 less than 2‘)

代码块

  类似于if语句的冒号后面的就是一个语句块

  在if、for、def、class等关键字后使用代码块

技术分享图片

False等价布尔值,相当于bool(value)

if...elif...else语句
  if condition1:
    代码块1
  elif condition2:
    代码块2
  elif condition3:
    代码块3
  ......
  else:
    代码块

举例
a = 5
if a<0:
  print(‘negative‘)
elif a==0:
  print(‘zero‘)
else:
  print(‘positive‘)

分支嵌套

score = 80
if score<0:
  print(‘wrong‘)
else:
  if score==0:
    print(‘egg‘)
  elif score <= 100:
    print(‘right‘)
  else:
    print(‘too big‘)

语法
while condition:
  block
  当条件满足即condition为True,进入循环体,执行block
  举例
  flag=10
  while flag:
    print(flag)
    flag -= 1

flag 思路是开关,循环语句中,判断循环条件时,一旦出现,就不想再运行本条命令,用此方法。

语法
for element in iteratable:
block
  当可迭代对象中有元素可以迭代,进入循环体,执行block
  range函数
  举例:打印1~10
    for i in range(10):
      print(i+1)

continue

中断当前循环的当次执行,继续下一次循环
   举例:计算10以内的偶数(for循环)
for i in range(10):
  if not i%2:
    print(i)

break终止当前循环

总结
  continue和break是循环的控制语句,只影响当前循环,包括while、for循环
  如果循环嵌套, continue和break也只影响语句所在的那一层循环
  continue和break 不是跳出语句块,所以if cond: break 不是跳出if,而是终止if外的break所在的循环

编程基础及分支循环语句


推荐阅读
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
author-avatar
搁浅几世琉璃
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有