华为机试(python):字符串1

HJ5 进制转换

题目:

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

输入描述:

输入一个十六进制的数值字符串。

输出描述:

输出该数值的十进制字符串。不同组的测试用例用\n隔开。

while True:
    try:
        number = input()
        n = len(number)
        dic = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
        final = 0
        #输入字符串从前往后遍历
        for i in range(2,n):
            final += dic[number[i]]*(16**(n-i-1))
        print(final)
        
        
    except:
        break

更简洁的方法:

while True:
    try:
        print(int(input(),16))
        
    except:
        break

HJ10 字符个数统计

题目:

编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次

例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

输入描述:

输入一行没有空格的字符串。

输出描述:

输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。

思路:运用集合的性质,即集合中没有重复元素。

while True:
    try:
        print(len(set(list(input()))))
    except:
        break
        

HJ11 数字颠倒/HJ12 字符串反转

题目:

输入一个整数,将这个整数以字符串的形式逆序输出

程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

输入描述:

输入一个int整数

输出描述:

将这个整数以字符串的形式逆序输出

while True:
    try:
        print(input()[::-1])
        
        
    except:
        break

HJ14 字符串排序

题目:

给定 n 个字符串,请对 n 个字符串按照字典序排列。

输入描述:

输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。

输出描述:

数据输出n行,输出结果为按照字典序排列的字符串。

while True:
    try:
        n = int(input())
##决定一次输入多少
        list = [input() for i in range(n)]
        list.sort()
        for j in list:
            print(j)
    except:
        break
            

HJ20 密码验证合格程序

题目:

密码要求:

1.长度超过8位

2.包括大小写字母.数字.其它符号,以上四种至少三种 (列出四种形式

3.不能有长度大于2的不含公共元素的子串重复 (注:其他符号不含空格或换行)(将所有长度为3的子串列出来

输入描述:

一组字符串。

输出描述:

如果符合要求输出:OK,否则输出NG

import re
def checkLegal(pswd):
    if len(pswd) <= 8:
        return False
    else:
        sub = []
        for i in range(len(pswd)-2):
            #生成长度为3的子串
            sub.append(pswd[i:i+3])
        #如果所有子串中有重复的,经过set处理后,长度一定会变小
        if len(set(sub)) < len(sub):
            return False
        type_ = 0
        ##使用正则表达式
        Upper = '[A-Z]'
        Lowwer = '[a-z]'
        num = '\d'#数字
        chars = '[^A-Za-z0-9]'
        patterns = [Upper,Lowwer,num,chars]
        for pattern in patterns:
            #在pswd中搜索pattern
            pw = re.search(pattern,pswd)
            if pw:
                type_  += 1
        if type_ >= 3:
        
            return True
        else:
            return False
while True:
    try:
        
        pswd = input()
        print('OK' if checkLegal(pswd) else 'NG')

    except:
        break
        

HJ21 简单密码

题目:

大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,就这么简单,渊子把更简单的密码中出现的小写字母都变成对应的数字,数字和其它的符号都不做变换,

输入描述:

输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾

输出描述:

真正的密文

声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,不就是 y 了嘛,简单吧。记住,Z 往后移是 a 哦。

##小写字母变成数字
##大写字母变成小写字母,再向后移动一位
##数字和其它符号不变换

while True:
    try:
        
        a = input()
        length = len(a)
        for i in range(length):
            if a[i].isalpha():
                if a[i].lower() == a[i]:
                    if a[i] == 'a' or 'b' or 'c':
                        a[i] = 2
                    elif a[i] == 'd' or 'e' or 'f':
                        a[i] = 3
                    elif a[i] == 'g' or 'h' or 'i':
                        a[i] = 4
                    elif a[i] == 'j' or 'k' or 'l':
                        a[i] = 5
                    elif a[i] == 'm' or 'n' or 'o':
                        a[i] = 6
                    elif a[i] == 'p' or 'q' or 'r' or 's':
                        a[i] = 7
                    elif a[i] == 't' or 'u' or 'v':
                        a[i] = 8
                    else:
                        a[i] = 9
                else:
                    n = ord(a[i])-64
                    a[i] = chr(n).lower()
        print(a)
                        
        
        
        
    except:
        break
        
        

结果没有出现!!

while True:
    try:
        s = input()
        res = []
        for i in s:
            if i.isdigit():
                res.append(i)
            elif i.isupper() and i != 'Z':
                res.append(chr(ord(i.lower()) + 1))
            elif i == 'Z':
                res.append('a')
            else:
                if i in 'abc':
                    res.append('2')
                elif i in 'def':
                    res.append('3')
                elif i in 'ghi':
                    res.append('4')
                elif i in 'jkl':
                    res.append('5')
                elif i in 'mno':
                    res.append('6')
                elif i in 'pqrs':
                    res.append('7')
                elif i in 'tuv':
                    res.append('8')
                else:
                    res.append('9')
        print(''.join(res))
    except:
        break

HJ23 删除字符串中出现次数最少的字符

题目:

实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

输入描述:

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

输出描述:

删除字符串中出现次数最少的字符后的字符串。

思路一:元素列表与计数列表的索引对应

while True:
    try:
        a = l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值