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