第1章 字符串练习题

1.1 交换

已知 a的值为"hello",b的值为"world",如何交换a和b的值?

a = "hello"
b = "world"
a,b = b,a
print("a的值为 %s" % a)
print("b的值为 %s" % b)

a,b = b,a 实际上做了两件事:

tuple(b,a) 构成一个由b和a构成的元组、对元组进行拆包,将其元素赋给a,b

注:Python的变量并不直接存储值,而是引用一个内存地址,交换变量时,只交换了引用的地址。

1.2 回文

回文的定义:"回文" 就是正读倒读都一样的。
如奇数个:"98789",这个数字正读是"98789" 倒读也是"98789"。
偶数个数字"3223"也是回文数。
字母 "abcba" 也是回文。
判断一个字符串是否是回文字符串,是打印True, 不是打印False

# 方法一
a = input("请输入一个数字:")
b = a[::-1]
if a == b:
    print("该数字是回文数")
else:
    print("该数字不是回文数")

Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:

变量[头下标:尾下标]     

索引值以 0 为开始值,-1 为从末尾的开始位置。

 b = a[i:j]   表示复制a[i]到a[j-1],以生成新的对象
当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
当j缺省时,默认为len(a), 即a[1:]相当于a[1:len(a)]
当i,j都缺省时,a[:]就相当于完整复制一份a

b = a[i:j:s]表示:i,j与上面的一样,但s表示步进,缺省为1.
所以a[i:j:1]相当于a[i:j]
当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。

# 方法二
a = int(input("请输入一个数字:\n"))
x = str(a)
flag = True

