5.4-Python基础和原反码及表达式

python基础语法

逆境前行,能帮你的只有自己

重点
1.计算机基础:
^   按位异或运算符:当两对应的二进位相异时,结果为1    (a ^ b) 输出结果 49 ,二进制解释:0011 0001
~   按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1

2.原码、反码、补码

1.编程基础

1.1 计算机语言
人与计算机之间交互的语言

机器语言
一定位数组成二进制的0和1的序列,称为机器指令。机器指令的集合就是机器语言
与自然语言差异太大,难学、难懂、难写、难记、难查错

汇编语言
用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
汇编语言写好的程序需要汇编程序转换成机器指令
汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言

1.2 语言分类

低级语言
面向机器的语言,分为机器语言和汇编语言

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

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

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

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

1.3 程序

程序是一个指令序列,算法+数据结构=程序

为了使计算机程序得以运行,计算机需要加载代码,同时也要加载数据。从计算机的底层来说,这是由高级语言(例如Java,C/C++,C#等)代码转译成机器语言而被CPU所理解,进行加载

1.4 写程序难点

理不清数据
搞不清处理方法
无法把数据设计转换成数据结构,无法把处理方法转换成算法
无法用设计范式来进行程序设计
世间程序皆有bug,但要会debug

2.python简介

2.1python解释器

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

CPython

当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

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

PyPy

PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

小结

Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

3.python基础语法

注释

以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号“:”结尾时,缩进的语句视为代码块。

ln[1]:asxprint('hello world') #这是注释     
    # 整行都是注释  print('hello world2')
hello world

数字

分为整数、浮点数

整数:Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。

浮点数:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

ln [1]:7e9
out[1]:7000000000.0
ln [1]:100
out[1]:100
ln [1]:0.99
out[1]:0.99

字符串

单双引号:字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。

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

ln [1]:print('hello world')  hello world
ln [2]:print("hello python")hello python
ln [3]:print("'hello pythons'")'hello pythons'
ln [4]:print("""welcome        to\       my\       blog""")welcome tomyblog
ln [5]:print(r"""welcome        to\       my\       blog""")welcome to\my\blog

转义序列

\ \t \r \n ' "前缀r,把里面的所有字符当普通字符对待

缩进

约定使用4个空格缩进

续行

在行尾使用\,如果使用各种括号,认为括号内是一个整体,内部跨行不用\

标识符

1.一个名字,用来指代一个值
2.只能字母、下划线和数字
3.只能以字母或下划线开头
4.不能是python的关键字,例如def、class就不能作为标识
5. Python是大小写敏感的
约定:不允许使用中文

不允许使用歧义单词,例如class_在python中

不要随便使用下划线开头的标示符

python的语言类型

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

静态编译语言
实现声明变量类型,类型不能再改变;编译时检查

动态编译语言
不用事先声明类型,随时可以赋值为其他类型;编程时不知道是什么类型,很难推断

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

弱类型语言
不同类型间可以操作,自动隐式转换,JavaScript中console.log(1+'a')

python运算符

Python语言支持以下类型的运算符:

  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 成员运算符
  • 身份运算符
  • 运算符优先级
python算术运算符
ln [1]:1+1.496  #加法2.496
ln [2]:3-1.111  #减法1.889
ln [3]:3*7      #乘法21
ln [4]:8/3      #除法2.6666666666666665
ln [5]:8//3     #整除2
ln [6]:2**5     #乘方算法32
in [7]:567%10  #取余数7
python比较运算符

以下假设变量a为10,变量b为20:

运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
<> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。 (a < b) 返回 true。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。

以下实例演示了Python所有比较运算符的操作:

ln [1]:a = 21       b = 21        
if  a == b :          
  print ("a 等于 b")       
else:          
  print ("a 不等于 b")
a 等于 b

ln [2]:a = 21       b = 10       
if  a != b :          
  print ("a 不等于 b")       
else:          
  print ("a 等于 b")
a 不等于 b

ln [3]:a = 21       b = 21        if  a >= b :          print ("a >= b")       else:          print ("a < b")a >= b
python比较运算符

按位运算符是把数字看作二进制来进行计算的
二进制口诀:8421

十进制 十六进制 二进制 Symbol 十进制 十六进制 二进制 Symbol
0 00 0000 0000 NUL 64 40 0100 0000 @
1 01 0000 0001 SOH 65 41 0100 0001 A
2 02 0000 0010 STX 66 42 0100 0010 B
3 03 0000 0011 ETX 67 43 0100 0011 C
4 04 0000 0100 EOT 68 44 0100 0100 D
5 05 0000 0101 ENQ 69 45 0100 0101 E
6 06 0000 0110 ACK 70 46 0100 0110 F
7 07 0000 0111 BEL 71 47 0100 0111 G
8 08 0000 1000 BS 72 48 0100 1000 H
9 09 0000 1001 TAB 73 49 0100 1001 I
10 0A 0000 1010 LF 74 4A 0100 1010 J
11 0B 0000 1011 VT 75 4B 0100 1011 K
12 0C 0000 1100 FF 76 4C 0100 1100 L
13 0D 0000 1101 CR 77 4D 0100 1101 M
14 0E 0000 1110 SO 78 4E 0100 1110 N
15 0F 0000 1111 Sl 79 4F 0100 1111 O
16 10 0001 0000 DLE 80 50 0101 0000 P
17 11 0001 0001 DC1 81 51 0101 0001 Q
18 12 0001 0010 DC2 82 52 0101 0010 R
19 13 0001 0011 DC3 83 53 0101 0011 S
20 14 0001 0100 DC4 84 54 0101 0100 T
21 15 0001 0101 NAK 85 55 0101 0101 U
22 16 0001 0110 SYN 86 56 0101 0110 V
23 17 0001 0111 ETB 87 57 0101 0111 W
24 18 0001 1000 CAN 88 58 0101 1000 X
25 19 0001 1001 EM 89 59 0101 1001 Y
26 1A 0001 1010 SUB 90 5A 0101 1010 Z
27 1B 0001 1011 ESC 91 5B 0101 1011 [
28 1C 0001 1100 FS 92 5C 0101 1100 /
29 1D 0001 1101 GS 93 5D 0101 1101 ]
30 1E 0001 1110 RS 94 5E 0101 1110 ^
31 1F 0001 1111 US 95 5F 0101 1111 _
32 20 0010 0000 (space) 96 60 0110 0000 `
33 21 0010 0001 ! 97 61 0110 0001 a
34 22 0010 0010 " 98 62 0110 0010 b
35 23 0010 0011 # 99 63 0110 0011 c
36 24 0010 0100 $ 100 64 0110 0100 d
37 25 0010 0101 % 101 65 0110 0101 e
38 26 0010 0110 & 102 66 0110 0110 f
39 27 0010 0111 ` 103 67 0110 0111 g
40 28 0010 1000 ( 104 68 0110 1000 h
41 29 0010 1001 ) 105 69 0110 1001 i
42 2A 0010 1010 * 106 6A 0110 1010 j
43 2B 0010 1011 + 107 6B 0110 1011 k
44 2C 0010 1100 , 108 6C 0110 1100 l
45 2D 0010 1101 - 109 6D 0110 1101 m
46 2E 0010 1110 . 110 6E 0110 1110 n
47 2F 0010 1111 / 111 6F 0110 1111 o
48 30 0011 0000 0 112 70 0111 0000 p
49 31 0011 0001 1 113 71 0111 0001 q
50 32 0011 0010 2 114 72 0111 0010 r
51 33 0011 0011 3 115 73 0111 0011 s
52 34 0011 0100 4 116 74 0111 0100 t
53 35 0011 0101 5 117 75 0111 0101 u
54 36 0011 0110 6 118 76 0111 0110 v
55 37 0011 0111 7 119 77 0111 0111 w
56 38 0011 1000 8 120 78 0111 1000 x
57 39 0011 1001 9 121 79 0111 1001 y
58 3A 0011 1010 : 122 7A 0111 1010 z
59 3B 0011 1011 ; 123 7B 0111 1011 {
60 3C 0011 1100 < 124 7C 0111 1100
61 3D 0011 1101 = 125 7D 0111 1101 }
62 3E 0011 1110 > 126 7E 0111 1110 ~
63 3F 0011 1111 ? 127 7F 0111 1111
运算符 描述 实例
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释:0000 1100
按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a| b) 输出结果 61 ,二进制解释:0011 1101
^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释:0011 0001
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1 (~a ) 输出结果 -61 ,二进制解释:1100 0011, 在一个有符号二进制数的补码形式。
<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释:1111 0000
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 a >> 2 输出结果 15 ,二进制解释:0000 1111
a = 21       
a=60         #60=0011 1100       
b=13         #13=0000 1101       
c=a & b;     #计算 & 运算符       
print(c)  
12

a=60         #60=0011 1100       
b=13         #13=0000 1101      
c=a | b;     #计算 | 运算符       
print(c)
61

a=60        #60=0011 1100       
b=13        #13=0000 1101       
c=a ^ b;    #计算 ^ 运算符      
异或运算符:当两对应的二进位相异时,结果为1 
print(c)
49

按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1
~13      # 13=0000 1101
-14

4>>2     # 4= 0000 01001
python运算符优先级
运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not and or 逻辑运算符

原码、反码与补码

计算机中数据是怎么放到内存中的?
原码、反码、补码;负数表示法(***)
计算机中正数的补码、反码、原码都是一样的;负数补码的补码就是原码;
机器码:

补码是留给计算机放在内存中自己玩的,你要用,计算机会先转换为原码,原码更贴近于人;

1000 0000     (-1)   #负数最高位1

0000 1100   #12
1111 0011    #结果取反  补码  1  负数
1000 1101   #符号位不变(-1),按照位置取反后加1    -13

表达式Expression

由数字、符号、括号、变量组成
分为算术表达式,逻辑表达式,赋值表达式

Python中,赋值即是定义(非常重要)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343