01变量、运算符与数据类型
思考题
Python是怎么诞生的?Python之父是谁?
Python的创始人为荷兰人Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《Monty Python’s Flying Circus》。
Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。Python 2于2000年10月16日发布,稳定版本是Python 2.7。Python 3于2008年12月3日发布,不完全兼容Python 2。 2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。
Python语言的最大特点:简单,明确,优雅。
- 简单:Python奉行简洁主义,易于读写,它使你能够专注于解决问题而不是去搞明白语言本身。
- 免费:Python是开源软件。这意味着你不用花一分钱便能复制、阅读、改动它,这也是Python越来越优秀的原因——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。
- 兼容性:Python兼容众多平台,所以开发者不会遇到使用其他语言时常会遇到的困扰。
- 面向对象:Python既支持面向过程,也支持面向对象编程。在面向过程编程中,程序员复用代码,在面向对象编程中,使用基于数据和函数的对象。
- 丰富的库:Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。
- 规范的代码:Python采用强制缩进的方式使得代码具有极佳的可读性。
- 可扩展性和可嵌入性。如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
Python3的改进
- print 在python2 是关键字,python3 是函数
- python3 不再有unicode对象, str 即为unicode
- 除法的变化。python 3 除法返回浮点数 5/2 = 2.5
- 优化的super() ,直接调用父类的方法
- 高级的解包操作, 如 a, b, *c= range(10)
- 限定关键字参数, 参数特别多的时候指定参数以防搞混
- 性能优化等
练习题
单行注释用#号,python不会解析#后的内容
【例子】
print('hello world') # 打印hello world
#我是个单行注释
多行注释 在python中用 ‘’’ 或 “”" (三个单引号\双引号)
【例子】
'''
存放注释的内容
'''
运算符
运算符 | 含义 | 示例 |
---|---|---|
+ |
加:两个对象相加,或者一元加 | x + y |
- |
减:两个对象相减,或得到负数 | x - y |
* |
乘:两个操作数相乘,或是返回一个被重复若干次的字符串 | x * y |
/ |
除:两个操作数相除(总是浮点数) | x / y |
% |
取模:返回除法(/ )的余数 |
x % y(x/y 的余数) |
// |
取整除(地板除):返回商的整数部分 | x // y |
** |
幂:返回 x 的 y 次幂 | x ** y |
2. 比较运算符
运算符 | 含义 | 示例 |
---|---|---|
> |
大于:如果左操作数大于右操作数,则为 True | x > y |
< |
小于:如果左操作数小于右操作数,则为 True | x < y |
== |
等于:如果两个操作数相等,则为 True | x == y |
!= |
不等于:如果两个操作数不相等,则为 True | x != y |
>= |
大于等于:如果左操作数大于或等于右操作数,则为 True | x >= y |
<= |
小于等于:如果左操作数小于或等于右操作数,则为 True | x <= y |
运算符 | 示例 | 等价于 |
---|---|---|
= |
x = 5 |
x = 5 (相同) |
+= |
x += 5 |
x = x + 5 |
-= |
x -= 5 |
x = x - 5 |
*= |
x *= 5 |
x = x * 5 |
/= |
x /= 5 |
x = x / 5 |
%= |
x %= 5 |
x = x % 5 |
//= |
x //= 5 |
x = x // 5 |
**= |
x **= 5 |
x = x ** 5 |
&= |
x &= 5 |
x = x & 5 |
|= |
x |= 5 |
x = x | 5 |
^= |
x ^= 5 |
x = x ^ 5 |
>>= |
x >>= 5 |
x = x >> 5 |
<<= |
x <<= 5 |
x = x << 5 |
运算符 | 含义 | 示例 |
---|---|---|
& |
按位与(AND):参与运算的两个值的两个相应位都为1,则该位的结果为1;否则为0 | x & y |
| |
按位或(OR):参与运算的两个值的两个相应位有一个为1,则该位的结果为1;否则为0 | x | y |
~ |
按位翻转/取反(NOT):对数据的每个二进制位取反,即把 1 变为 0 ,把 0 变为 1 | ~x |
^ |
按位异或(XOR):当两个对应的二进制位相异时,结果为1 | x ^ y |
>> |
按位右移 :运算数的各个二进制位全部右移若干位 | x >> 2 |
<< |
按位左移:运算数的各个二进制位全部左移若干位,高位丢弃,地位不补 0 | x << 2 |
运算符 | 含义 | 示例 |
---|---|---|
and | x and y | 逻辑与:如果 x 为 False,返回 false;否则返回 y 的计算值 |
or | x or y | 逻辑或:如果 x 是非 0,返回 x 的值;否则返回 y 的计算值 |
not | not x | 逻辑非:如果 x 为 False,返回 True;如果 x 为 True,返回 False |
运算符 | 含义 | 示例 |
---|---|---|
in |
如果在指定序列中找到值/变量,返回 True;否则返回 False | 5 in x |
not in |
如果在指定序列中没有找到值/变量,返回 True;否则返回 False | 5 not in x |
身份运算符用于检查两个值(或变量)是否位于存储器的同一部分。
注意: 两个变量相等,并不意味着它们也相同。
运算符 | 含义 | 示例 |
---|---|---|
is |
如果操作数相同,则为 True(引用同一个对象) | x is True |
is not |
如果操作数不相同,则为 True(引用不同的对象) | x is not True |
运算符优先级
【注】从低到高
运算符 | 描述 |
---|---|
lambda | Lambda表达式 |
or | 布尔“或” |
and | 布尔“与” |
not x | 布尔“非” |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
| | 按位或 |
^ | 按位异或 |
& | 按位与 |
<<,>> | 移位 |
+,- | 加法与减法 |
*,/,% | 乘法、除法与取余 |
+x,-x | 正负号 |
~x | 按位翻转 |
** | 指数 |
x.attribute | 属性参考 |
x[index] | 下标 |
x[index:index] | 寻址段 |
f(arguments…) | 函数调用 |
(experession,…) | 绑定或元组显示 |
[expression,…] | 列表显示 |
{key:datum,…} | 字典显示 |
‘expression,…’ | 字符串转换 |
- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict等),则两者是有区别的。
python 基本数据类型
数字;字符串;元组;列表;集合;字典
数据类型转化
str表示字符串,而int表示整数,float是浮点数,需要转换什么就在前面写上什么类型
【例子】
数字转字符串
str()
>>> a=123
>>> type(a)
<type 'int'>
>>> b=str(a)
>>> type(b)
<type 'str'>
字符串转数字
内容必须都是数字才可以转换
>>> a='123'
>>> b=int(a)
>>> print b
123
02 leetcode 习题 136
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
尝试使用位运算解决此题。
思路
按位异或操作具有以下性质:
1.任何数与其本身的按位异或都是0
2.任何数与0的按位异或都是其本身
于是想到:若对整数数组每一个元素都一次按位异或处理那么最后的结果必然是只出现一次的数。
编写程序如下:
class Solution:
def SingleNumber(self, nums: List[int]) -> int:
SingleNumber = 0
for num in nums:
SingleNumber ^= num
return SingleNumber