【2021华为云AI实战营】Python编程知识经典题型解析(上)
Python基础语法、数据结构、正则表达式、多任务和魔法方法的使用
理论学习视频:《AI基础课程--Python编程知识》
一、逆序除重
题目描述
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 保证输入的整数最后一位不是0。
输入描述: 输入一个int型整数
输出描述: 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1 输入: 30010733 输出: 3701
字符串是由Unicode码点组成的不可变序列
代码实现
num = input("随机输入一个整数:") 
list =[]
for i in num[::-1]:
    if i not in list:
        list.append(i)
res=''
for i in list:
    res +=i
print("逆序除重后结果:",res)

原理
其中利用list把他们切片,list是由三个元素所组成:param1,param2,param3
param1表示头索引,可以为空,默认0;
param2表示尾索引,可以为空,默认为list.size,
param3表示步长,默认为1,-1表示倒叙原序列输出
list[param1:param2:param3]
代码中list[::-1]就表示把原数据倒叙输出
二、简单的加法
题目描述
输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
如果有多对数字的和等于输入的数字,输出任意一对即可。
例如:输入数组1 2 4 7 11 15和数字15。
由于4+11=15,因此输出4和11。
代码实现
l = input("请输入字符串,以空格为间隔:")  
n = input("输入数字:")  
def func():
    # 在此编写代码
    larr=l.split(" ")
    llen=len(larr)    
    for i in range(llen-1):
        a=larr
        for j in range(i+1,llen):
            b=larr[j]
            if int(a)+int(b)==int(n):
                print("所输入的字符串中符合条件的两个数为:")
                print(a,b)
func() 
 
三、巧玩字符串
题目描述
输入一个字符串,求最大的没有重复字符的子字符串长度
比如:输入huaweicloudaigallery
输出 9 (huaweiclo或aweicloud或weiclouda)
代码实现
string = input("请输入一组字符串:")  # 手动输入字符串
def func(str):
    maxlength=[]
    length=len(str) 
    for i in range(length):
        tmp=str
        for j in range(i+1, length):
            if str[j] not in tmp:
                tmp += str[j]
            else:
                break
        maxlength.append(tmp)
    N=len(maxlength)
    for n in range (N):
        for m in range(n+1,N):
            if len(maxlength[n])<len(maxlength[m]):
                maxlength[n],maxlength[m]=maxlength[m],maxlength[n]   
    print(maxlength)
    return maxlength[0]
    
longest_str=func(string) 
  
先把所有包含的基本情况拆出来,然后再调试一下统计最大字符串数
str0=input("请输入一组字符串:")
def func(str_):
    max_num = 0
    str_list = []
    for i in str_:
        if i not in str_list:
            str_list.append(i)
            print(str_list)
        else:
            str_list = []
            str_list.append(i)
        new_max_num = len(str_list)
        if new_max_num > max_num:
            max_num = new_max_num
            final_str = "".join(str_list)
    print("最长字串长度:",max_num)
    return max_num, final_str
resulut=func(str0) 
  
只显示最大无重复的字符串:
string = input("请输入一组字符串:")
    
def func():
    done = False
    final_str = []
    len_string = len(string)
    for i in range(len_string,-1,-1):
        for j in range(len_string-i+1):
            sub_string = string[j:i+j]
            len_sub_string = len(sub_string)
            len_set_sub_string =len(set(sub_string))
            if len_sub_string == len_set_sub_string:
                maxlength = len_sub_string
                final_str.append(sub_string)
                done = True
        if done:
            break
    print("最长字串长度:",maxlength,final_str)
    
func() 
  
四、奇妙的三元组
题目描述
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 *
- 注意:答案中不可以包含重复的三元组。
 
示例:
给定数组 -1 0 1 2 -1 -4
满足要求的三元组集合为:
-1 0 1
-1 -1 2
代码实现
def func(nums, a=0):
    if len(nums) < 3:
        return []
    a = 0
    result = []
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            for k in range(j+1, len(nums)):
                if nums+nums[j]+nums[k] == a:          # 判断是否等于目标值
                    temp = [nums, nums[j], nums[k]]
                    if sorted(temp) not in result:        # 去重
                        result.append(sorted(temp))
    return result
if __name__ == '__main__':
    nums = [-1, 0, 1, 2, -1, -4]
    result = func(nums, a=0)
    print(result) 
   
