【2021华为云AI实战营】Python编程知识作业整理

举报
花溪 发表于 2021/08/20 14:36:08 2021/08/20
【摘要】 课程地址:AI Gallery_Notebook_云市场-华为云  Python编程知识视频学习地址:AI基础课程--Python编程知识作业逆序除重;题目描述输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 保证输入的整数最后一位不是0。输入描述: 输入一个int型整数输出描述: 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数示例1 输入: 30010...

课程地址:AI Gallery_Notebook_云市场-华为云  Python编程知识

视频学习地址:AI基础课程--Python编程知识

作业

题目描述

输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 保证输入的整数最后一位不是0。

输入描述: 输入一个int型整数

输出描述: 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

示例1 输入: 30010733 输出: 3701

代码实现 Python编程知识-逆序除重

num = input() # 输入字符串,以空格为间隔,请自行实现将字符串转换为数组的代码
num=[int(x) for x in str(num)]#将整数转换为数组  
res_arr = []
for i in reversed(num):
    if i not in res_arr:
        res_arr.append(i)#去重之后添加到新数组
        res=str(int(''.join(str(res) for res in res_arr)))#将数组转换为字符串
print(res)

题目描述

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

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

例如:输入数组1 2 4 7 11 15和数字15。

由于4+11=15,因此输出4和11。

代码实现 Python编程知识-简单的加法

l = input()  # 输入字符串,以空格为间隔,请自行实现将字符串转换为数组的代码
l=l.split(' ')#将字符串转换为数组
n = input()  # 输入数字
b=int(n) #转换数字
def func(nums,n):
    for a in nums:
        for b in nums:
            a, b = int(a), int(b)
            #如果a+b=n  就输出n
            if a + b == n:
                print(a, b)
                return
    

func(l,b)

题目描述

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

比如:输入huaweicloudaigallery

输出 9 (huaweiclo或aweicloud或weiclouda)

代码实现  Python编程知识-最大子字符串

string = input()  # 手动输入字符串

def func(s):
    # 在此编写代码
    #找出来一个字符串中最长不重复子串
    res_list = []
    length = len(s)
    for i in range(length):
        tmp = s[i]
        for j in range(i + 1, length):  # 遍历,不存在则拼接,已存在则打断循环
            if s[j] not in tmp:
                tmp += s[j]  
            else:
                break
        res_list.append(tmp)  # 构造子串列表

    #冒泡排序:
#     for i in range(len(res_list) - 1):
#         for j in range(len(res_list) - i - 1):
#             if len(res_list[j]) > len(res_list[j + 1]):
#                 res_list[j], res_list[j + 1] = res_list[j + 1], res_list[j]

   # 选择排序:
    for i in range(len(res_list)):  
        k = i
        j = i + 1
        while j < len(res_list):
            if len(res_list[k]) > len(res_list[j]):
                k = j
            j += 1
        if i != k:
            res_list[i], res_list[k] = res_list[k], res_list[i]

    return res_list[-1]

    maxlength=func(s)
    print(len(maxlength))
    

func(string)

题目描述

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 *

  注意:答案中不可以包含重复的三元组。

  示例:

  给定数组 -1 0 1 2 -1 -4

  满足要求的三元组集合为:

  -1 0 1

  -1 -1 2

代码实现   Python编程知识-奇妙的三元组

def threeSum(num):
    out = []  # 输出的和为0的嵌套列表
    if len(num) < 3:
        return []
    num.sort()  # 排序
    for j in range(0, len(num) - 2):
        if num[j] > 0:  # 如果num[j]是正数,num[j]后的数都比num[j]大,终止循环
            break
        if j > 0 and num[j] == num[j - 1]:  # 如果num[j]和前一个数相同,跳过
            continue
        left = j + 1  # 左指针
        right = len(num) - 1  # 右指针
        target = 0 - num[j]  # 剩余两个数的和
        while left < right:
            if num[left] + num[right] == target:
                out.append([num[j], num[left], num[right]])
                while left < right and num[left] == num[left + 1]:
                    left += 1
                while left < right and num[right] == num[right - 1]:
                    right -= 1
                left += 1
                right -= 1
            elif num[left] + num[right] > target:
                right -= 1
            else:
                left += 1
    return out