for i in range(len(x)//2):
    if x[i] != x[-i - 1]:
        flag = False
        break
if flag:
    print ("%d 是一个回文数!" % a)
else:
    print ("%d 不是一个回文数!" % a)

1.3 字符串切割

已知一个字符串为 "hello_world_yoyo", 如何得到一个队列 ["hello","world","yoyo"]

str = "hello_world_bigant"
str1 = str.split("_")
print(str1)

1.4 拼接字符串

# 方法一
lister = ["hello", "world", "yoyo"]
s = "hello_" + "world_" + "yoyo"
print(s)

# 方法二
lister = ["hello", "world", "yoyo"]
strlist = '_'.join(lister)
print(strlist)

1.5替换字符

把字符串 s 中的每个空格替换成"%20"
输入:s = "We are happy."
输出:"We%20are%20happy."

s = "We are happy."
print(s.replace(" ", "%20"))

1.6九九乘法表

打印99乘法表

# 方法一
for i in range(1, 10):
    for j in range(1, i+1):
        print("%d*%d=%d" % (j, i, j*i), end=' ')
    print("")

# 方法二
i = 1
while i<10:
    j = 1
    while j <= i:
        print("%d*%d=%d" % (j,i,j*i), end=' ')
        j += 1
    print("")
    i += 1

1.7字符下标

找出单词 "welcome" 在 字符串"Hello, welcome to my world." 中出现的位置,找不到返回-1
从下标0开始索引

s = "Hello, welcome to my world."
print(s.index("welcome", 0, len(s))) 

1.8 统计字符出现的次数

s = "Count, the number of spaces."
print(s.count(" "))
x = "I like to program in Python"
print(x.count(" "))

string.count(str, beg=0, end=len(string))用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。

1.9 统计每个字符出现的次数

#方法一:字典推导式
str1 = "ewq4aewtaSDDSFDTFDSWQrtewtyufashas"
result = {i: str1.count(i) for i in str1}
print(result)
#方法二:counter
import collections
str2 = "ewq4aewtaSDDSFDTFDSWQrtewtyufashas"
obj = collections.Counter(str2)
print(obj)
for k, v in obj.items():
    print(k, v)

Python 字典 items() 方法以列表返回视图对象,是一个可遍历的key/value 对。

#方法三 利用count
str2 = "ewq4aewtaSDDSFDTFDSWQrtewtyufashas"
for i in set(str2):
    print(i, str2.count(i))

set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

1.10 打印出排行前三的字符

dd="ewq4aewtaSDDSFDTFDSWQrtewtyufashas"
obj = collections.Counter(dd)
print obj.most_common(3)

1.11 判断字符a含b

'''
判断字符串a="welcome to my world" 是否包含单词b="world"
包含返回True,不包含返回 False
'''
a = "welcome to my world"
b = "world"

if b in a:
    print(True)
else:
    print(False)  

1.12 查找字符首次出现位置

'''
输出指定字符串A在字符串B中第一次出现的位置,如果B中不包含A,则输出-1
从 0 开始计数
A = "hello"
B = "hi how are you hello world, hello yoyo !"
'''

A = "hello"
B = "hi how are you hello world, hello yoyo !"
# if A in B:
print(B.find(A))
# 或者
print(B.index(A))

find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。

1.13判断奇数偶数

'''
给定一个数a,判断一个数字是否为奇数或偶数
a1 = 13
a2 = 10
'''
num = int(input("请输入一个整数:"))
if num % 2 == 0:
    print("这是一个偶数")
elif num % 2 == 1:
    print("这是一个奇数") 

1.14判断一个姓名是否姓王

b = input("输入姓名:")
# 判断字符串以xx开始
if str(b).startswith("王"):
    print("姓王")
else:
    print("不姓王")
 
b = input("输入姓名:")
b = input("输入姓名:")
# 判断字符串以xx结尾
if str(b).endswith("三"):
    print("姓名以三结尾")
else:
    print("姓名不以三结尾")

1.15判断是不是数字

'''
如何判断一个字符串是不是纯数字组成
a = "123456"
b = "yoyo123"
'''
str1 = "123456"
str2 = "Abcd"
str3 = "123Abc"

# 用isdigit函数判断是否数字
print(str1.isdigit())
print(str2.isdigit())
print(str3.isdigit())

# 用isalpha判断是否字母
print(str1.isalpha())
print(str2.isalpha())
print(str3.isalpha())

# isalnum判断是否数字和字母的组合
print(str1.isalnum())
print(str2.isalnum())
print(str3.isalnum())

# 注意:如果字符串中含有除了字母或者数字之外的字符,比如空格,也会返回False

string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False.

string.isalnum() 至少有一个字符并且所有字符都是字母或数字则返回 True 否则返回 False

string.isalpha() 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False

1.16字符串大小写转换

'''
将字符串 a = "This is string example....wow!" 全部转成大写
字符串 b = "Welcome To My World" 全部转成小写
'''
a = "This is string example....wow!"
b = "Welcome To My World"

# 全部转成大写
print(a.upper())
# 全部转成小写
print(b.lower())
# 字符串首字母大写
print(a.capitalize())
# 每个单词的首字母大写
print(a.title())
# 大小写互换
print(b.swapcase())  

1.17 去掉字符串中空格的方法

'''
将字符串 a = " welcome to my world "首尾空格去掉
'''
a = " welcome to my world "

# 去除字符串开头和结尾的空格
print(a.strip())
# 去除字符串开头的空格
print(a.lstrip())
# 去掉字符串结尾的空格
print(a.rstrip())

# 去除全部空格
'''
1. replace()方法
 replace主要用于字符串的替换replace(old, new, count)
'''
print(a.replace(" ", ""))

'''
2.join()方法+split()方法
# join可以将列表每个字符通过前字符串进行拼接,split可以将字符串按指定规则进行切割生成一个新的列表,
不传参默认按空格切割
'''
print(a.split())   # 字符串按空格分割成列表b
print("".join(a.split()))   # 使用一个空字符串合成列表内容生成新的字符串

1.18 字符串去重后排序

'''
s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"

1.22 字符串去重保留顺序
s = "ajldjlajfdljfddd",去重保留原来的顺序,输出"adfjl"
'''
s = "ajldjlajfdljfddd"
s1 = list(set(s))

s2 = s1.sort(reverse=False)
s3 = "".join(s1)
print(s3)  

1.23画菱形

n = int(input("请输入菱形边长:"))
for i in range(n):
    for j in range(n-i-1):
        print(" ", end="")
    for k in range(2*i+1):
        print("*", end="")
    print("")
for i in range(n-1):
    for j in range(i+1):
        print(' ', end='')
    for k in range(2*(n-i)-3):
        print("*", end="")
    print()

1.24 输入一个正整数,判断是几位数

题目 给一个不多于5位的正整数,要求:
一、求它是几位数,
二、逆序打印出各位数字。
a = 12345

s = int(input("请输入一个整数:"))
print(s)
s1 = str(s)
print("您输入的是 %s位数" % len(s1))
print("逆序的结果为:", end="")
for i in range(len(s1)-1, -1, -1):   # 切片用法:创建一个与原字符串顺序相反的字符串
    print(s1[i], end="")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天草柑橘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值