Python的简单数据类型案例

本文提供了一系列编程练习,涵盖字符串与列表的基本操作,包括字符提取、字符串修改、列表元素筛选与操作等,适合初学者实践提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

一.字符串相关案例

1.输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

方法一:
利⽤字符串切⽚:字符串[开始下标:结束下标:步⻓],开始下标是1步⻓为2,结束下标省略可以取到最后。

str1 = input('请输⼊⼀个字符串:')
print(str1[1::2])

方法二:
利⽤for循环将所有的奇数下标取出来,然后根据下标获取字符

str1 = input('请输入一个字符串:')
# print(str1[1::2])
str_len = len(str1)
for index in range(str_len):
    if index % 2 == 1:
        print(str1[index], end='')  # 设置end让所有的字符在⼀⾏打印

方法三:
和⽅法⼆的原理⼀样,利⽤range直接产⽣奇数下标。

str1 = input('请输入一个字符串:')
str_len = len(str1)
for index in range(1, str_len, 2):
    print(str1[index], end='')

运行结果:

请输入一个字符串:qwert
wr

2.输入用户名,判断用户名是否合法,用户名的要求: 长度为6~10位
x = input('请输入用户名:')
y = len(x)
if 6 <= y <= 10:
    print('用户名合法')
else:
    print('用户名不合法!')

运行结果:

请输入用户名:asd
用户名不合法!

3.输入字符串,获取字符串的中间字符

方法一:

