I/O格式化与运算符

输出函数

Python3 - print()


  在Python3中。print()的使用方法如下:

  1. >>> # ==== Python3 print() ====
  2. >>>
  3. >>> print("hello,world")
  4. hello,world
  5. >>>

  print后面必须跟上括号,所打印的内容必须由单引号、双引号、三单引号、三双引号、以上其中任意一种括起来才能使用。这是Python语法规定的死规范。

  除此之外print()还可以接收3个参数分别是 sepend以及file

  sep

    - 用来显示间隔中的链接字符,默认为一个空格。

  end

    - 指定当print()结束后的下一个print()的位置相较于上一次print()。默认换行 \n

  file

    - 指定print()的内容写入到某个指定的文件句柄中。默认为空

  sep示例:

  1. >>> # ==== print() sep参数 ====
  2. >>>
  3. >>> print("hello","world") # 不指定sep参数
  4. hello world
  5. >>> print("hello","world",sep="-------") #指定sep参数
  6. hello-------world
  7. >>>

  end示例:

  1. # Pycharm中演示
  2. # ==== print() end参数 ====

  3. print('hello',end='<----')
  4. print('world')
  5. hello<----world

  file示例:

  1. # Pycharm 中演示
  2. # ==== print() file参数 ====

  3. with open(file='a.text',mode='w',encoding='utf-8') as f:
  4. print('这一行将被写入文件中去...',file=f)

  print()的底层实现原理(自我猜测版本):

  在这可以看到sys.stdout的字样。所以这里猜想是调用了sys.stdout.write()方法,如果我们将file指定为某一个文件,那么屏幕上便不会再显示print()打印的字样而是直接将内容写入到了文件中。

  而flush是刷新的意思,以下代码可以在原生Python解释器中打开执行一下。分别删除flush = True 执行2次你就能看到效果了。

  1. # ==== print() flush参数 ====

  2. import time
  3. time.sleep(0.1)
  4. print('下载中',end="")
  5. for i in range(100):
  6. print('#',flush=True,end="") #一种直接全部打印 100 个 #。加了flush = True偶则是慢慢打印。会有一种视觉上的效果

Python2 - print()


  Python2的print()允许像Python3那样使用,但更多人使用Python2的print()是不带括号的。关于使用方式有这点差别,更深层的东西这里没有去研究了。

  1. >>> # ==== Python2 print() ====
  2. >>>
  3. >>> print("hello,world") # 允许 Python3中的使用方式
  4. hello,world
  5. >>> print "hello,world" # 允许 不加入括号,这在Python3中是不被允许的
  6. hello,world
  7. >>>

输入函数

Python3 - input()


  Python3中提供了input()方法来接收用户输入的值。但是Python3中的input()方法会将一切用户输入的值转换为str类型。这里一定要注意!

  1. # ==== Python3 - input() ====

  2. name = input("请输入您的姓名:")
  3. age = input("请输入您的年龄:")
  4. print("name的类型是:",type(name))
  5. print("age的类型是",type(age)) # <class 'str'>

  6. # ==== 执行结果 ====

  7. """
  8. 请输入您的姓名:yunya
  9. 请输入您的年龄:18
  10. name的类型是: <class 'str'>
  11. age的类型是 <class 'str'>
  12. """

如果我们想求一个整形或者浮点型的数据,我们就将其使用int()或者float()包裹住输入的数据即可:

  int()

    - 只能包裹字符串str类型以及浮点型float(向下取整)

  float()

    - 只能包裹字符串str类型以及整形

  1. # ==== Python3 input() 类型转换 ====

  2. name = input("请输入您的姓名:")
  3. age = int(input("请输入您的年龄:")) #注意用int()包裹input()返回的str类型的内容。并且做一次转换:确保用户输入的是 整形样式的字符串,否则会抛出异常
  4. print("name的类型是:",type(name))
  5. print("age的类型是",type(age)) # <class 'int'>

  6. # ==== 执行结果 ====

  7. """
  8. 请输入您的姓名:yunya
  9. 请输入您的年龄:18
  10. name的类型是: <class 'str'>
  11. age的类型是 <class 'int'>
  12. """

  这里提一嘴:如果用户输入的不是整形样式的字符串,则会抛出异常。那么如何处理先不着急,只需要记得肯定有处理的方法。

