五、String字符串

1.什么是字符串

字符串是以单引号或者双引号括起来的任意文本,一个字符串由若干个任意字符组成

2.创建字符串
str1 = "hello world"
str2 = 'you are good'
3.字符串运算
3.1字符串链接

3.1.1 使用加号进行链接

#字符串的链接,通过“+”进行链接
s1 = 'welcome'
s2 = 'to guangzhou'
print(s1 + s2)

注意:字符串 + 数字,这样会报错,不同类型的不能相加

3.1.2 使用“,”进行链接【tuple类型】

s1 = 'hello'
s2 = 'world'
print(s1, s2)
#使用“,”链接的时候,在“,”的位置会产生一个空格

3.1.3 使用%格式化链接

s1 = 'hello'
s2 = 'world'
print("%s %s"%(s1, s2))

3.1.4 使用join函数进行链接

s1 = ['hello', 'world']
print("".join(s1))

注意:"".join()函数内部只需要传递一个参数。

3.2 重复输出字符串
#重复输出字符串,通过乘法的方式实现
s3 = 'good'
print(s3 * 3)
3.3 获取字符串中的字符
#通过索引的方式实现
#索引:给一个字符串中的字符从0开始编号,也成为下标
#索引的取值范围:[0,str.length-1]
#访问方式: 变量名称[索引]
str3 = 'good'
print(str3[0])
#索引值还可以从-1开始,-1代表倒数第一个字符
print(str3[-1])
3.3 截取字符串
# 通过下标截取字符串
str1 = "hello world"
print(str1[3:6])
#注意:截取字符串的范围是str[start : end] 它是一个前闭后开的区间[start,end)
#如果n的值超过了字符串的最大长度,则仍然截取原下标的长度

#从开头截取到指定索引之前[0,5)
print(str1[:5])

#从指定截取到结尾[4,str1.length)
print(str1[4:])

#注意在使用str[start : end]来截取字符串的时候,若start不写默认从第一个字符开始
#若end不写,则默认到最后一个字符结束
3.5 判断是否包含指定字符
#判断字符串中是否包含某指定字符串
str4 = "you are a good boy"
print("good" in str4)
#若包含有则返回True否则为False
3.6 格式化输出
#通过%来改变后面的字母或者是符号的含义,%被称为占位符
# %s:格式化字符串
# %d:格式化整数
# %f:格式化浮点数,可指定小数点后的精度
age = 18
name = "丽丽"
weight = 45.5
print("my name is %s , I am %d year old and my weight is %.2f kg"%(name, age, weight))
#注意:%.nf表示精确到小数点后n位,会四舍五入



4.关于字符串常用函数
4.1 eval(str)

功能:将字符串str当成有效的表达式来求值并返回计算结果。

可以把list,tuple,dict, set和string相互转化

>>>num1 = eval('123')
>>>print(num1)
123

>>>num2 = eval("[1, 2, 3]")
>>>print(num2)
[1, 2, 3]

>>> num3 = eval("12-3")
>>> print(num3)
9
4.2 len(str)

功能:返回当前字符串的长度(字符的个数)

>>> len("you are good")
12
4.3 str.lower()

功能:返回一个把字符串中的大写字母转换为小写字母 的字符串

>>> str = "Hello World"
>>> print(str.lower())
hello world

注意:此方法不改变原本的字符

4.4 str.upper()

功能:返回一个把字符串中的小写字母转换为大写字母的字符串

>>> str = "Hello World"
>>> print(str.upper())
HELLO WORLD
4.5 str.swapcase()

功能:返回一个把字符串中的大写字母转为小写字母,小写字母转换为大写字母的字符串

>>> str = "Hello World"
>>> print(str.swapcase())
hELLO wORLD
4.6 str.capitalize()

返回一个首字母大写,其他小写的字符串

>>> str = "Hello World"
>>> print(str.capitalize())
Hello world
4.7 str.title()

返回一个每个单词首字母大写的字符串

>>> str = "Hello World"
>>> print(str.title())
Hello World
4.8 str.center(width[, fillchar])

功能:返回一个指定宽度的居中字符串,fillchar为填充的字符串,默认使用空格

>>> str = "Hello World"
>>> print(str.center(50,"*"))
*******************Hello World********************
4.9 str.ljust(width[, fillchar])

功能:返回一个指定宽度的左对齐字符串,fillchar为填充字符。默认使用空格填充

>>> str = "Hello World"
>>> print(str.ljust(50,"*"))
Hello World***************************************
4.10 str.rjust(width[, fillchar])

功能:返回一个指定宽度右对齐字符串,fillchar为填充字符,默认使用空格填充

>>> str = "Hello World"
>>> print(str.rjust(50,"*"))
***************************************Hello World
4.11 str.zfill(width)

功能:返回一个长度为width字符串,原字符串右对齐,前面补0

>>> str = "Hello World"
>>> print(str.zfill(50))
000000000000000000000000000000000000000Hello World


4.12 str.count(str 【,start】【, end】)

功能:返回字符串中str出现的次数,可以指定一个范围,若不指定则默认从头到尾,匹配的时候是区分大小写的。

>>> str = "Hello World"
>>> print(str.count("hello", 0 , 10))
0
4.13 str.find(str1【, start】【, end】)