n = [ -1, 0, 1, 2, -1, -4]
a=threeSum(n)#满足要求的三元素集合
for i in range(0,len(a)):#循环分别输出满足要求的三元素
    print(a[i])

题目描述

输入一个0-100之间的整数成绩,

学习成绩>=90的同学,用A表示;

学习成绩60-89分的同学,用B表示;

学习成绩<60的同学,用C表示。

例如:输入98,输出A

代码实现  Python编程知识-学习成绩划分

#分数<60C  >90A  60-89 B
points=int(input('输入分数:'))
if points>=90 and points<=100:
    grade='A'
elif points>=60 and points<90:
    grade='B'
elif points>=0 and points<60:
    grade='C'
else:
    grade="请输入0-100之间的整数成绩"
print(grade)

题目描述

企业发放的奖金根据利润提成。 利润(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,求应发放奖金总数?

代码实现   Python编程知识-奖金分配

# profit=int(input('请输入当月利润,单位为万元: '))
# bonus=0
# thresholds=[10,10,20,20,40]#利润差值
# rates=[0.1,0.075,0.05,0.03,0.015,0.01]#奖金提成
# for i in range(len(thresholds)):
#     if profit<=thresholds[i]:
#         bonus+=profit*rates[i]
#         profit=0
#         break
#     else:
#         bonus+=thresholds[i]*rates[i]
#         profit-=thresholds[i]
# bonus+=profit*rates[-1]
# print(bonus, '万元')
profit = float(input('请输入当月利润,单位为万元:'))
if profit <= 10:
    bonus = 10 * 0.1
elif 10 < profit <= 20:
    bonus = 10 * 0.1 + (profit-10) * 0.075
elif 20 < profit <= 40:
    bonus = 10 * 0.1 + 10 * 0.075 + (profit-20) * 0.05
elif 40 < profit <= 60:
    bonus = 10 * 0.1+ 10 * 0.075 + 20 * 0.05 + (profit-40) * 0.03
elif 60 < profit <= 100:
    bonus = 10 * 0.1+ 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (profit-60) * 0.015
elif profit > 100:
    bonus = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (profit-100) * 0.015
print(bonus, '万元')

题目描述

如果给定的一个字符串是回文,那么返回true,否则返回false。

palindrome(回文),指在忽略标点符号、大小写和空格的前提下,正着读和反着读一模一样。

代码实现  Python编程知识-回文检查器

# n=input("请输入一个数值:")
# a=0
# b=len(n)-1
# flag=True
# while a<b:
#     if n[a]!=n[b]:
#         print('false')
#         flag=False
#         break
#     a,b=a+1,b-1
# if flag:
#     print('true')
#c.isdigit()c中至少有一个字符且如果S中的所有字符都是数字,那么返回结果就是True;否则,就返回False
#c.isalpha()c中至少有一个字符且如果S中的所有字符都是字母,那么返回结果就是True;否则,就返回False

a=input("请输入一个字符串:")
b=''
for c in a:
    if c.isalpha() or c.isdigit():
        b=b+c.lower()#转小写
for i in range(len(b)//2):
    if b[i]!=b[-1-i]:
        print(false)
else:
    print(true)

题目描述

把传入的数字转变为罗马数字。(0~9)

转换后的罗马数字字母必须都是大写。

代码实现  Python编程知识-罗马数字转换器

class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        if num > 9 or num < 0:
            return 0
        elif num == 0:
            return "N"
        # 字典是无序的,所以不使用字典
        # 注意这里一定要是倒序,否则执行会有问题,让数从大往小查找适合的罗马数
        num_tuple = [9,8,7,6,5,4,3,2,1]
        roman_tuple = ["IX", "VIII","VII","VI","V", "IV", "III","II","I"]
        # 记录结果的字符串
        result_str = ""
        # 从整数的列表中开始遍历
        for i in range(len(num_tuple)):
            # 从大往小开始判断,num小于当前数则进行下一次循环
            # num大于当前数则进行减法运算,并取出相应位置的Roman数
            while num >= num_tuple[i]:
                num -= num_tuple[i]
                result_str += roman_tuple[i]
        return result_str


if __name__ == '__main__':
    s = Solution()
    print(s.intToRoman(9))

题目描述

世界上最简单、最著名的加密方法是凯撒密码,也叫移位密码。在移位密码中,明文中的字母通过按照一个固定数目进行偏移后被替换成新的字母。

ROT13 是一个被广泛使用的编码技术,明文中的所有字母都被移动 13 位。因此,'A' ↔ 'N', 'B' ↔ 'O' 等等。

请编写一个函数,用于解码一个被 ROT13 编码的字符串,然后返回解码后的结果。

所有解码后的字母都必须为字母大写。请不要解码非字母的字符(例如,空格、标点符号),但你需要在结果中保留它们。

代码实现  Python编程知识-凯撒密码

# import codecs
# s   = "hello"
# enc = codecs.getencoder( "rot-13" )
# os  = enc( s )[0]
# print(os)
def rot13(message):
    def decode(c):
        if 'a' <= c <= 'z':
            base = 'a'
        elif 'A' <= c <= 'Z':
            base = 'A'
        else:
            return c
        return chr((ord(c) - ord(base) + 13) % 26 + ord(base))
    return "".join(decode(c) for c in message)
str=input("请输入字符串")
rot13(str.upper())

题目描述

HZF有一个魔法棒,魔法棒有很多功能,其中最简单的是对字母的改变:可以将大写字母变成小写字母(A->a,B->b,C->c…Z->z),将小写字母变成大写字母(a->A…z->Z),魔法对数字不生效。HZF让你告诉他改变之后的字符串是什么样的。

输入 输入一个字符串(只包含大小写字母和数字)。每个字符串字符数(0 < n <= 1000)。

输出 输出改变后的字符串。

样例 输入样例 1

abC02 输出样例 1

ABc02

输入样例 2

aceACE 输出样例 2

ACEace 提示样例 2

代码实现  Python编程知识-HZF的魔法棒

string = input("请输入一个字符串(长度0-1000,只包含大小写字母和数字)")
while string.isalnum() == False or len(string)>1000:#判断输入的字符串是0-1000的数字字母
    print("请重新输入")
    break
else:
    result = ''
    for i in string:
        if i.isupper() == True: #大写转小写
            i=i.lower()
        elif i.islower()== True:#小写转大写
            i=i.upper()
        result +=i
    #print( len(string))
    print(result)   

题目描述

大家都玩过扫雷游戏吧,给定一个矩形方正区域,里面有若干个地雷,用鼠标点击,点击后如果出现一块区域,那么说明这个点周围8个方向没有地雷,如果出现数字,数字是几,那么就表示这个区域周围8个方向有几颗地雷,如果是地雷,那你很不幸就输掉了。 现在告诉你这个图里地雷的分布,你来给出每个点上面的数字应该是多少?

输入 数据的第一行有2个整数n, m(1 <= n, m <= 50),表示一个n * m的区域,n行m列,接下来n行每行有一个长度为m的字符串,字符串只包含2种字母,”.”和”X”,其中”.”表示这个地方不是地雷,”X”表示这个地方是地雷。

输出 请输出n行内容,每一行是一个长度为m的字符串,由数字和符号”X”组成,如果这个点不是地雷,那么就表示这个点周围有几颗地雷,否则这个点存放符号”X”,表示这个点是地雷。

样例 输入样例 1

3 5 ..... ..XX. ..... 输出样例 1

01221 01XX1 01221

代码实现  Python编程知识-扫雷

counter = 1
while 1:
    row, col = map(int, input('请输入行和列:').split())
    if row == col == 0:
        break
    padding = ['.' for _ in range(col + 2)]
    field, mine = [padding, padding], [[0 for _ in range(col + 1)] for _ in range(row + 1)]
    print('输入地图 X表示地雷 ')
    for i in range(1, row + 1):
        field.insert(i, ['.'] + list(input()) + ['.'])
 
    for j in range(1, row + 1):
        for k in range(1, col + 1):
            if field[j][k] == 'X':
                mine[j][k] = 'X'
            else:
                temp = [field[j + 1][k + 1], field[j - 1][k - 1],
                        field[j + 1][k - 1], field[j - 1][k + 1],
                        field[j + 1][k], field[j - 1][k],
                        field[j][k - 1], field[j][k + 1]
                        ]
                mine[j][k] = sum(1 for i in temp if i == 'X')
 
    print(f"输出结果 #{counter}:")
    counter += 1
    for i in range(1, row + 1):
        print(*mine[i][1:], sep='')
    print()

题目描述

如果传入的字符串是一个有效的中国电话号码格式,则返回true。 例如: 134-4562-5655 13469587456 1314 122 9899

代码实现 Python编程知识-电话号码验证器

import re

p=re.compile('(^1(3[\d])|(47|45)|(5[^3|4])|(66)|(7[013678])|(8[\d])|(9[89]))\d{8}$')#创建一个正则表达
#r是转义,手机号都是1开头^1,后面排列的是第二位和第三位,
# 后面还有8位0-9的任意整数\d{8},并且以此结尾$,
p1=str(input("请输入一个手机号:"))
tel=p1.replace(' ','').replace('-','')#去除空格和分隔符
s = p.search(tel)
 
if s:
    # print(s.group())
    print('true')
else:
    print('不是正确手机号,请重新输入')

题目描述

提取所有人的生日

需要匹配的 -- 需要提取的

  • 刘伟 1996.8.24 - - 8 24

  • 李伟 1993年1月2日 - - 1 2

  • 聂芳 1997-7-24 - - 7 24

  • 陈伟 1996.3.21 - - 3 21

  • 杜英 1991.12.1 - - 12 1

  • 段秀 1994-7-5 - - 7 5

  • 路娜 1993年1月6日 - - 1 6

编写一个正则表达式,使得以上所有的生日都能被正确提取

代码实现 Python编程知识-生日提取作业

import re  # 导入正则表达式模块

s = input()  # 输入上述任一需要提取的生日格式,如: 刘伟1996.8.24
#\d  是匹配一个数字(0到9) + 表示 1个或多个
result = re.findall('\d+', s)  # 在单引号内输入正则表达式
#输出生日中的月份和日期 \d+匹配生日中的单个数字 按年月日顺序  取月份和日期 即输出匹配数字中的第二个和第三个 
result = result[1] + ' ' + result[2]
print(result)  # 输出正确结果 如: 8 24

小华和他的小伙伴们想要参加一个游戏,但是参加的人很多需要筛选。主办方的选择孩子的标准如下:
n个孩子从左到右站成一排,每个孩子都有一个分数(该分数为正整数),要求所选出的孩子们必须是连续的一段,而且所选出的孩子的分数的平均值必须大于等于预先给定的一个常数b。但是这样选择的方法可能并不唯一,请问有几种选法呢?

输入

第一行:输入候选孩子的个数n(1<=n<=20000)和给定的常数b(1<=b<=500)
接下来n行:输入n个孩子的分数Xi(i=1,2,…)且1<=Xi<=500。

输出

输出选择的种数。

输入样例

5 9 32 4 9 21 10

输出样例

13

提示

merge sort
a[i]表示第i个孩子的分数,s[i]表示从第一个孩子到第i个孩子(包括第i个)的分数之和,则第j个到第i个的分数的平均值为(s[j]-s[i-1])/(j-i+1),即直角坐标系上的(i-1,s[i-1]).(j,s[j])两点连线的斜率。所以平均值大于或等于b,就是斜率大于或等于b。那么判断从第i个人开始选有几种选法,过(i-1,s[i-1])做一条斜率为b的直线(与y轴交点为y[i-1]),有几个点是在它的上方。根据直线的性质,将这条直线平移到所判断的点(j,s[j]),与y轴的交点为y[j],如果y[j]<y[i-1],则不能选,否则就可以选。因而就可以通过判断y[](y[0]=0)这一组数据里,y[i]>=y[j]的对数。也可以用总的(n+1)*n/2减去逆序对(不包括相等的情况)。

代码实现 Python编程知识-被选召的孩子

n,b = map(int, input('输入候选孩子的个数n(1<=n<=20000)和给定的常数b(1<=b<=500):').split())
score = input('输入n个孩子的分数Xi(i=1,2,…)且1<=Xi<=500:')

data_list = score.strip().split()
data_list = [int(x) for x in data_list]
print(data_list)
num = 0
for i in range(1, n+1):
    for j in range(n-i+1):
        avg=sum(data_list[j:i+j]);
        if  avg/ i >= b:
            num += 1
print(num)

题目描述

你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符”?”,表示他不会算。

输入 输入文件的第一行只有一个数字T(1 <= T <= 1000),表示下面有T个算术运算,接下来有T行,每行包含一道题目,格式有以下4种情况: a+b=c a-b=c a+b=? a-b=? 其中0 <= b <= a <= 100,0 <= c <= 200,且不包含任何空白字符。输入的所有整数均不含前导0。

输出 输出仅一行一个数字,表示”a+b=c”和”a-b=c”中计算正确的个数。

样例 输入样例 4 1+2=3 3-1=5 6+7=? 99-0=99 输出样例 2

代码实现  Python编程知识-弟弟的作业

print('请输入行数后回车输入作业,输入完成后回车查看结果')
num=int(input('请输入行数'))
z = 0
while True:
   try:
       a = input().split("=")  # 根据等于号将字符划分为两部分
       b = eval(a[0])  # 得到算式的正确结果       
       if a[1] != "?":  # 先判断是否是问号
           c = eval(a[1])        
           if b == c:  # 正确结果和输入结果是否一致
               z = z + 1
   except:
       break
print(z)

#判断结果是否正确的函数
# def check(s):
#     if '?' in s:
#         return False
#     else:
#         L = list(s)
#         L.insert(L.index('='),'=')
#         if eval("".join(L)):
#             return True
#         else:
#             return False
# #正确题目数量
# count = 0
# while True:
#     try :
#         S = input()
#         if check(S):
#             count += 1
#     except:
#         break
# print(count)


# n=0
# while True:
#     try:
#         x=input()
#         x=x.replace("+"," ")
#         x=x.replace("-"," ")
#         x=x.replace("="," ")
#         x=x.split(" ")
#         a=int(x[0])
#         b=int(x[1])
#         c=x[2]
#         if c=="?" or c=="?":
#             continue
#         if a+b==int(c) or a-b==int(c):
#             n=n+1
#     except:
#         break
# print(n)

【2021年华为云AI实战营系列】- AI编程Python实战营

2021年华为云AI实战营重磅推出: AI编程Python实战营、机器学习实战营、MindSpore AI框架实战营、深度学习实战营、强化学习实战营、ModelArts实战营。 快速打通【全栈人工智能】的“任督二脉”,让AI开发极简,适合学习的人群:0基础小白,0~3年初级开发,大学生,想转行,想转岗。快快行动起来~

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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