3. Python开发【第三篇】:基本数据类型(数字、字符串)-2020.11.05

一、python开发的IDE:
  1.pycharm(安装之后不需要再装任何额外的插件)、eclipse(安装之后需要装很多额外的插件);
  2.pycharm需要安装专业版的,不要汉化否则有些功能无法使用;
  3.基本操作:创建文件夹(创建新Directory),创建python文件(创建新Python File),运行(方式4种);
  修改字体大小写(2种:Settings-Font-size;通过Ctrl+滑动鼠标调整字体大小);
  在pycharm中直接找到PC上对应放置的python文件(选中,右键选择show in Explorer);
  显示行号(点击目录和代码之间的地方,右键选择Show Line Numbers);
  部分代码一起注释掉或去掉注释(选中-Ctrl+?或/);

二、运算符
  1.+ - * / //(取商) %(取余) **(次方)
  2.in not in #判断某个东西是否在某个东西里面包含
  name = "郑建文"
  "郑建文" #是一个字符串,其中郑是其中的一个字符,一个汉字是一个字符
  “郑” 、“建文” #是子字符串或子序列

 1 if “建文” in nane:
 2     print('OK')
 3 else:
 4     print(''Error)
 5         
 6 if “建文” in nane:
 7     print('OK')
 8 else:
 9     print(''Error)
10             
11 if "郑文" not in name:
12     print('1')
13 else:
14     print('2')

  in和not in的结果是布尔值
    1.== > < >= <= !=(不等于) <>(不等于) v = not False(非),的结果也是布尔值
    2.注意:布尔值有2个值,True(真) False(假)

1 if True:
2     pass
3 while True:
4     pass

 

三.不同运算的结果类型不同
  结果是数值:
    算术运算:a = 10 * 10
    赋值运算:a = a + 1 a+=1
  结果是布尔值:
    比较运算:a = 1 > 5
    逻辑运算:a = 1 > 6 or 1 == 1
    成员运算:a = "蚊" in “郑建文”
  补充:逻辑运算
    执行顺序:先计算括号里面的,从前到后
      结果:
        True OR ==>True
        True AND ==>继续走
        False OR ==>继续走
        False AND ==>False
    例:user = “alex”
      pwd = “123”
      v = not False (True)
      v = user == “alex” or pwd == “123” (True)
      v = user == “alex” and (pwd == “123” or 1 == 2) (True)
      v = user == "alex" and pwd == "1234" or 1 == 1 and pwd == "99854" and 1 == 2 (False)
      print(v)

四. 基本数据类型

  ① 数字 int ,所有的功能,都放在int里
    a1 = 123
    a2 = 456
  - int
  将字符串转换为数字

 1 a = "123"
 2 print(type(a),a)  #<class 'str'> 123
 3 
 4 b = int(a)
 5 print(type(b),b) 6 
 7 num = "0011" 
 8 v = int(num, base=16)  #base是按照n进制输出,按照16进制(0-9,a,b,c,d,e,f,其中a对应的是10)输出是17(16的0次方+16的一次方),按照10进制输出是11,按照2进制输出是3;
 9 print(v)

  当前数字的二进制,至少用n位表示

1 num = "0011"
2 v = int(num, base=16)
3 print(v)               #17
4 r = v.bit_length()     #当前数字的二进制,至少用n位表示
5 print(r)               #5(备注17用二进制表示是10001)

 

② 字符串 str

################################################

1 首字母大写(只将首字母大写,其它的全部都小写,无论之前是大写还是小写)

1 test = "aLex"
2 v = test.capitalize()
3 print(v)     #输出Alex

2 所有变小写,casefold更牛逼,很多未知的对相应变小写

1 str1 = "I Love Python"
2 str2 = "Groß - α" #德语
3 print(str1.casefold())     #输出i love python
4 print(str1.lower())        #输出i love python
5 print(str2.casefold())     #输出gross - α,casefold()可将特殊的大写字母转换为小写字母
6 print(str2.lower())        #输出groß - α,lower()不能将德语的大写字母转换为小写字母

3 设置宽度,并将内容居中

1 # * 空白未知填充,一个字符,可有可无
2 test = "aLEX"
3 v = test.center(20,"")  #20 代指总长度
4 print(v)                  #输出中中中中中中中中aLEX中中中中中中中中

 

 1 test = "alex"                #左靠齐
 2 v = test.ljust(20,"*")       #输出alex****************
 3 print(v)                     
 4 
 5 test = "alex"                #右靠齐
 6 v = test.rjust(20,"*")       #输出****************alex
 7 print(v)
 8 
 9 test = "alex"                #默认右靠齐,用0填充
