2021华为云AI实战营】Python编程知识经典题型解析(上)

网友投稿 628 2022-05-29

Python基础语法、数据结构、正则表达式、多任务和魔法方法的使用

理论学习视频:《AI基础课程--Python编程知识》

【2021华为云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]就表示把原数据倒叙输出

动手实践一下吧:https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=f0af65c2-8ec9-48e0-9a60-b98f6fc93d17

二、简单的加法

题目描述

输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。

如果有多对数字的和等于输入的数字,输出任意一对即可。

例如:输入数组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()

动手实践一下吧:https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=07029b24-d843-41f5-bec4-0dcc21143986

三、巧玩字符串

题目描述

输入一个字符串,求最大的没有重复字符的子字符串长度

比如:输入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])

先把所有包含的基本情况拆出来,然后再调试一下统计最大字符串数

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()

动手实践一下吧:https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=992e8582-4407-4029-9fe6-26df5b01cf8c

四、奇妙的三元组

题目描述

给你一个包含 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()

动手实践一下吧:https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=247ebb72-fe21-4847-9e11-16f38afe3764

五、学习成绩划分(判断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("请输入正确的分数")

动手实践一下吧:https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=3cf7d42d-f5c8-451b-8aa6-973809bbe3bc

六、奖金分配(判断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)

动手实践一下吧:https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=4e26bd2a-a5e3-4d17-a34e-548d752d7f99

七、回文检查器

题目描述

如果给定的一个字符串是回文,那么返回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

动手实践一下吧:https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=2fe5a68a-fda3-4ba9-9eb8-d6679661c3e7

八、罗马数字转换器

题目描述

把传入的数字转变为罗马数字。(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))

动手实践一下吧:https://marketplace.huaweicloud.com/markets/aihub/notebook/detail/?id=350bebb5-3faf-497a-a5ca-c8ac67b51383

AI开发平台ModelArts Python 数据结构

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:我用过的设计模式(1)-- 本门心法
下一篇:对线面试官 | 字节跳动一面
相关文章