字符串的公共功能

1、长度,len()

string = "我想成为一名开发工程师!"
print(len(string))         # 输出12

2、索引

不可通过索引去修改一个值,可将一个字符串看做一个原子

string = "我想成为一名开发工程师!"
print(string[3])         # 输出 为
print(string[6])         # 输出 开

3、切片

注意点:切片大多数情况下只能由小到大进行切割,如下例子中“print(string[-1:-7])”  输出为空,但是“print(string[-10:-1])  ”输出不为空,因为-10与-1相比,-1较大,且-1在右侧,符合由小到大切割的规则(个人思想,不喜勿喷)。

string = "我想成为一名开发工程师!"
print(string[1:4])                   # 输出 想成为
print(string[2:11])                  # 成为一名开发工程师
print("===========")                 # ===========
print(string[-1:-7])                 # 输出为空  
print("===========")                 # ===========              
print(string[-10:-1])                # 成为一名开发工程师

4、步长

“a[x:y:z] z表示步长,不能为0,z<0时,x为空时默认为-1,即最后一位,y为空时默认为-len(aa)-1,即正数第一位,所以[::-1]表示最后一位到第一位,即倒序”,理解这句话,步长也就很容易了~

string = "我想成为一名开发工程师!"
print(string[1:10:2])                # 输出 想为名发程
print(string[1::2])                  # 输出 想为名发程!
print(string[-1::2])                 # 输出 !
print(string[::-1])                  # 输出 !师程工发开名一为成想我
print(string[-1::-1])                # 输出 !师程工发开名一为成想我
print(string[-2::-2])                # 输出 师工开一成我
print(string[-1:5:-1])               # 输出 !师程工发开
print(string[-2:5:1])                # 输出 
print("======")                      # ======

注意哦!" print(string[-2:5:1])"输出的值为“”,也就是空值,什么也没取到,为什么呢?如下

                             我     想    成     为      一      名      开     发     工     程     师     !

正序下标为:        0      1      2      3        4        5        6      7       8       9      10   11

倒序下标为:       -12   -11   -10   -9       -8       -7      -6     -5      -4      -3      -2     -1

对于存在步长的切片,可以先看开始位置与终止位置,从-2到

5相当于是从右到左,取到了“师程工发开”这几个字并且都是,再看步长是1,对-2这个开始位置进行加1操作,得到-1,-1的位置是“!”,可见没有包含在“师程工发开”这几个字之内,因此“print(string[-2:5:1])"的结果为空。

5、for循环

自动帮我们获取一个值内部的所有的数据(内部是基于索引完成)。

在使用for循环中,也可使用break和continue关键字,具体可看如下:

string = "我想成为一名开发工程师!"
for m in string:
    print(m, end=" ")
结果:我 想 成 为 一 名 开 发 工 程 师 !

在for循环中使用break关键字:

string = "我想成为一名开发工程师!"
for m in string:
    if m == "为":
        break
    print(m, end=" ")

结果:我 想 成

在for循环中使用continue关键字:

string = "我想成为一名开发工程师!"
for m in string:
    if m == "为":
        continue
    print(m, end=" ")

结果:
我 想 成 一 名 开 发 工 程 师 !

6、for循环 + range函数

range,是Python中内部帮我们提供的一个函数,他可以帮我们生成整型的数据。

   - range(8) # 0 1 2 3 4 5 6 7 
   - range(99) # 0 1 2 ... 98
   - range(1,5) # 1 2 3 4 
   - range(1,5,2) # 1  3 
   - range(5,1,-1) # 5 4 3 2 
   - range(5,0,-1) # 5 4 3 2 1

在Python2中:
    - range(1000000000000),在内存中帮我们立即创建1000000000000个整数。
    - xrange(1000000000000),不会再内存中立即创建,而是在我们对xrange生成的结果进行for循环获取时,才会获取一个生成一起。
在python3中:
    - range(1000000000000),不会再内存中立即创建,而是在我们对range生成的结果进行for循环获取时,才会获取一个生成一起。

例1:
for i in range(1,10):
    print(i, end="-")

结果:
1-2-3-4-5-6-7-8-9-

例2:
string = range(100)
print(string)   # 此时并未生成具体的数字
for i in  string:
    print(i, end="\\")    # 现在才会生成数字,再输出

结果:
range(0, 100)
0\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\20\21\22\23\24\25\26\27\28\29\30\31\32\33\34\35\36\37\38\39\40\41\42\43\44\45\46\47\48\49\50\51\52\53\54\55\56\57\58\59\60\61\62\63\64\65\66\67\68\69\70\71\72\73\74\75\76\77\78\79\80\81\82\83\84\85\86\87\88\89\90\91\92\93\94\95\96\97\98\99\