10 v = test.zfill(20)           #输出0000000000000000alex
11 print(v)


4 去字符串中寻找,寻找子序列的出现次数

1 test = "aLexalexr"
2 v = test.count('ex')     #输出2,'ex'出现2次
3 print(v)
4 
5 test = "aLexalexr"
6 v = test.count('ex',5,6) #输出0,范围start=5,end=6,从0开始
7 print(v)

#
# encode
# decode

5 以什么什么结尾,以什么什么开始

1 test = "alex"
2 v = test.endswith('ex')        #True
3 v = test.startswith('ex')      #False
4 print(v)

6 expandtabs,断句20

1 test = "username\temail\tpassword\nlaiying\tying@q.com\t123\nlaiying\tying@q.com\t123\nlaiying\tying@q.com\t123"
2 v = test.expandtabs(20)     #以20断句,\t分隔符,\n换行
3 print(v)
username            email               password
laiying             ying@q.com          123
laiying             ying@q.com          123
laiying             ying@q.com          123

7 从开始往后找,找到第一个之后,获取其位置

1 test = "alexalex"
2 v = test.find('ex')      #输出2;未查找到时输出-1;从开始往后找,找到第一个之后,获取第一个字符的位置,并停止查找;
3 print(v)

8 index输出相关字符的索引,找不到字符,报错

1 test = "alexalex"
2 v = test.index('e')     #输出2,从开始往后找,找到第一个后,获取其索引位置,并停止查找;未找到时,报错;
3 print(v)

9 格式化,将一个字符串中的占位符替换为指定的值

1 test = 'i am {name}, age {a}'
2 print(test)                             #i am {name}, age {a}
3 v = test.format(name='alex',a=19)
4 print(v)                                #i am alex, age 19
5 
6 test = 'i am {0}, age {1}'            
7 print(test)                             #i am {0}, age {1}
8 v = test.format('alex',19)
9 print(v)                                #i am alex, age 19

10 格式化,传入的值 {"name": 'alex', "a": 19}

1 test = 'i am {name}, age {a}'
2 v1 = test.format(name='df',a=10)
3 v2 = test.format_map({"name": 'alex', "a": 19})
4 print(v1,v2)       #输出i am df, age 10 i am alex

11 字符串中是否只包含 字母和数字

1 test = "123abc"
2 v = test.isalnum() #alphabet字母,number数字
3 print(v)           #True
4 test = "123abc@"
5 v = test.isalnum()
6 print(v)           #False

12 字符串中是否只包含 字母,汉字

1 test = "as2df"
2 v = test.isalpha()    
3 print(v)              #输出False
4 
5 test = "as国df"
6 v = test.isalpha()
7 print(v)              #输出True

13 当前输入是否是数字

1 num = "1"  #unicode
2 v1 = num.isdigit()   # True
3 v2 = num.isdecimal() # True
4 v3 = num.isnumeric() # True
5 print(v1,v2,v3)
1 num = "1" # 全角
2 v1 = num.isdigit()   # True
3 v2 = num.isdecimal() # True
4 v3 = num.isnumeric() # True
5 print(v1,v2,v3)
1 num = b"1" # byte
2 v1 = num.isdigit()   # True
3 v2 = num.isdecimal() # AttributeError 'bytes' object has no attribute 'isdecimal'
4 v3 = num.isnumeric() # AttributeError 'bytes' object has no attribute 'isnumeric'
5 print(v1,v2,v3)
1 num = "" # 非普通数字字符②
2 v1 = num.isdigit()   # True
3 v2 = num.isdecimal() # False
4 v3 = num.isnumeric() # True
5 print(v1,v2,v3)
1 num = "" # 汉字数字、罗马数字Ⅳ
2 v1 = num.isdigit()   # False
3 v2 = num.isdecimal() # False
4 v3 = num.isnumeric() # True
5 print(v1,v2,v3)

isdecimal(),如果字符串是否只包含十进制字符返回 True,否则返回 False;

isdigit(),如果字符串只包含数字则返回 True 否则返回 False;

isnumeric(),如果字符串中只包含数字字符,则返回 True,否则返回 False。

isdigit()

True: Unicode数字,byte数字(单字节),全角数字(双字节),非普通数字字符②

False: 汉字数字、罗马数字

Error: 无

isdecimal()

True: Unicode数字,,全角数字(双字节)

False: 罗马数字,汉字数字、非普通数字字符②

Error: byte数字(单字节)

isnumeric()

True: Unicode数字,全角数字(双字节),罗马数字,汉字数字、非普通数字字符②

False: 无

Error: byte数字(单字节)

14 是否存在不可显示的字符

