day5字符串和字典作业

该文提供了多个关于字符串处理的Python代码示例,包括提取奇数位字符、检查用户名合法性、提取大写字母、修改字符串两端、获取中间字符、实现find功能、找字符串交集以及处理学生信息列表等。这些练习涵盖了字符串的基本操作和条件判断的应用。
摘要由CSDN通过智能技术生成
  1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

    例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**

    var1 = input('请输入字符')
    var2 = ""
    i = 0
    for ch in var1:
        if i % 2 == 0:
            i += 1
            continue
        var2 += ch
        i += 1
    print(var2)
    
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

    var1 = input('请输入字符')
    len1 = len(var1)
    if len1 < 10:
        if len1 > 6:
            print(True)
        else:
            print(False)
    
    
  3. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

    例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法

    var1 = input('请输入字符')
    flag1 = True
    for x in var1:  # 循环判断每个字符的ASCII码是否在要求范围内
        i = ord(x)
        if i < 48 or i > 122:
            flag1 = False
            break
        elif (i > 90) and (i < 97):
            flag1 = False
            break
        elif (i > 57) and (i < 65):
            flag1 = False
            break
    print(flag1)
    
    
  4. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

    例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法 ‘Abc’ — 不合法

    var1 = input('请输入字符')
    flag1, flag2, flag3 = True, False, False
    # f1,f1,f3分别记录字符范围是否合法,用户名是否包含数字,用户名是否包含字母
    ch = ord(var1[0])
    if (ch > 64) and (ch < 91):
        for x in var1:  # 循环判断每个字符的ASCII码是否在要求范围内
            i = ord(x)
            if (i > 47) and (i < 58):
                if flag2:
                    continue
                flag2 = True
                continue
            elif (i > 64) and (i < 91):
                if flag3:
                    continue
                flag3 = True
                continue
            elif (i > 96) and (i < 123):
                if flag3:
                    continue
                flag3 = True
                continue
            flag1 = False
            break
    else:
        flag1 = False
    if flag1:
        flag1 = flag3 and flag2 and flag1
        print(flag1)
    else:
        print(flag1)
    
    
  5. 输入一个字符串,将字符串中所有的大写字母取出来产生一个新的字符串

    例如:输入**‘abFc1shj2A3klBs99+2kDkk’** 输出:‘FABD’

    var1 = input('请输入字符')
    var2 = ""
    for ch in var1:
        ch = ord(ch)
        if (ch > 64) and (ch < 91):
            var2 += chr(ch)
    print(var2)
    
    
  6. 输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串

    例如: 输入字符串**‘abc123’, 输出’+bc12+'**

    var1 = input('请输入字符')
    var2 = "+"
    for x in range(1, len(var1) - 1):
        var2 += var1[x]
    var2 += '+'
    print(var2)
    
    
  7. 输入字符串,获取字符串的中间字符

    例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**

    var1 = input('请输入字符')
    var2 = ""
    len1 = len(var1)
    i = len1 // 2
    if len1 % 2 == 0:
        var2 = var1[i - 1] + var1[i]
    else:
        var2 = var1[i]
    print(var2)
    
    
  8. (难)写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

    例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8

    def find(str1, str2):  # 无优化的find简单实现
        i = 0  # 记录要返回的下标
        j = 0  # 记录当前对比下标
        str3 = ''
        for x in range(len(str1)):  # x表示str1的下标
            if str2[0] == str1[x]:
                i = x
                j = x
            str3 += str1[j:len(str2) + j]
            if str3 == str2:
                return i
            str3 = ''
        return 0
    
    
    stri1 = "how are you? Im fine, Thank you!"
    stri2 = " you!"
    
    print(find(stri1, stri2))
    
    
  9. 获取两个字符串中公共的字符

    例如: 字符串1为:abcaaa123, 字符串2为: huak3 , 打印:公共字符有:a3

    def unfind(st1, ch):  # 返回值取反的find
        for a in st1:
            if ch == a:
                return False
        return True
    
    
    str1 = 'abcaaa123'
    str2 = 'huak3'
    str3 = ''
    for x in str1:
        for y in str2:
            if (x == y) and unfind(str3, x):
                str3 += x
                break
    print(str3)
    
    
  10. 定义一个变量保存一个学生的信息,学生信心中包括:姓名、年龄、成绩(单科)、电话、性别

    studeng = {
        'name': 'zhangsan',
        'age': 15,
        'chenji': 60,
        'phone': 123456789,
        'sex': 'boy',
    }
    
    
  11. 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

    1. 统计不及格学生的个数
    2. 打印不及格未成年学生的名字和对应的成绩
    3. 求所有男生的平均年龄
    4. 打印手机尾号是8的学生的名字
    5. 打印最高分和对应的学生的名字
    6. 删除性别不明的所有学生
    7. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
stu = [
    {'name': 'zhangsan',
     'age': 21,
     'chenji': 60,
     'phone': '123456781',
     'sex': 'boy', },
    {'name': 'lisan',
     'age': 31,
     'chenji': 70,
     'phone': '123456784',
     'sex': 'girl', },
    {'name': 'sansan',
     'age': 11,
     'chenji': 50,
     'phone': '123456788',
     'sex': 'boy', },
    {'name': 'sansan1',
     'age': 12,
     'chenji': 10,
     'phone': '123456788',
     'sex': 'none', }
]  # 定义


def tongji():  # 统计不及格学生的个数
    i = 0
    for x in stu:
        if x['chengji'] < 60:
            i += 1
    print(i)
    return i


def printname():  # 打印不及格未成年学生的名字和对应的成绩
    for x in stu:
        if x['age'] < 18 or x['chenji'] < 60:
            print(x['name'], x['chenji'])
    return 0


def pingage():  # 求所有男生的平均年龄
    i, j = 0, 0
    for x in stu:
        if x['sex'] == 'boy':
            i += x['age']
            j += 1
    i /= j
    print(i)
    return 0


def phone8():  # 打印手机尾号是8的学生的名字
    for x in stu:
        if int(x['phone'][-1]) == 8:
            print(x['name'])
    return 0


def maxstu():  # 打印最高分和对应的学生的名字
    i = 0
    str1 = ''
    for x in stu:
        if int(x['chenji']) > i:
            i = int(x['chenji'])
            str1 = ''
            str1 = x['name']
    print(i, str1)
    return 0


def delstu():  # 删除性别不明的所有学生
    for x in stu:
        if (x['sex'] == 'boy') or (x['sex'] == 'girl'):  # 性别符合要求则不做任何操作否则删去数据
            continue
        else:
            del stu[stu.index(x)]
    print(stu)
    return 0


def swqp(a, b):  # 交换以a,b为下标的stu的值
    swap = {'name': 'none',
            'age': 0,
            'chenji': 0,
            'phone': '0',
            'sex': 'none', }
    swap = stu[a]
    stu[a] = stu[b]
    stu[b] = swap
    return 0


def stusort():  # 将列表按学生成绩从大到小排序
    i, j = 0, 0
    for tag in range(len(stu)):
        for x in range(tag, len(stu)):
            if int(stu[x]['chenji']) > i:
                i = int(stu[x]['chenji'])
                j = x
        if tag == j:
            pass
        else:
            swqp(j, tag)
        i = 0
    print(stu)
    return 0


# 请在此处测试
stusort()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值