ok输出没问题,改进一下还是喜欢可以用户自定义输入的:
string = input("请输入一个数组:")
def func():
    nums = [int(t) for t in string.split()]   
    list1 = []
    a = 0
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            for k in range(j+1, len(nums)):
                if nums + nums[j] + nums[k] == a:         #判断是否等于目标值
                    temp = [nums, nums[j], nums[k]]
                    temp.sort()
                    if temp not in list1:          #去重
                        list1.append(temp)
    print("满足要求的三元组集合为:")
    for result in list1:
        print(result)
    
func() 
   
五、学习成绩划分(判断1)
题目描述
输入一个0-100之间的整数成绩,
学习成绩>=90的同学,用A表示;
学习成绩60-89分的同学,用B表示;
学习成绩<60的同学,用C表示。
例如:输入成绩98,则会输出A
代码实现
score = input("请输入你的成绩:") 
score = float(score) 
if 100 >= score >= 90:
    print("恭喜您的成绩是:A")
elif 90 > score >= 60:
    print("您的成绩是:B")
elif score < 60:
    print("再接再厉您的成绩是:C")
else:
    print("请输入正确的分数") 
    
六、奖金分配(判断2)
题目描述
企业发放的奖金根据利润提成。 利润(I)低于或等于10 万元时,奖金可提10%;
利润高于10 万元,低于20 万元时,低于10 万元的部分按10%提成,高于10 万元的部分,可可提成7.5%;
20 万到40 万之间时,高于20 万元的部分,可提成5%;
40 万到60 万之间时高于40 万元的部分,可提成3%;
60 万到100 万之间时,高于60 万元的部分,可提成1.5%;
高于100 万元时,超过100 万元的部分按1%提成,
从键盘输入当月利润I,求应发放奖金总数?
代码实现
money = input("请输入公司当月所获利润总额(万元):")
money = float(money)
   
if 0 <= money <= 10:
    bonus = money*0.1
elif 10 <= money <= 20:
    bonus = 10*0.1 + (money-10)*0.075
elif 20 < money <= 40:
    bonus = 10*0.1 + 10*0.075 + (money - 20)*0.05
elif 40 < money <= 60:
    bonus = 10*0.1 + 10*0.075 + 20*0.05 + (money - 40)*0.03
elif 60 < money <= 100:
    bonus = 10*0.1 + 10*0.075 + 20*0.05 + 20*0.03 + (money - 60)*0.015
elif 100 < money:
    bonus = 10*(0.1 + 0.075) + 20*(0.05 + 0.03) + 40*0.015 + (money-100)*0.01
print("当月应发放奖金总数为:%f万元" %bonus) 
     
七、回文检查器
题目描述
如果给定的一个字符串是回文,那么返回true,否则返回false。
palindrome(回文),指在忽略标点符号、大小写和空格的前提下,正着读和反着读一模一样。
代码实现
*我这里用了两种方法
1、函数法:
def func():
    s = input('请输入一个数或者字符串:')
    if s == s[::-1]:         #判断正序是否等于逆序,并返回True or False
        print('True')
    else:
        print('False')
func() 
      
2、循环法:
str=input("请输入一个数或者字符串:")
str = str*2         #强制偶数位
i = 0
while i<len(str):
    if str[i] != str[-1-i]:
        print('False')
        break
    else:
        i += 1
else:
    print('True') 
      
八、罗马数字转换器
题目描述
把传入的数字转变为罗马数字。(0~9)
转换后的罗马数字字母必须都是大写。
代码实现
这是个简单的10以内(0~9)转换:
num=input("请输入0-9间任意数字:")
b = dict([("1", "Ⅰ"),("2", "Ⅱ"), ("3", "Ⅲ"),("4", "Ⅳ"),("5", "Ⅴ"),("6", "Ⅵ"),("7", "Ⅶ"),("8", "Ⅷ"),("9", "Ⅸ")])
print("转换后的大写罗马数字字母: ", b[num]) 
       
这是多位的转换:
num = int(input('请输入任意数字:'))
c = {
    'g': ('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'),
    's': ('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'),
    'b': ('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'),
    'q': ('', 'M', 'MM', 'MMM')
}
roman = []
# 用整除和取余获得个十百千对应的数字
roman.append(c['q'][num // 1000])
roman.append(c['b'][(num // 100) % 10])
roman.append(c['s'][(num // 10) % 10])
roman.append(c['g'][num % 10])
print("转换后的大写罗马数字字母: ")
print(''.join(roman)) 
       
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)