例3:输出1-99
# 方法1

data = range(1, 100)
for item in data:
    print(item, end=" ")

结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

# 方法2

for item in range(1, 100):
    print(item, end=" ")

7、练习题

(1)请帮我生成一个随机验证码,随机验证码共6位且只包含字母(含大小写)。

import random
num = 1
string = ""
while num <= 6:
    temp = random.randint(0,1)
    if temp == 0:
       string += chr(random.randint(65, 90))
    else:
        string += chr(random.randint(97, 122))
    num += 1
print(string)

结果:
XmrePL

(2)扩展:项目中真用到了生成验证码的功能。

import random
import string
yzm = string.ascii_letters + string.digits
code = ""
for i in range(0,6):
    code += random.choice(yzm)
print(code)

结果:
ubGKg2

(3)需求:有以下四个变量,分别是IP的四部分 "255.127.235.99",请将如下四个变量转换成为二进制并拼接起来,最后将拼接起来的二进制转换为十进制整数。
    v1 = 18 
    v2 = 127
    v3 = 235
    v4 = 99
data = bin(v1) + bin(v2) + bin(v3) + bin(v4)
       "0b10010" + 0b10010 + 0b10010 + 0b10010   => 第一步:将b去掉
       "00010010" + 。。。                        => 第二步:统一用8位二进制表示。
        
print(data) # 32位的一个二进制 "000100100001001000010010000100100001001000010010" => 十进制

# 方法1
result = ""
ip_list = [18,127,235,99]
for v in ip_list:
    # print(v) # 18 127  235  99  # 转换二进制 -> 去掉b -> 凑够8位 ==》 字符串
    part = bin(v)[2:]
    if len(part) < 8:
        part = ( 8 - len(part) ) * "0" + part

    # print(part,len(part))
    result = result + part
value = int(result,base=2)
print(value)
# 方法2
ip_List =  "255.127.235.99"
temp_string = ""
sum_string = ""
for item in range(3,-1,-1):                  # 使用range函数产生由大到小的索引
    char = ip_List.split(".")[item]          # 分割
    temp_string = str(bin(int(char)))        # 转换为字符串
    temp_string = temp_string[2:]            # 去掉0b标识
    if len(temp_string) < 8:
        temp_string = (8 - len(temp_string)) * "0" + temp_string
        sum_string = temp_string + sum_string
    else:
        sum_string = temp_string + sum_string
print(int(sum_string, base=2))

结果:
4286573411

字符串专有功能(11)

1、startswith,布尔类型

string = "hello, I am computer!"
print(string.startswith("h"))                 # True
print(string.startswith("H"))                 # False

2、endswith,布尔类型

string = "abcdefghijklmn"
print(string.endswith("M"))                        # False
print(string.endswith("n"))                        # True

3、upper,将字母转换为大写,是一个新字符串

string = "nihao"
print(string.upper())                        # NIHAO

4、lower,将字母转换为小写,是一个新字符串

string = "HHdjhBDCdjc"
print(string.lower())                    # hhdjhbdcdjc

5、isdecimal,判断字符串中的是否为数字,布尔类型

string = "HHdjhBDCdjc"
print(string.isdecimal())                    # False
strin = "6723626"
print(strin.isdecimal())                     # True
s = "ncbdgh688909vnjfdbv9907365768"
print(s.isdecimal())                         # False

6、replace,替换字符串,会产生新的字符串

string = "HHdjhBDCdjc"
print(string.replace("H","AA"))                    # AAAAdjhBDCdjc

7、strip,在字符串前后去除指定 “字符串”(默认空格、换行、制表符)


# lstrip,只去除左边 # rstrip,只去除右边


# 例1:
string = "  dhagf bfhdjv " \
         "\n" \
         "gydsfvcgsdhvcgh    " \
         "   " \
         ";"
print(string.strip())

# 结果
dhagf bfhdjv 
gydsfvcgsdhvcgh       ;

# 例2:
name = " nihao\t"
print(name,len(name))
# 默认去除前后的 空格、换行、制表符,得到一个新的字符串。
data = name.strip()
print(data,len(data))                        

结果:
 nihao	 7
nihao 5

# 例3:
name = "anihao"
print(name,len(name))
# 去除前后的 x,得到一个新的字符串。
data = name.strip("a")
print(data,len(data))

结果:
anihao 6
nihao 5

# 去除左边的空格等
st = " hcbdhjchb"
print(st, len(st))
print(st.lstrip(), len(st.lstrip()))

结果:
 hcbdhjchb 10
hcbdhjchb 9

# 去除右边的空格

8、