1 #如果字符串中的所有字符都是可打印的字符或字符串返回 True,否则返回 False。
2 test = "oiuas\tdfkj"       #\t 制表符,\n 换行符不可打印(不可显示)
3 v = test.isprintable()
4 print(v)                   # 制表符 False

15 判断是否全部是空格

1 test = ""
2 v = test.isspace()   #字符串中,全是空格返回True;
3 print(v)             #无空格,输出False
4 test = " a"
5 v = test.isspace()
6 print(v)             #有空格,但不全是空格,输出False
7 test = " "
8 v = test.isspace()
9 print(v)             #只有空格,输出True

16 判断是否是标题

1 test = "Return True if all cased characters in S are uppercase and there is"
2 v1 = test.istitle()   #是标题(所有的首字母大写),返回 True,否则返回 False;
3 print(v1)             #输出False
4 v2 = test.title()
5 print(v2)             #输出Return True If All Cased Characters In S Are Uppercase And There Is
6 v3 = v2.istitle()
7 print(v3)             #输出True

17 ***** 将字符串中的每一个元素按照指定分隔符进行拼接

1 test = "你是风儿我是沙"
2 print(test)             #输出你是风儿我是沙
3 v = "_".join(test)
4 print(v)                #输出你_是_风_儿_我_是_沙

18 判断是否全部是大小写 和 转换为大小写

1 test = "Alex"
2 v1 = test.islower()
3 v2 = test.lower()
4 print(v1, v2)       #输出False alex
5 
6 v1 = test.isupper()
7 v2 = test.upper()
8 print(v1,v2)        #输出False ALEX

19 移除指定字符串,有限最多匹配

 想去掉字符串里面的哪些字符,那么就把这些字符当参数传入,此函数只会删除头和尾的字符,中间的不会删除,

 如果strip()的参数为空,那么会默认删除字符串头和尾的空白字符(包括空格,\t,\n,\r(回车)这些);

1 test = "\t\n\r   fexax   \t\n\r"
2 v1 = test.lstrip()       #输出fexax       ,去除左端的空白\t \n
3 v2 = test.rstrip()       #输出   fexax,去除右端的空白\t \n
4 v3 = test.strip()        #输出fexax,去除左右两端的空白\t \n
5 print(v1,v2,v3)
1 # 有限最多匹配(可单个匹配,可多个匹配)
2 test = "fexax"
3 v1 = test.lstrip('xa')           #输出fexax
4 v2 = test.rstrip('9lexxexa')     #输出f
5 v3 = test.strip('xa')            #输出fe
6 print(v1,v2,v3)

20 对应关系替换

1 test = "aeiou"
2 test1 = "12345"
3 v = "asidufkasd;fiuadkf;adfkjalsdjf"
4 m = str.maketrans("aeiou", "12345")
5 #用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,
6 #第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标;
7 #两个字符串的长度必须相同,为一一对应的关系(如a被转换为1)。
8 new_v = v.translate(m)
9 print(new_v)                  #输出1s3d5fk1sd;f351dkf;1dfkj1lsdjf

21 分割为三部分

1 #这两个函数都接收一个分割字符串作为参数,将目标字符串分割为两个部分,返回一个三元元组(head,sep,tail),包含分割符。
2 #细微区别在于rpartition从目标字符串的末尾也就是右边开始搜索分割符。
3 test = "testasdsddfg"
4 v = test.partition('s')
5 print(v)                     #输出('te', 's', 'tasdsddfg')
6 v = test.rpartition('s')
7 print(v)                     #输出('testasd', 's', 'ddfg')

22 分割为指定个数

1 test = "testasdsddfg"
2 v1 = test.split('s',2)   #split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串;
3 print(v1)                #输出['te', 'ta', 'dsddfg']
4 v2 = test.rsplit('s',2)
5 print(v2)                #输出['testa', 'd', 'ddfg']

23 分割,只能根据,true,false:是否保留换行

1 #splitlines() 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,
2 # 如果参数 keepends 为 False(默认),不包含换行符,如果为 True,则保留换行符。
3 test = "asdfadfasdf\nasdfasdf\nadfasdf"
4 v1 = test.splitlines(False)   #输出['asdfadfasdf', 'asdfasdf', 'adfasdf']
5 v2 = test.splitlines(True)    #输出['asdfadfasdf\n', 'asdfasdf\n', 'adfasdf']
6 print(v1,v2)

24 以xxx开头,以xx结尾

1 test = "backend 1.1.1.1"
2 v1 = test.startswith('b')
3 print(v1)                  #输出True
4 v2 = test.endswith('b')
5 print(v2)                  #输出False

