Python3 字符串+除法+逻辑运算符+身份运算符+_+round()

初学python,发现了一些有意思的地方,记录一波,一些错误地方也希望得到大佬指导。

String 字符串

  Python中的字符串用单引号 ’ 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。如果你不想让反斜杠发生转义,可以在字符串前面添加一个r,表示原始字符串:

>>> print('One Two Three\nFour Five Six')
One Two Three
Four Five Six
>>> print(r'One Two Three\nFour Five Six')
One Two Three\nFour Five Six



  Python 没有单独的字符类型,一个字符就是长度为1的字符串。
  与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值会导致错误。但可以重新赋值。

>>> string1  = 'I love you'
>>> string1[4]
'v'
>>> string1[4] = 'a'
Traceback (most recent call last):
  File "<pyshell#111>", line 1, in <module>
    string1[4] = 'a'
TypeError: 'str' object does not support item assignment
>>> string1 = 'abcde'
>>> string1
'abcde'



  字符串可以用+运算符连接在一起,用*运算符重复

>>> string1 = 'abcde'
>>> string1*2
'abcdeabcde'
>>> string2 = 'fghijk'
>>> string1+string2
'abcdefghijk'



  字符串截取的语法格式如下:

变量[头下标:尾下标:步长]

  索引值以 0 为开始值,-1 为从末尾的开始位置。截到尾下标前一个。遵循左闭右开原则

  如果头下标和尾下标均不填写,默认取全部字符

  如果头下标填写,尾下标不填写(或填写的值大于指针下标),默认从头下标开始截取,至字符串最后一个位置

  如果头下标不填写, 尾下标填写,默认从0位置开始截取,至b的前一个位置

  如果头下标为负数,默认从尾部某一位置,开始向后截取

  如果头下标>= 尾下标, 默认输出为空。

python中三种除法运算符号各自的特点_bc

>>> s1 = 'abcdefg'
>>> s1[0:-1]
'abcdef'
>>> s1[0]
'a'
>>> s1[0:]
'abcdefg'
>>> s1[2:5]
'cde'
>>> s1[2:]
'cdefg'
>>> s1[1::3]
'be'
>>> s1[:-2]
'abcde'
>>> s1[-3:]
'efg'
>>> s1[5:3]
''

  如果第三个参数为负数表示逆向读取,以下实例用于翻转字符串(结合List):

>>> input = 'I like runoob'
	"""
    通过空格将字符串分隔符,把各个单词分隔为列表
    string.split(str,num)
    str——分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
    num——分割次数。默认为 -1, 即分隔所有。
    """
>>> inputWords  = input.split(" ")
>>> inputWords #此时字符串变为了List,List和字符串一样,同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表
['I', 'like', 'runoob']
>>> inputWords  = inputWords[-1::-1] 
	"""
	第一个参数 -1 表示最后一个元素
    第二个参数为空,表示移动到列表末尾
    第三个参数为步长,-1 表示逆向
    """
>>> inputWords
['runoob', 'like', 'I']
    """
    重新组合字符串
    join()方法将序列中的元素以指定的字符(下面是以' '空格)连接生成一个新的字符串
    inputWords是要连接的元素序列
    """
>>> output = ' '.join(inputWords)
>>> output
'runoob like I'



除法

  数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。
  在整数除法中,除法 / 总是返回一个浮点数。
  //得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。

>>> 2 / 4  
0.5
>>> 2 // 4 
0
>>> -9//2 
-5
>>> -9//2.0
-5.0



逻辑运算符

  x and y #如果x为False,返回x的值,否则返回y的计算值
  x or y #如果x是True,返回x的值,否则返回y的计算值
  python中的and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值;
  or也是从左到有计算表达式,返回第一个为真的值;

>>> x = 10
>>> y = 20
>>> x and y
20
>>> x or y
10
>>> x = 0
>>> x and y
0
>>> x or y
20



身份运算符

  is/is not #判断两个标识符是不是引用自一个或不同对象。
  id()函数可用于获取对象内存地址。

>>> a = 100
>>> b = 100
>>> a == b
True
>>> id(a)
1635075839440
>>> id(b)
1635075839440
>>> a is b
True
>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> id(a)
1635114708880
>>> id(b)
1635115793136
>>> a is b
False

  可以发现a和b取值不同时进行同样的操作得到的结果不一样。这是因为Python对小的整数做了处理,在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当a和b超过这个范围的时候,两个变量就会指向不同的对象了,因此地址也会不一样。

>>>a = [1,2,3]
>>>b = a
>>>a is b
True
>>>b = a[0:]
>>>b
[1,2,3]
>>>a is b
False
>>>b == a
True

  这也是有意思的关于List的一个现象,但原理我还没有查到…姑且认为第一个是直接把a赋值给b,所以指向的地址相同,第二个是给b单独赋a的值,b就重新开辟了一个空间保存值。



_

  在交互模式中,最后被输出的表达式结果被赋值给变量 _ 。例如:

>>> a = 10
>>> b = 20
>>> a + b
30
>>> _
30
>>> _+a
40
>>> _
40

  此处, _ 变量应被用户视为只读变量
  实际情况是你也可以对于_ 赋值,_=10 是没有毛病的,但这样的结果会导致你在之后调用 _ 的时候全部变成了10,除非你 del _(可以使用del语句删除一些对象引用)

>>> _ = 10
>>> a = 10
>>> b = 20
>>> a+b
30
>>> _
10
>>> del _
>>> a+b
30
>>> _
30



round()

  round(x [,n]) #返回浮点数 x 的四舍五入值,如给出n值,则代表舍入到小数点后的位数(默认是整数)

>>> a = 10.123
>>> round(a)
10
>>> round(a,2)
10.12



>>> round(10.5)
10
>>> round(9.5)
10
>>> round(8.5)
8
>>> round(7.5)
8
>>> round(1001.5)
1002
>>> round(1000.5)
1000
>>> round(10.255,2)
10.26
>>> round(10.155,2)
10.15
>>> round(9.255,2)
9.26
>>> round(9.155,2)
9.15

  可以发现,round()有时对5舍有时又对5进。Why?
  从统计学的角度上来讲,如果大量数据无脑的采用四舍五入会造成统计结果偏大。而"奇进偶舍"可以将舍入误差降到最低,和浮点数存储也有关系。
  按我目前发现的规律,保留整数就看整数的奇偶性,奇数对5进位,偶数对5舍,对于小数,看保留前一位的奇偶性。
  感觉还是尽量避免使用比较好。