x = input('请输入一个字符串:')
y = len(x)
if y % 2 == 0:
    print(x[y // 2 - 1:y // 2 + 1])
else:
    print(x[y // 2])

方法二:

x = input('请输⼊字符串:')
y = len(x)
if y % 2 == 0:
    print(x[y // 2 - 1], x[y // 2], sep='')
else:
    print(x[y // 2])

运行结果:

请输⼊字符串:abc123
c1

4.输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串

方法一:

x = input('请输入一个字符串:')
y = x.replace(x[0], '+')
z = y.replace(y[len(y) - 1], '+')
print(z)

方法二:

str1 = input('请输⼊字符串:')
new_str = '+' + str1[1:-1] + '+'
print(new_str)

运行结果:

请输入一个字符串:qwer13
+wer1+

5.输入用户名,判断是否合法,用户名的要求:用户名中只能由数字和字母组成

方法一:

x=input('请输入用户名:')
if x.isalnum():
    print('用户名合法')
else:
    print('用户名不合法!')

方法二:

x = input('请输入用户名:')
for char in x:
    if not (char.isdigit() or char.isalpha()):  ## 如果不是字⺟和数字
        print('用户名不合法')
        break
else:
    print('用户名合法!')

方法三:

x = input('请输⼊⽤户名:')
for char in x:
    # 如果不是字⺟和数字
    if not ('a' <= char <= 'z' or 'A' <= char <= 'Z' or '0' <= char <= '9'):
        print('⽤户名不合法')
        break
else:
    print('⽤户名合法')

运行结果:

请输入用户名:ad_fga445
用户名不合法!

6.输入一个字符串,将字符串中所有的数字符取出来产生一个新的字符串

方法一:

str1 = input('请输入一个字符串:')
# 先声明⼀个空的字符串⽤来拼接数字字符
new_str = ''
for i in range(0, len(str1)):
    # 如果是数字字符就拼接到new_str上
    if '0' <= str1[i] <= '9':
        new_str += str1[i]
print(new_str)

方法二:

str1 = input('请输⼊⼀个字符串:')
new_str = ''
for i in str1:
    if '0' <= i <= '9':  
        new_str += i
print(new_str)

方法三:

str1 = input('请输⼊⼀个字符串:')
new_str = ''
for i in str1:
    if i.isdigit():
        new_str += i
print(new_str)

运行结果:

请输入一个字符串:uyiytd1564
1564

7.输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出

方法一:

x = input('请输入一个字符串:')
y = x.upper()
print(y)

方法二:

str1 = input('请输⼊⼀个字符串:')
new_str = ''
# 遍历字符串中的字符
for i in str1:
    # 如果是⼩写字⺟就转换成⼤写字⺟后再拼接
    #⼩写字⺟的编码值⽐对应的⼤写字⺟的编码值要⼤32
    if 'a' <= i <= 'z':
        # ord(字符) -- 获取字符的编码值
        # chr(字符编码) -- 获取编码对应的字符
        new_str += chr(ord(i) - 32)
    else:
        # 如果不是⼩写字符就直接拼接到新的字符串中
        new_str += i
print(new_str)

运行结果:

请输入一个字符串:afe123
AFE123

8.输入用户名,判断用户名是否合法,用户名的要求:必须有数字和字母且只能有数字和字母,并且第一个字符是大写字母

方法一:

x = input('请输入一个字符串:')
for i in range(len(x)):
    if '0' <= x[i] <= '9' and 'A' <= x[0] <= 'Z':
        print('用户名合法')
        break
else:
    print('用户名不合法')

方法二:

user_name = input('请输⼊⽤户名:')
# 先判断第⼀个字符是否是⼤写字⺟
if user_name[0].isupper():
    # 如果第⼀个字符是⼤写字⺟,再看后⾯的字符中是否有不合法的字符,并且统计后⾯的字符中有没有数字
    have_number = False  # 假设没有数字字符
    for item in user_name[1:]:
        # 如果是数字或者字⺟
        if item.isdigit() or item.isalpha():
            # 如果有数字字符,那么have_number就是True
            if item.isdigit():
                have_number = True
        else:
            # 如果出现了⾮数字、字⺟的字符
            print('不合法')
            break  # 只要有⼀个⾮法的字符就不合法,不需要再判断其他字符
    else:
        if have_number:
            print('合法')
else:
    print('不合法')

运行结果:

请输入一个字符串:GGf
用户名不合法

9.输入一个字符串,将字符串中所有的大写字母变成对应的小写字母输出
x = input('请输入一个字符串:')
y = x.lower()
print(y)

运行结果:

请输入一个字符串:dsdHII12
dsdhii12

10.输入两个字符串,打印第二个字符串在第一个字符串中第一次出现的位置

位置用正索引值表示
方法一:

x = input('请输入第一个字符串:')
y = input('请输入第二个字符串:')
if y in x:
    z=x.find(y[0]) #利用find函数进行查找
    print(z)
else:
    print('不存在')

方法二:

str1 = input('请输⼊字符串1:')
str2 = input('请输⼊字符串2:')
len1 = len(str1)
len2 = len(str2)
for index in range(len1 - len2 + 1):
    if str1[index:index + len2] == str2:
        print(index)
        break
else:
    print('不存在')

运行结果:

请输入第一个字符串:I am cool
请输入第二个字符串:cool
5

11.输入两个字符串,打印两个字符串中公共的字符,如果没有公共字符打印 公共字符不存在

方法一:

x = input('请输入第一个字符串:')
y = input('请输入第二个字符串:')
z = ''
for i in range(len(x)):
    for j in range(len(y)):
        if x[i] == y[j]:
            z += y[j]
if z == '':
    print('公共字符不存在!')
else:
    print(z)

方法二:

str1 = input('请输⼊字符串1:')
str2 = input('请输⼊字符串2:')
new_str = ''  # ⽤来拼接公共的字符
# 遍历字符串1中的每个字符
for item in str1:
    # 判断当前取出来的字符字符串2中是否也存在; 并且之前没有保存过
    if item in str2 and item not in new_str:
        new_str += item
if new_str:
    print(new_str)
else:
    print('公共字符不存在')

方法三:

str1 = input('请输⼊字符串1:')
str2 = input('请输⼊字符串2:')
new_str = ''  # ⽤来拼接公共的字符
# 保证遍历的时候遍历较短的字符串
if len(str2) < len(str1):
    str1, str2 = str2, str1
# 遍历字符串1中的每个字符
for item in str1:
    # 判断当前取出来的字符字符串2中是否也存在; 并且之前没有保存过
    if item in str2 and item not in new_str:
        new_str += item
if new_str:
    print(new_str)
else:
    print('公共字符不存在')

运行结果:

请输入第一个字符串:qwer
请输入第二个字符串:er
er

二.列表相关案例

1. 已知一个列表 names = [‘鲁班七号’, ‘后裔’, ‘狄仁杰’, ‘黄忠’, ‘孙尚香’],编写程序用两种方法获取names中的元素’黄忠’。

方法一:

names = ['鲁班七号', '后裔', '狄仁杰', '黄忠', '孙尚香']
print(names[3])

方法二:

names = ['鲁班七号', '后裔', '狄仁杰', '黄忠', '孙尚香']
print(names[-2])

方法三:

names = ['鲁班七号', '后裔', '狄仁杰', '黄忠', '孙尚香']
if names.index('黄忠'):
    print('黄忠')
else:
    print('黄忠不存在')

方法四:

names = ['鲁班七号', '后裔', '狄仁杰', '黄忠', '孙尚香']
if '黄忠' in names:
    print('黄忠')
else:
    print('黄忠不存在')
2.已知一个数字列表,输出所有元素中,值为奇数的元素。
x = [1, 7, 3, 4, 5, 6, 11, 13]
for i in range(len(x)):
    if x[i] % 2 != 0:
        print(x[i], end=' ')

运行结果:

1 7 3 5 11 13

3.已知一个列表 scores = [90, 89, 67, 98, 75, 87, 54, 88],输入两个成绩,一个添加到scores的最后,另一个插入到scores的最前面。
scores = [90, 89, 67, 98, 75, 87, 54, 88]
score1 = int(input('请输入成绩:'))
score2 = int(input('请输入成绩:'))
scores.append(score1)
scores.insert(0, score2)
print(scores)

运行结果:

请输入成绩:99
请输入成绩:98
[98, 90, 89, 67, 98, 75, 87, 54, 88, 99]

4.已知一个数字列表, 编写程序将列表中所有元素乘以2
nums = [1, 2, 3, 4]
y = []
for i in range(len(nums)):
    x = nums[i] * 2
    y.append(x)
print('nums=', y)

运行结果:

nums= [2, 4, 6, 8]

5.有一个数字列表,获取这个列表中的最大值(注意: 不能使用max函数)

方法一:

nums =[1,3,4,2,6,8,9,5,7]
nums.sort()
print(nums[len(nums)-1])

方法二:

numbers = [1, 3, 4, 2, 6, 8, 9, 5, 7]
max_num = numbers[0]
for n in numbers:
    if n > max_num:
        max_num = n
print(max_num)

运行结果:

9

6.已知一个数字列表,获取列表中出现次数最多的元素
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
dic = {}
for n in nums:
    if n in dic:
        dic[n] += 1
    else:
        dic[n] = 0
max_count = max(dic.values())
for k, v in dic.items():
    if max_count == v:
        print(k)

运行结果:

3

7.已知一个列表中保存的全是学生的姓名,要求去掉重复的名字

方法一:

names = ['张三', '李四', '大黄', '张三', '大黄', '王五', '张三']
s = set()
for i in range(len(names)):
    s.add(names[i])
names = list(s)
print(names)

方法二:

names = ['张三', '李四', '大黄', '张三', '大黄', '王五', '张三']
names2 = []
for n in names:
    if n not in names2:
        names2.append(n)
names = names2
print(names)

运行结果:

[‘张三’, ‘李四’, ‘大黄’, ‘王五’]

三.字典元组相关案例

1.声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明)
sudent = {'name': '张三 ', 'age': 20, 'socre': 98, 'tel': '123456789', 'sex': '男'}
for k, v in sudent.items():
    print(k, ':', v, end=' ')

运行结果:

name : 张三 age : 20 socre : 98 tel : 123456789 sex : 男

2.声明一个列表,在列表中保存6个学生的信息

(1) 统计不及格学生的个数
(2) 打印不及格学生的名字和对应的成绩
(3) 统计未成年学生的个数
(4) 打印手机尾号是8的学生的名字
(5) 打印最高分和对应的学生的名字
(6) 删除性别不明的所有学生
(7) 将列表按学生成绩从大到小排序

students = [{'name': '源一', 'age': 21, 'socre': 45, 'tel': '12345678911', 'sex': '男'},
           {'name': '源二', 'age': 22, 'socre': 92, 'tel': '12556866828', 'sex': '女'},
           {'name': '源三', 'age': 16, 'socre': 93, 'tel': '12345678913', 'sex': '男'},
           {'name': '源四', 'age': 24, 'socre': 50, 'tel': '12345678914', 'sex': '女'},
           {'name': '源五', 'age': 17, 'socre': 95, 'tel': '12345678916', 'sex': '不明'},
           {'name': '源六', 'age': 17, 'socre': 96, 'tel': '12345678917', 'sex': '不明'}]

(1) 统计不及格学生的个数:

student_count = 0
for student in students:
    if student['socre'] < 60:
        student_count += 1
print(student_count)

(2) 打印不及格学生的名字和对应的成绩

for student in students:
    if student['socre'] < 60:
        print('不及格学生:',student['name'],'对应成绩:',student['socre'])

(3) 统计未成年学生的个数

student_count = 0
for student in students:
    if student['age'] < 18:
        student_count += 1
print(student_count)

(4) 打印手机尾号是8的学生的名字

for student in students:
    if student['tel'][-1]=='8':
        print(student['name'])

(5) 打印最高分和对应的学生的名字

max_socre = 0
student1 =''
for student in students:
    if student['socre'] >= max_socre:
        max_socre = student['socre']
        student1 = student['name']
print('最高分为:',max_socre,'对应学生:',student1)

(6) 删除性别不明的所有学生

for student in students:
    if student['sex'] == '不明':
            student.clear()
print('删除性别不明的所有学生:',students)

(7) 将列表按学生成绩从大到小排序
方法一:

x = []
for student in students:
    x.append(student['socre'])
for i in range(len(x)):
    for j in range(i + 1, len(x)):
        if x[i] < x[j]:
            x[i], x[j] = x[j], x[i]
            students[i], students[j] = students[j], students[i]
print(students)

方法二:

students.sort(key=lambda item: item['socre'], reverse=True)
print(students)
3.用三个元组表示三门学科的选课学生姓名(一个学生可以同时选多门课)

(1) 求选课学生总共有多少人
(2) 求只选了第一个学科的人的数量和对应的名字
(3) 求只选了一门学科的学生的数量和对应的名字
(4) 求只选了两门学科的学生的数量和对应的名字
(5) 求选了三门学生的学生的数量和对应的名字

sing = ('李白', '白居易', '李清照', '杜甫', '王昌龄', '王维', '孟浩然', '王安石')
dance = ('李商隐', '杜甫', '李白', '白居易', '岑参', '王昌龄')
rap = ('李清照', '刘禹锡', '岑参', '王昌龄', '苏轼', '王维', '李白')

(1) 求选课学生总共有多少人

total = set(sing + dance + rap)
print(len(total))

(2) 求只选了第一个学科的人的数量和对应的名字

sing_only = []
for p in sing:
    if p not in dance and p not in rap:
        sing_only.append(p)
print('只选择了第一个学科的有{}人,是{}'.format(len(sing_only), sing_only))

(3) 求只选了一门学科的学生的数量和对应的名字

only_one = []
# 只选了sing的
for s in sing:
    if (s not in dance) and (s not in rap):
        only_one.append(s)
# 只选了dance的
for d in dance:
    if (d not in sing) and (d not in rap):
        only_one.append(d)
# 只选了rap的
for r in rap:
    if (r not in sing) and (r not in rap):
        only_one.append(r)
print('只选了⼀⻔学科的有{}⼈:{}'.format(len(only_one), only_one))

(4) 求只选了两门学科的学生的数量和对应的名字

two_only = []
for s in sing:
    # 只选了sing和dance的
    if (s in dance) and (s not in rap):
        two_only.append(s)
        # 只选了sing和rap的
    elif (s not in dance) and (s in rap):
        two_only.append(s)
for d in dance:
    # 只选了dance和rap的
    if (d in rap) and (d not in sing):
        two_only.append(d)
print('只选了两⻔学科的有{}⼈:{}'.format(len(two_only), two_only))

(5) 求选了三门学生的学生的数量和对应的名字

three = []
for s in sing:
    if s in dance and s in rap:
        three.append(s)
print('选了三⻔学科的有{}⼈:{}'.format(len(three), three))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋斗的源

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

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

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

打赏作者

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

抵扣说明:

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

余额充值