功能:从左到右检测str1字符串是否包含在字符串中,可以指定范围,默认从头到尾。

返回的是第一次出现的开始的下标,若未查询到,则返回-1

>>> str = "Hello World"
>>> str1 = "llo"
>>> print(str.find(str1, 0 , 10))
2
4.14 str.rfind(str1【, start】【, end】)

功能:类似于str.find(),不过是从右边开始查找

>>> str = "Hello World"
>>> str1 = "llo"
>>> print(str.rfind(str1, 0 , 10))
2
4.15 str.index(str1[, start = 0]   ,[ end = len(str)])

功能:类似于find(),与find() 不同的是,如果str1不存在的时候会报一个异常

>>> str2 = "Hello World"
>>> str1 = "hello"
>>> print(str2.index(str1, 0 , 10))
ValueError: substring not found
4.16 str.lstrip()

功能:截掉字符串左侧指定的字符串,则默认删除空白符(包括'\n', '\r',  '\t',  ' ')

>>> str = '**** you are very good'
>>> print(str.lstrip())
>>> print(str.lstrip())
**** you are very good
>>> print(str.lstrip("*"))
 you are very good
4.17 str.rstrip()

功能:截掉字符串右侧指定的字符串,则默认删除空白符(包括'\n', '\r',  '\t',  ' ')

>>> str = '**** you are good****'
>>> print(str.rstrip())
**** you are good****
>>> print(str.rstrip("*"))
**** you are good
4.18 str.strip()

功能:截掉字符串左右两侧指定的字符串,则默认删除空白符(包括'\n', '\r',  '\t',  ' ')

>>> str1 = "      hello world     "
>>> str1.strip()
'hello world'


4.18 string.split(str="", num=string.count(str))

功能:以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串

str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。   num -- 分割次数

>>> str1 = "hello you are good"
>>> str1.split()
['hello', 'you', 'are', 'good']
>>> str1.split(" ",2)
['hello', 'you', 'are good ']
练习题**

1.计算1~100以内所有能被3或者17整除的数的和

2.计算100-999的水仙花数的个数。

3.计算200~500以内能被7整除但不是偶数的数的个数。

4.押宝游戏:

开始游戏 -> 投入赌金【一次性投入】 ->

循环  :押宝【5块钱一次】 -> 开奖  --》中奖/未中奖 --》用户输入是否继续 【当余额为0则自动退出游戏】


5。百钱买百鸡,现有100文钱,公鸡5文钱一只,母鸡3文钱一只,小鸡一文钱3只,要求:公鸡,母鸡,小鸡都要有,买100只鸡,把100文钱花完,买的鸡是整数。多少只公鸡,多少只母鸡多少只小鸡?




代码实现:

'''
1.计算1~100以内所有能被3或者17整数的数的和
'''
sum = 0
for i in range(100):
    if i%3 == 0 or i%17 == 0:
        sum += i

print(sum)



'''
2.计算100-999的水仙花数的个数。
'''
count = 0
for k in range(100,1000):
    a = k//100
    b = (k-a*100)//10
    c = k%10
    if k == a**3 + b**3 +c**3:
        print("%d水仙花数"%(k))
        count += 1
print(count)



'''
3.计算200~500以内被7整除但是不是偶数的个数
'''

y = 0
for n in range(200,500):
    if n % 7 == 0 and n % 2 != 0:
        y += 1

print(y)
'''
4.押宝游戏:
开始游戏->投入赌金【一次性投入】->
循环:押宝【5元一次】->开奖 -->中奖/未中奖 -->用户输入是否继续[余额为0 时自动结束游戏]
'''

'''
分析:
首先有一个循环,循环的范围在0到num2之间,
然后,有一个while判断,当num2 大于0时,执行if中的语句
if-else语句,用于执行中奖的过程,使用random.choice([0,0,0,0,1]),0为不中奖,1为中奖,
中奖情况给num2加10,反之num2减5.
'''

print("开始游戏")

num2 = int(input('请输入您的赌金:'))

for z in range(num2):           #这个地方有些不合理
    while num2 > 0:
        res = random.choice([0,0,0,0,1])
        if res == '1':
            num2 += 10 # num2 += 10
        else:
            num2 -= 5
            a = input("未中奖,是否继续:")
            if a == '是':
                z -= 1
            else:
                pass
        break

    break
print("游戏结束")



'''
5.百钱买百鸡,现在有100文钱,公鸡5文钱一只,母鸡3文钱一只,小鸡一文钱3只
要求:公鸡,母鸡,小鸡都要有,把100文钱花完,买的鸡是整数,
问:有多少只公鸡,多少只母鸡,多少只小鸡?

'''

# x1为公鸡,x2为母鸡,x3为小鸡

for x1 in range(1,20):
    for x2 in range(1,34):
        for x3 in range(3,100,3):
            if 5*x1 + 3*x2 + x3/3 == 100 and x1 + x2 +x3==100:
                print(x1, x2, x3)
            x3 += 1

                # if 5 * x1 + 3 * x2 + x3 / 3 != 100:
        x2 += 1
                    # if 5 * x1 + 3 * x2 + x3 / 3 != 100:
    x1 += 1