25 大小写转换

1 test = "aLEx"
2 v = test.swapcase()   #输出AleX
3 print(v)

26 字母,数字,下划线 : 标识符 def class

 1 #isidentifier() 方法用于判断字符串是否是有效的 Python 标识符,可用来判断变量名是否合法;
 2 #如果字符串是有效的 Python 标识符返回 True,否则返回 False。
 3 a = "def"
 4 v = a.isidentifier()
 5 print(v)                            #True
 6 print( "if".isidentifier() )        # True
 7 print( "def".isidentifier() )       # True
 8 print( "class".isidentifier() )     # True
 9 print( "_a".isidentifier() )        # True
10 print( "中国123a".isidentifier() )   # True
11 print( "123".isidentifier() )       # False
12 print( "3a".isidentifier() )        # False
13 print( "".isidentifier() )          # False

27 将指定字符串替换为指定字符串

1 #replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),
2 # 如果指定第三个参数max,则替换不超过 max 次。
3 test = "alexalexalex"
4 v = test.replace("ex",'bbb')
5 print(v)                             #输出albbbalbbbalbbb
6 v = test.replace("ex",'bbb',2)
7 print(v)                             #输出albbbalbbbalex

###################### 7个基本魔法 ################################
# join # '_'.join("asdfasdf")
# split
# find
# strip
# upper
# lower
# replace
###################### 4个灰魔法 ##################################

1 for循环

# for 变量名 in 字符串:
# 变量名
# break         跳出循环体
# continue    跳出单次循环

 1 test = "郑建文妹子有种冲我来"
 2 index = 0
 3 while index < len(test):
 4     v = test[index]
 5     print(v)
 6     index += 1
 7 print('=======')     
 8 #输出
 9 10 11 12 13 14 15 16 17 18 19 =======
 1 test = "郑建文妹子有种冲我来"
 2 for zjw in test:
 3     print(zjw)
 4 #输出
 5  6  7  8  9 10 11 12 13 14
1 test = "郑建文妹子有种冲我来"
2 for item in test:
3     print(item)
4     break
5 #输出
6
1 test = "郑建文妹子有种冲我来"
2 for item in test:
3     continue
4     print(item)        #什么也不输出

2 索引,下标,获取字符串中的某一个字符

1 test = "郑建文妹子有种冲我来"
2 v = test[3]
3 print(v)     #输出妹,索引下标从0开始

3 切片

1 test = "郑建文妹子有种冲我来"
2 v = test[0:-1] # 0=<范围<-1,输出郑建文妹子有种冲我
3 print(v)

4 获取长度

1 test = "郑建文妹子有种冲我来"
2 v = len(test)                  #Python3: len获取当前字符串中由几个字符组成
3 print(v)

# 注意:
# len("asdf")
# for循环
# 索引
# 切片

5 获取连续或不连续的数字

 1 Python2中直接创建在内容中
 2 python3中只有for循环时,才一个一个创建
 3 格式一:range(stop)
 4 格式二:range(start, stop[, step])
 5 start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
 6 stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
 7 step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
 8 r1 = range(10)           #输出range(10),对应0-9
 9 r2 = range(1,10)         #输出range(1,10),对应1-9
10 r3 = range(1,10,2)       #输出range(1,10,2),对应1,3,5,7,9
11 print(r1,r2,r3)
12 帮助创建连续的数字,通过设置步长来指定不连续
13 v = range(0, 100, 5)
14 for item in v:
15 print(item)             #输出0,5,10,15,20...90,95

##### 练习题:根据用户输入的值,输出每一个字符以及当前字符所在的索引位置 ##################

1 test = input(">>>")
2 for item in test:
3     print(item)
1 # 将文字对应的索引打印出来:
2 test = input(">>>")
3 print(test) # test = qwe test[0] test[1]   #输入qwe
4 l = len(test) # l = 3
5 print(l)                                   #输出3
6 r = range(0,l) # 0,3
7 for item in r:
8     print(item,test[item]) # 0 q,1 w,2 e
1 test = input(">>>")
2 for item in range(0, len(test)):
3     print(item, test[item])

###################### 1个深灰魔法 ################################################
# 字符串一旦创建,不可修改
# 一旦修改或者拼接,都会造成重新生成字符串

1 name = "zhengjianwen"
2 age = "18"
3 info = name + age
4 print(info)          #输出zhengjianwen18

列表 list
...
元祖 tuple
...
字典 dict
...
布尔值 bool
...

----> 列表,元祖,字典,布尔值 详细操作见下章

 

posted @ 2020-11-06 11:25  chunlimei  阅读(220)  评论(0)    收藏  举报