Python2 - raw_input()

  Python2中的 raw_input() 和上面介绍的 Python3 中的input()使用方法和功能全部都是一样的。这里不做详解,需要注意的是:Python3中没有raw_input()方法

  1. >>> # ==== Python2中的raw_input() ====
  2. >>>
  3. >>> name = raw_input("请输入姓名:")
  4. 请输入姓名:yunya
  5. >>> age = raw_input("请输入年龄:")
  6. 请输入年龄:18
  7. >>> type(name)
  8. <type 'str'>
  9. >>> type(age)
  10. <type 'str'>
  11. >>>

Python2 - input()

  Python2中的input()与Python3中的input()大不相同。Python3中的input()无论用户输入的值是什么都会转换为str类型,而Python2中的input()是用户输入什么类型的值就自动转换成什么类型,看起来挺好的。但是实际是非常不方便的,具体原因看下图

  1. >>> # ==== Python2中的input() ====
  2. >>>
  3. >>> name = input("请输入姓名:")
  4. 请输入姓名:yunya # 注意:这里没加引号,Python2的input()会认为这是一个变量。而改变了未绑定堆区变量值,所以抛出 yunya 未定义的这么一个异常。
  5. Traceback (most recent call last):
  6. File "<stdin>", line 1, in <module>
  7. File "<string>", line 1, in <module>
  8. NameError: name 'yunya' is not defined
  9. >>> name = input("请输入姓名:")
  10. 请输入姓名:"yunya"
  11. >>> name
  12. 'yunya' #用户必须按照Python语法规范来输入,极大的拉低了用户体验
  13. >>>
  14. >>> city = input("请输入城市:") #假如用户输入了不符合Python语法数据便直接抛出异常。
  15. 请输入城市:["哈尔滨"
  16. Traceback (most recent call last):
  17. File "<stdin>", line 1, in <module>
  18. File "<string>", line 1
  19. ["哈尔滨"
  20. ^
  21. SyntaxError: invalid syntax
  22. >>>

字符串格式化

%


  格式化的意思是我们有的时候想让变量值与定义好的字符串做一个融合。这个时候就有三种方法,我们先来看第一种也是最原始的一种 % 方法:

  1. # ==== %格式化 ====

  2. name = "yunya"
  3. age = 18
  4. # ==== 位置传参 ====
  5. # 一个 % 对应一个 变量名。当变量名有多个时便需要%后面跟上括号做解包,如若只有一个则不需要加上括号,% 和后面的 %(a,b,c)位置一一对应

  6. msg = "姓名是:%s,年龄是%i"%(name,age) # %意味占位符,后面的字符代表转换的类型。如 %s代表接收任意类型的传值,%i代表只接受int类型的传值。
  7. print(msg)

  8. # ==== 关键字传参 ====
  9. msg2 = "姓名是:%(name)s,年龄是%(age)i" %{'age':age,'name':name} # 变量名存储变量值内存地址引用。关键字传参打破位置顺序必须统一的限制.
  10. print(msg2)

  11. # ==== 格式化 % 百分号 ====
  12. print('%s%%'%3) # %% 百分号代表一个 % 。放在 %s 后面则代表格式化出后的结果是 3%

  13. # ==== 执行结果 ====

  14. """
  15. 姓名是:yunya,年龄是18
  16. 姓名是:yunya,年龄是18
  17. 3%
  18. """

占位符说明
%s 字符串(采用str()的显示) Ps:推荐使用 %s 。 因为它接收所有类型的传值
%r 字符串(采用repr()显示) Ps:原始字符串
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)

format()

  %虽然能够满足基本需求。但是其位置传参还是显得太过麻烦,故在Python2.6中新增format() 方法,它更加强大以及速度更快。推荐今后使用format()的方法进行字符串格式化 ,注意:format()中的s只接受str类型的传值而不接受全部类型!!!

  1. # ==== format()格式化 ====

  2. name = "yunya"
  3. age = 18

  4. # ==== 位置传参 ====
  5. msg = "姓名是{:s},年龄是{:d}".format(name, age) # 采用{}进行占位,需要注意的是format中的 s 不是接收全部类型的参数,而是指定str
  6. # msg = "姓名是{},年龄是{}" .format(name,age) 也可不指定类型。默认接收全部类型参数
  7. print(msg)

  8. # ==== 索引传参 ====
  9. msg2 = "姓名是{1:d},年龄是{0:s}".format(name, age) # 采用{}进行占位 。 无法使用s接收age.且 format()中没有 i
  10. # msg2 = "姓名是{1},年龄是{0}" .format(name,age
  11. print(msg2)

  12. msg3 = "姓名是{0:s}{0:s}{0:s},年龄是{1:d}{1:d}{1:d}".format(name, age) # 采用{}进行占位 。 无法使用s接收age
  13. # msg3 = "姓名是{0:s}{0:s}{0:s},年龄是{1:d}{1:d}{1:d}".format(name, age) #
  14. print(msg3)

  15. # ==== 关键字传参 ====
  16. msg4 = "姓名是{name:s},年龄是{age:d}".format(name=name, age=age) # 采用{}进行占位 。 无法使用s接收age
  17. # msg4 = "姓名是{name},年龄是{age}" .format(name=name,age=age)
  18. print(msg4)

  19. # ==== 字符填充 ====
  20. print('{0:*<10}'.format('|||')) # < 代表字符 ||| 在左边,填充符号为 * 排在右边 一共10 个( 算上字符三个 | )
  21. print('{0:%>10}'.format('|||')) # > 代表字符 ||| 在右边,填充符号为 % 排在左边 一共10 个 ( 算上字符三个 | )
  22. print('{0:$^10}'.format('|||')) # ^ 代表字符 ||| 在中间,填充符号为 $ 排在两侧 两侧加起来共10个 ( 算上字符三个 | )
  23. print('{0:$=10}'.format(123)) # = 代表数字 123 在右边,填充符号为 $ 排在左边 一共10个 Ps: = 只针对数字 ( 算上字符123 )

  24. # ==== 精度控制与格式转换 ====
  25. print('{0:.2f}'.format(3.1415926535)) # f代表接收值类型为float类型,.2代表小数点后保留2位
  26. print('{0:b}'.format(10)) # 转换为二进制 b
  27. print('{0:x}'.format(10)) # 转换为十六进制 x
  28. print('{0:o}'.format(10)) # 转换为八进制 o
  29. print('{0:,}'.format(1000000)) # 千分位表示 ,
  30. print('{0:.2%}'.format(1)) #百分号表示 2代表2位数,转换数据1 为 百分之百
  31. print('{0:.2%}'.format(0.3)) #百分号表示
  32. print('{{{0}}}'.format('笑脸')) # 显示大括号。 外部套2层大括号

  33. # ==== 执行结果 ====

  34. """
  35. 姓名是yunya,年龄是18
  36. 姓名是18,年龄是yunya
  37. 姓名是yunyayunyayunya,年龄是181818
  38. 姓名是yunya,年龄是18
  39. |||*******
  40. %%%%%%%|||
  41. $$$|||$$$$
  42. $$$$$$$123
  43. 3.14
  44. 1010
  45. a
  46. 12
  47. 1,000,000
  48. 100.00%
  49. 30.00%
  50. {笑脸}
  51. """

Python3 - f


  尽管format()已经非常方便了。但是如果传入的参数值太多依旧会看着十分混乱,于是Python3.6中新增了 f 格式字符串的操作。这种方法的速度最快,但是却不推荐使用,因为程序还要考虑一个向下兼容性的问题

  1. # ==== f 格式化 ====

  2. name = "yunya"
  3. age = 18

  4. msg = f'我的名字叫做{name},我的年龄是{age}岁。' # f 开头。 {} 为占位符用于存放变量名。
  5. print(msg)
  6. # 其他的关于高级操作如填充字符,精度控制与格式转换等等均与format()操作方式一样。

  7. # ==== 执行结果 ====

  8. """
  9. 我的名字叫做yunya,我的年龄是18岁。
  10. """

算术运算符

+ - * /


  详细举例每种数据类型支持的运算符:

+ 加法运算:

    intint float(生成floatbool

    floatfloat int bool

    boolbool int float (均生成intfloat

    listlist(改变元素内index的引用值,而不改变list对应栈区变量名的引用值)

    strstr(由于是不可变类型,生成新的str

    tuple:tuple (由于是不可变类型,生成新的tuple

  1. # ==== + 加法运算 ====

  2. # 以下代码均在Pycharm中测试通过

  3. print(1 + 1)
  4. print(1 + 1.1)
  5. print(1 + True)
  6. print([1, 2, 3] + [4, 5, 6])
  7. print('OldStr ' + ' NewStr') # 改变引用值,生成新对象
  8. print((1, 2, 3) + (4, 5, 6)) # 改变引用值,生成新对象

  9. # ==== 执行结果 ====

  10. """
  11. 2
  12. 2.1
  13. 2
  14. OldStr
  15. NewStr
  16. [1, 2, 3, 4, 5, 6]
  17. (1, 2, 3, 4, 5, 6)
  18. """

+ 加法运算

- 减法运算:

    intint float(生成floatbool

    floatfloat int bool

    boolbool int float (均生成intfloat)

  1. # ==== - 加法运算 ====

  2. # 以下代码均在Pycharm中测试通过

  3. print(1 - 1)
  4. print(1 - 1.1)
  5. print(1 - True)

  6. # ==== 执行结果 ====

  7. """
  8. 0
  9. -0.10000000000000009
  10. 0
  11. """

- 加法运算

* 乘法运算:

    intint float(生成floatbool list(生成list不改变原本引用值) str(新生成str改变原本引用值)tuple(新生成tuple改变原本引用值)

    floatfloat int bool

    bool: bool int float

    list: int (生成list不改变原本引用值)

    str: int (新生成str改变原本引用值)

    tuple: int (新生成str改变原本引用值)

  1. # ==== * 乘法运算 ====

  2. # 以下代码均在Pycharm中测试通过

  3. s1 = '#'
  4. l1 = [1,2,3]
  5. t1 = (1,2,3)

  6. print(1 * 2)
  7. print(1 * 2.0)
  8. print(1 * True)
  9. print(3 * l1)
  10. print(3 * s1) #改变引用值,生成新的str对象
  11. print(3 * t1) #改变引用值,生成新的tuple对象

  12. # ==== 执行结果 ====

  13. """
  14. 2
  15. 2.0
  16. 1
  17. [1, 2, 3, 1, 2, 3, 1, 2, 3]
  18. ###
  19. (1, 2, 3, 1, 2, 3, 1, 2, 3)
  20. """

/ 精确除法运算 Ps: 一律生成float

    int: int float bool     注意:0 不能做 除数

    float: float int bool   注意:0.0 不能做除数

    bool: bool int float     注意:False不能做 除数

  1. # # ==== / 精确除法运算 ====

  2. # 以下代码均在Pycharm中测试通过

  3. print(10 / 2)
  4. print(10 / 2.0)
  5. print(10.1 / True)
  6. print(10.1 / True)
  7. print(10.1 / True)
  8. print(10.1 / True)
  9. print(False / 10)
  10. print(True / 2)
  11. print(True / 2.0)

  12. # ==== 执行结果 ====

  13. """
  14. 5.0
  15. 5.0
  16. 10.1
  17. 10.1
  18. 10.1
  19. 10.1
  20. 0.0
  21. 0.5
  22. 0.5
  23. """

/ 精确除法运算

// ** %


  // 整数除法运算(向下取整) 与精确除法的可用数据类型相同 ,除开 2 个float类型 做运算为float 其他运算结果全是int

  ** 幂运算(次方运算) 只支持 int float bool 三种类型。

  % 求余 只支持 int float bool 三种类型。如果被求余数小于求余数,那么余数就为被求余数本身

  重点 方法介绍:divmod() 相当于整除法与求余法的糅合

  1. >>> # ==== divmod()示例 ====
  2. >>>
  3. >>> divmod(10,3) # 商3余1
  4. (3, 1)
  5. >>> 1 % 10 #被求余数小于求余数。结果为其本身
  6. 1
  7. >>>

赋值运算符与赋值的方式

增量赋值


  赋值符号本身就是一个 = 号。左边是变量名,右边是变量值这个没什么好说的了。增量赋值就是将赋值符号和算术运算符结合起来达到简写的目的:

  1. # ==== 增量运算符与普通算术运算符对应关系及使用方式 ====

  2. # 以下代码均在Pycharm中测试通过

  3. x = 1
  4. x = x + 10 # x += 1
  5. x = x - 10 # x -= 1
  6. x = x * 10 # x *= 1
  7. x = x / 10 # x /= 1
  8. x = x // 10 # x //= 1
  9. x = x ** 10 # x **= 1
  10. x = x % 10 # x %= 1

链式赋值


  链式赋值也被称为间接赋值:

  1. >>> # ==== 链式赋值使用方式 ====
  2. >>>
  3. >>> x = y = z = 100 # 经常使用的一种链式赋值方式
  4. >>> x
  5. 100
  6. >>> y
  7. 100
  8. >>> z
  9. 100
  10. >>> i = 100 # 链式赋值也被称为间接赋值
  11. >>> j = i
  12. >>> i
  13. 100
  14. >>> j
  15. 100
  16. >>>

链式赋值使用方式

交叉赋值


  交叉赋值是Python独有的一种语法:

  1. >>> # ==== 交叉赋值使用方式 ====
  2. >>>
  3. >>> x = 100
  4. >>> y = 1000
  5. >>> x,y = y,x #互换2个变量名绑定的内存地址,即变量值的引用
  6. >>> y
  7. 100
  8. >>> x
  9. 1000
  10. >>>

交叉赋值使用方式

解压赋值


  解压赋值一般只是用来拿到列表或者元组中开头或结尾的一些数据:

  1. >>> # ==== 解压赋值使用方式 ====
  2. >>>
  3. >>> l1 = [1,2,3,4]
  4. >>> w,x,y,z = l1
  5. >>> w
  6. 1
  7. >>> x
  8. 2
  9. >>> y
  10. 3
  11. >>> z
  12. 4
  13. >>> a,b,*_ = l1 #取出前面2个值。字符 * 代表取所有以列表形式返回,变量名为单下划线 _ 表示废弃值不会使用。
  14. >>> a
  15. 1
  16. >>> b
  17. 2
  18. >>>
  19. >>> *_,c,d = l1 #取出后面2个值
  20. >>> c
  21. 3
  22. >>> d
  23. 4
  24. >>>

解压赋值使用方式

为什么解压赋值不能拿中间的值呢?因为解压赋值依赖于字符 * 。假设列表长度为10,我要取第5个和第6个,那么前面就必须要有4个变量存储列表中解压出来的前4个值。这么做很麻烦所以一般不会用解压赋值取中间的值。

  不光可以对列表进行解压赋值,字典也同样可以。但是字典的解压赋值只会取出key

  1. >>> # ==== 对字典的解压赋值 ====
  2. >>>
  3. >>> dic = {"k1":"v1","k2":"v2","k3":"v3"}
  4. >>> a,b,c = dic #只取key
  5. >>> dic
  6. {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}

对字典的解压赋值

比较运算符

> < == != >= <=


  比较运算符一般是用于比较相同数据类型的2个值。返回一个bool类型的值(True或者False),常用于条件分支结构中。

  > 大于

  < 小于

  == 等于 (注意 = 是赋值符号,不可用于比较运算)

  != 不等于

  >= 大于或者等于

  <= 小于或者等于

  1. >>> # ==== 比较运算符的使用 ====
  2. >>>
  3. >>> 1 < 2
  4. True
  5. >>> 1 > 2
  6. False
  7. >>> 1 == 1.0
  8. True
  9. >>> 1 == True
  10. True
  11. >>>

比较运算符的使用

关于字符串之间的比较


  请解释以下现象:

  1. >>> "" < "" #字符串比较也是按照索引来比,一位一位去比
  2. True
  3. >>> ("",) > ("","b") #元组之间,或者列表之间的比较都是对同一索引下的值做比较。如果值是字符串则继续分成一位一位比,如果是int或者float则直接进行比较。
  4. False
  5. >>>

  由于是字符串,所以按照index继续一位一位比较。

  由于是数字,所以比整体。

  其实上面的比较只是初步的比较。详细一点就来讨论单个字符与单个字符之间的比较是怎么进行的,首先。如果两个都是字符串,则对比索引按位比较没问题。比如:"y" 单个字符对比 "k",那么又是依照什么对比呢?其实这里涉及到一个ASCII码的概念。它们的这个字符就是通过ASCII码来对比。

  1. >>> ord("y") # 字符转ASCII的函数ord() , ASCII转字符则是 chr()
  2. 121
  3. >>> ord("k")
  4. 107
  5. >>> "y" > "k"
  6. True
  7. >>>

逻辑运算符

not and or


  逻辑运算符的作用在于做一系列逻辑判断,常用于分支结构与流程控制中,所以这里也是先引出概念,其中not代表非,and代表与,or代表否则。

  1. >>> # === 逻辑运算符的使用 ====
  2. >>>
  3. >>> not True # not 我不管你是什么,在我这里只取反
  4. False
  5. >>> not False
  6. True
  7. >>> True and True # and 一真一假取一假,全部为真才取真
  8. True
  9. >>> True and False
  10. False
  11. >>> False and False
  12. False
  13. >>> True or True # or 一真一假取一真,全部为假才取假
  14. True
  15. >>> True or False
  16. True
  17. >>> False or False
  18. False
  19. >>>

打油诗一首

作者:云崖

not 我不管你是什么,在我这里只取反

and 一真一假取一假,全部为真才取真。

or 一真一假取一真,全部为假才取假。

  我们看一个很有趣的比喻:

  1. # === not and or 优先级 ===

  2. '''
  3. 二狗子要找女朋友,

  4. 年龄不能大于25岁,这个是前提!!,
  5. 身高不能超过170或者体重不能超过60公斤。

  6. 请问下面那个符合二狗子的需求?
  7. '''

  8. xiaoli = {'age':30,'height':158,'weight':90}
  9. xiaohua = {'age':38,'height':190,'weight':50}
  10. xiaocui = {'age':22,'height':164,'weight':58}

  11. # 人能一眼就看出来。计算机还要做一系列的判断呢

  12. print(xiaoli['age']<25 and xiaoli['height']<170 or xiaoli['weight']<60) # False
  13. print(xiaohua['age']<25 and xiaohua['height']<170 or xiaohua['weight']<60) # True 小花按理说是不符合二狗子要求的,为什么通过了呢?
  14. print(xiaocui['age']<25 and xiaocui['height']<170 or xiaocui['weight']<60) # True

not and or 优先级

  原来是优先级搞的鬼,我们先不管优先级是什么。使用括号()可以提升优先级,这和小学数学的四则运算是相同的道理

  1. # ==== 使用括号修改原本 not and or 的优先级 ====

  2. print(xiaoli['age']<25 and (xiaoli['height']<170 or xiaoli['weight']<60)) # False
  3. print(xiaohua['age']<25 and (xiaohua['height']<170 or xiaohua['weight']<60)) # False 这样就好了,二狗子没有被骗 ... 注意加了括号改变了优先级
  4. print(xiaocui['age']<25 and (xiaocui['height']<170 or xiaocui['weight']<60)) # True

使用括号修改原本 not and or 的优先级

区分优先级


  好了,通过上面的例子我们知道了有优先级这个概念。那么什么是优先级呢?

  优先级就是对于在 有 2 种或者以上的逻辑运算符时决定符号右侧数值的归属权的问题。如下图:

  关于优先级就先到这里了。其他的还有一个偷懒机制名叫短路运算,待会介绍。

其他运算符

成员运算符


  in 判断一个元素是否在不在另一个集合之中(strlisttupledictset),也是用于分支结构之中,这里依旧是引出概念:

  1. >>> # ==== in 与 not 的结合使用 ====
  2. >>>
  3. >>> str1 = "abcdefg"
  4. >>> list1 = ["a","b","c"]
  5. >>> tuple1 = ("a","b","c")
  6. >>> dict1 = {"a":1,"b":2,"c":3}
  7. >>> set1 = {"a","b","c","d"}
  8. >>> "a" in str1
  9. True
  10. >>> "a" not in str1
  11. False
  12. >>> "a" in list1
  13. True
  14. >>> "a" not in list1
  15. False
  16. >>> "a" in tuple1
  17. True
  18. >>> "a" not in tuple1
  19. False
  20. >>> "a" in dict1 #只会检索字典的key,不会去检索value
  21. True
  22. >>> "a" not in dict1
  23. False
  24. >>> "a" in set1
  25. True
  26. >>> "a" not in set1
  27. False
  28. >>>

in 与 not 的结合使用

身份运算符


  is 判断对象引用值是否相等,并非形式值。(引用值相同代表2个值数据存储在同一堆区内存),故引用值相等的情况下形式值一定相等,形式值相等的情况下引用值不一定相等。具体可看Python变量与基本数据类型一章。

  1. >>> # ==== is的使用 ====
  2. >>>
  3. >>> x=y=z=10000
  4. >>> x is y
  5. True
  6. >>> x is z
  7. True
  8. >>> y is x
  9. True
  10. >>> y is z
  11. True
  12. >>>

is的使用

逻辑运算符之短路运算

  关于逻辑运算符还有一个短路运算没有说完。

  如果一次逻辑运算中的逻辑运算符号全部为 and 或者 or 则会从左至右依次进行逻辑运算。如果每一次都进行运算是很消耗时间的,所以这个时候出现了短路机制。看图说话:

参考文献

  Python格式字符串的四种方式:

  第四种方式:基于安全性考虑用户输入的问题,原文介绍很详细感兴趣的朋友可以自行观看

  https://zhuanlan.zhihu.com/p/110406030

I/O格式化与运算符的更多相关文章

  1. Python基础篇(格式化输出,运算符,编码):

    Python基础篇(格式化输出,运算符,编码): 格式化输出: 格式:print ( " 内容%s" %(变量)) 字符类型: %s  替换字符串      %d 替换整体数字  ...

  2. while循环 格式化输出 运算符 编码

    一.while循环 1.基本结构 while 条件:            循环体   流程: 判断条件是否为真. 如果真, 执行代码块. 然后再次判断条件是否为真 .如果真继续执行代码块....  ...

  3. Python学习day2 while循环&格式化输出&运算符

    day2 运算符-while循环 1.while循环 while循环基本结构; while 条件:      结果    # 如果条件为真,那么循环则执行    # 如果条件为假,那么循环不执行 de ...

  4. DAY2---Python---While循环,格式化输出,运算符,编码

    一.while循环 while 条件: 代码块(循环体) 流程:判断条件是否为真,如果是真,执行代码块.然后再次判断条件是否为真,如果为真继续执行代码块... 直到条件变成了假,退出循环 #死循环:永 ...

  5. python之while循环/格式化输出/运算符/初始编码/成员变量

    一.主要内容:1.while 循环 (难点)while 条件: 循环体 break: 直接跳出循环continue:停止当前本次循环,继续执行下一次循环.不会中断循环能让循环退出:(1)break ( ...

  6. python---02.while循环 格式化输出 运算符 编码

    一.while循环语句 1.while 条件:(如果条件是真, 则直接执⾏循环体. 然后再次判断条件. 直到条件是假. 停⽌循环) 循环体(break  continue) 2. break: 立刻跳 ...

  7. python记录_day02 while循环 格式化 基本运算符

    一.流程控制之while循环 语法: while 条件: 循环体 else: else语句(当条件不成立的时候执行这里 和break没关系) 判断条件是否成立. 如果成立执行循环体.然后再次判断条件, ...

  8. while 循环,格式化输出,运算符(not,and,or)

    一,while 循环 1. 循环. while循环 while 条件: 代码块(循环体) 执行流程: 1. 判断条件是否为真. 如果真. 执行代码块 2. 再次判断条件是否为真...... 3. 当条 ...

  9. python全栈 流程控制;while 循环 格式化输出 运算符 及编码

    python全栈开发 1循环 2break和continue的区别 3格式化输出 4运算符 5编码 一.流程控制while循环 while条件: 代码块(循环体) 1.死循环; while True; ...

随机推荐

  1. CentOS安装Python3.5

    1.  安装python3.5可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel s ...

  2. MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图

    一:背景 1. 讲故事 最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlser ...

  3. 个人记录HTML基础笔记

    无功能性标签 en strong 都表示强调,strong强调级更高 abbr 缩写 <abbr title="wangweiwang">w3c</annr> ...

  4. SpringBoot学习笔记(十五:OAuth2 )

    @ 目录 一.OAuth 简介 1.什么是OAuth 2.OAuth 角色 3.OAuth 授权流程 4.OAuth授权模式 4.1.授权码 4.2.隐藏式 4.3.密码式 4.4.凭证式 二.实践 ...

  5. Java实现 蓝桥杯 算法提高 歌唱比赛(暴力)

    试题 算法提高 歌唱比赛 问题描述 X市正在进行歌唱比赛,请你写一个程序计算得分. 每名选手从1到N编号,每名选手的综合成绩由以下几个部分组成: 1.歌唱得分占70% 2.才艺展示得分占20% 3.观 ...

  6. Java实现 LeetCode 715 Range 模块(选范围)

    715. Range 模块 Range 模块是跟踪数字范围的模块.你的任务是以一种有效的方式设计和实现以下接口. addRange(int left, int right) 添加半开区间 [left, ...

  7. Java实现 LeetCode 629 K个逆序对数组(动态规划+数学)

    629. K个逆序对数组 给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数. 逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < ...

  8. Java实现 LeetCode 553 最优除法(思路问题)

    553. 最优除法 给定一组正整数,相邻的整数之间将会进行浮点除法操作.例如, [2,3,4] -> 2 / 3 / 4 . 但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级.你需要 ...

  9. Java实现 LeetCode 139 单词拆分

    139. 单词拆分 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可 ...

  10. java实现低碳生活大奖赛

    某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪: 每位选手需要回答 10 个问题(其编号为 1 到 10),越后面越有难度. 答对的,当前分数翻倍:答错了则扣掉与题号相同的分数(选手必须回答问题 ...