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

举报
Jack20 发表于 2021/08/11 12:03:13 2021/08/11
【摘要】 AI Gallery课程 《Python 编程知识》 通过学习和课后作业的练习: 1、掌握Python基础语法; 2、掌握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]就表示把原数据倒叙输出


动手实践一下吧: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])<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()

动手实践一下吧: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<len(str):
    if str[i] != str[-1-i]:
        print('False')
        break
    else:
        i += 1
else:
    print('True')

动手实践一下吧: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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。