Python_编程练习题_01

1. a + b

题目

给你两个数a、b,请你计算它们的和,并输出。
例如: a = 3, b = 2
则输出:5

示例

输入:a = 1 b = 2
输出:3

解析

直接print(a+b)即可

a = 2
b = 5
def solve_it():   
    return a+b #your answer

print(solve_it())  # 答案需要输出

运行结果:

7

2. 列表排序

题目

给你一个列表 L, 对L进行升序排序并输出排序后的列表。
例如:L = [8,2,50,3]
则输出:[2,3,8,50]

示例

输入:L = [4, 2, 25, 7777777, 100, 3, 77777777, 77777777, 77777777, 77777777]
输出:[2, 3, 4, 25, 100, 7777777, 77777777, 77777777, 77777777, 77777777]

解析

  1. list.sort() 默认正序排列,原地排序,会修改list的值
  2. listSorted = sorted(list) 默认正序排列,不改变原来的列表,会创建一个新的列表存放排序后的结果
L = [8, 2, 50, 3, 4, 7]


def solve_it():
    L.sort()
    return L  # your answer


def solve_it_2():
    LSorted = sorted(L)
    return LSorted


print(solve_it())  # 答案需要输出

结果:

3. 字符串逆序

题目

给你一个字符串 a, 请你输出逆序之后的a。
例如:a=‘xydz’
则输出:zdyx

解析

  1. 字符串逆序,使用切片[::-1]
  2. 使用for循环倒叙遍历插入的方式
  3. 正序遍历然后从前面插入的方式
a = "abcdefg"
def solve_it():
    return a[::-1]

def solve_it_2():
    newA = ""
    for i in range(len(a) - 1):
        newA += a[(len(a) - 1 - i)]
    return newA

def solve_it_3():
    newA = []
    for c in a:
        newA.insert(0,c)
    newA = "".join(newA)
    return newA

print(solve_it())  # 答案需要输出

结果:

4. 输出字典key

题目

给你一字典a,如a={1:1,2:2,3:3},输出字典a的key,以’,‘连接,如‘1,2,3’。要求key按照字典序升序排列(注意key可能是字符串)。例如:a={1:1,2:2,3:3}, 则输出:1,2,3

解析

  1. dict.keys()可以获取所有的keys
  2. keys进行排序
  3. 使用",".join()拼接
a = {
    
    1:1,2:2,3:3}
def solve_it():
    res = ",".join([str(x) for x in sorted(a.keys())])
    return  res

print(solve_it())  # 答案需要输出

结果:

5. 输出字符奇数位置的字符串

题目

给你一个字符串 a, 输出a中奇数位置字符构成的字符串(位置编号从1开始)。
例如:a=‘xyzwd’
则输出:xzd

解析

  1. 遍历字符串,索引开始为1,当index % 2 != 0的时候输出
  2. 遍历字符串,索引从0开始,当索引+1 % 2 != 0的时候输出
  3. 直接使用切片,每隔两个取一个字符
a = "0123456789"


def solve_it():
    return a[::2]


def solve_it_2():
    newA = ""
    for index, c in enumerate(a, start=1):
        if index % 2 != 0:
            newA += c
    return newA


def solve_it_3():
    newA = ""
    for i in range(len(a) - 1):
        if (i + 1) % 2 != 0:
            newA += a[i]
    return newA


print(solve_it())  # 答案需要输出

结果:

6. 求解100以内的所有的素数

题目

输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格)。

解析

  1. 素数的判定,对于大于一的整数,除了1和它本身,不能被其他的自然数整除
  2. 将结果用" "字符串拼接即可
def solve_it():
    res = []
    for i in range(100):
        if i >= 2:
            for j in range(2,i):
                if i % j == 0:
                    break
            else:
                res.append(str(i))

    return " ".join(res)

print(solve_it())  # 答案需要输出

结果:

7. 求矩形面积

题目

已知矩形长a,宽b,输出其面积和周长,面积和周长以一个空格隔开。
例如:a = 3, b = 8
则输出:24 22

解析

  1. 矩形面积 a*b
  2. 矩形的周长 2 * (a + b)
a = 10
b = 20


def solve_it():
    return " ".join([str(x) for x in [a * b, (a + b) * 2]])


print(solve_it())  # 答案需要输出

结果:

8. 求中位数

题目

给你一个整数列表L, 输出L的中位数(若结果为小数,则保留一位小数)。
例如: L=[0,1,2,3,4]
则输出:2

解析

  1. 首先是排序,按照从小到大进行排序
  2. 如果是奇数,中位数的索引就相当于是 len(L) // 2
  3. 如果是偶数,中位数是中间的两个数的均值 len(L) // 2 -1 以及 len(L) // 2
# 参考代码,如嫌啰嗦,建议删除,一行搞定
L = [0, 1, 8, 3, 4, 5]


def solve_it():
    L.sort()
    if len(L) % 2 == 0:
        indexMiddle1 = len(L) // 2 - 1
        indexMiddle2 = len(L) // 2
        res = round((L[indexMiddle1] + L[indexMiddle2]) / 2, 2)
    else:
        indexMiddle = len(L) // 2
        res = round(L[indexMiddle], 2)
    return res


print(solve_it())  # 答案需要输出

结果:

9. 最大公约数

题目

给你两个正整数a和b, 输出它们的最大公约数。
例如:a = 3, b = 5
则输出:1

解析

  1. 先排序a,b 使得 a > b
  2. a 对 b取余,如果b可以被a整除,那么最大的公约数就是b
  3. 如果a对b取余的结果不是0,而是c,则a和b的最大公约数和 b和c中间的最大公约数是相等的
  4. 利用循环直到a%b的余数是0的时候退出
a = 10
b = 15
def solve_it():
    if a < b:
        x,y = b,a
    else:
        x,y = a,b
    while y:
        x,y = y,x%y
    return x #your answer

print(solve_it())  # 答案需要输出

结果:

10. 最小公倍数

题目

给你两个正整数a和b, 输出它们的最小公倍数。
例如:a = 3, b = 5
则输出:15

解析

最小公倍数就是乘积除以最大公约数

a = 10
b = 15
def solve_it():
    # 先求最大公约数
    if a > b:
        x, y = a, b
    else:
        x, y = b, a
    while y:
        x, y = y, x % y
    res = a * b // x

    return res  # your answer


print(solve_it())  # 答案需要输出

结果:
在这里插入图片描述

11. 结尾0的个数

题目

给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数。(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大)。
例如: L=[2,8,3,50],
则输出:2

解析

  1. 注意2和5相乘的结果是10,所以乘积的末尾0的个数,其实就是求有几对2和5
  2. 先把这个数拆分成2的倍数,看看有几个2,再拆分成5的倍数,看看有几个5
  3. 最后求2的个数和5的个数的最小值即可
L = [4, 2, 25, 7777777, 100, 3, 77777777, 77777777, 77777777, 77777777]
def solve_it():
    count2 = 0
    count5 = 0
    for x in L:
        while True:
            if x % 2 == 0:
                x /= 2
                count2 += 1
            elif x % 5 == 0:
                x /= 5
                count5 += 1
            else:
                break
    return min(count2,count5)

print(solve_it())  # 答案需要输出

结果:

12. 结尾非零数的奇偶性

题目

给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0.。
例如:L=[2,8,3,50]
则输出:0

解析

  1. 先做乘积
  2. 然后就是倒序遍历,找到非零数字
  3. 判断奇偶性
L = [2,8,3,50]
def solve_it():
    product = 1
    for i in L:
        product *= i
    # 转换为字符串
    for c in str(product)[::-1]:
        if c != "0":
            if int(c) % 2 == 0:
                res = 0
            else:
                res = 1
            break
    else:
        res = 0
    return res #your answer

print(solve_it())  # 答案需要输出

结果:

13. 二进制1的个数

题目

光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节。小Py光棍几十载,光棍自有光棍的快乐。让我们勇敢地面对光棍的身份吧,现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出。
例如:a=7
则输出:3

解析

  1. bin(number, /): Return the binary representation of an integer,返回一个整数的二进制字符串形式
  2. bin(123) => ‘0b1111011’,返回一个字符串,并且是0b开头,会去除掉前面的0
a = 123456


def solve_it():
    b = bin(a)[2:]
    return b.count("1")


print(solve_it())  # 答案需要输出

结果:

14. Python之美

题目

输出Python之禅。
注意:输出python之禅的源码即可,不要转换为英文。(小小的提示:print this.s)

解析

  1. Python之禅的源码在this模块的s字符串,它里面转换成了英文并且打印了一次
  2. 如果想要输出未转换的python之禅,直接打印this.s即可
import this
def solve_it():
    return this.s

print(solve_it())  # 答案需要输出

15. 大小写转换

题目

给定一个字符串a, 将a中的大写字母 转换成小写,其它字符不变,并输出。
例如:a=“aaaaaabbbDDDDD”
则输出:aaaaaabbbddddd

解析

  1. isupper()判断是否是大写
  2. 或者是 ord(“A”) <= ord(“c”) <= ord(“Z”) 是大写
a = "aaaaaabbbDDDDD"
def solve_it():
    newA = ""
    for c in a:
        if c.isupper():
            c = c.lower()
        newA += c
    return newA  # your answer


print(solve_it())  # 答案需要输出

结果:

16. 人民币金额大写打印

题目

银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
-1000 负壹仟圆
1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆
现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.
例如:a=1
则输出:壹圆
Unicode编码可以通过如下方式获得:u’壹’。
注意:代码无需声明编码!!不要在代码头部声明文件编码,否则会导致语法错误!

解析

  1. 第一步是判断正负
  2. 然后是遍历这个数,因为一共是9位数,不超过1个亿,所以单位上有8个.
  3. 先将对应位的单位全部写上去
  4. 去除掉零千,零白,零十,然后将3个零,两个零合并成为1个,如果有零万,就改成万,零圆就改成圆
a = -11234567
def solve_it():
    '''
    pythontip oj不同于传统oj,代码里面直接使用变量,无需要提前声明,免去复杂的输入解析
    life is short, so i user python~
    you can use variables a
    '''
    digit =  [u'零',u'壹',u'贰',u'叁',u'肆',u'伍',u'陆',u'柒',u'捌',u'玖']
    units =  [u'圆',u'拾',u'佰',u'仟',u'万',u'拾',u'佰',u'仟']
    if a < 0:
        res = "负"
    else:
        res = ""
    b = str(abs(a))
    for index,c in enumerate(b):
        unit = units[len(b)-index-1]
        number = digit[int(c)]
        res += number
        res += unit
    re = [(u'零仟', u'零'), (u'零佰', u'零'), (u'零拾', u'零'), (u'零零零', u'零'), (u'零零', u'零'), (u'零万', u'万'), (u'零圆', u'圆')]
    for s1,s2 in re:
        res = res.replace(s1,s2)
    res = res if a != 0 else u"零圆"
    return res  # your answer


print(solve_it())  # 答案需要输出

结果:

17. 公约数的个数

题目

给你两个正整数a,b, 输出它们公约数的个数。
例如:a = 24, b = 36
则输出:6

解析

  1. 算出来两个数的所有的约数
  2. 求集合的交集大小
a = 24
b = 36
def solve_it():
    aSet = set()
    bSet = set()
    for i in range(1,a+1):
        if a % i == 0:
            aSet.add(i)
    for i in range(1,b+1):
        if b % i == 0:
            bSet.add(i)

    return len(aSet & bSet)  # your answer


print(solve_it())  # 答案需要输出

结果:

18. 逆解最大公约数与最小公倍数

题目

我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数。今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公约数和最小公倍数。输出这两个数,小的在前,大的在后,以空格隔开。若有多组解,输出它们之和最小的那组。注:所给数据都有解,不用考虑无解的情况。
例如:a=3, b = 60
则输出:12 15

解析

  1. 最小公倍数 b = 60,最大公约数 a = 3,可以推测 x * y = 180
  2. 所以求出来(1,60)之间所有可以被3整除的数,并且还是60的因子,两个数同时满足即是3的倍数,又是60的因子.从大到小遍历,遇到满足的就是.
a = 3
b = 60
resList = []


def solve_it():
    for i in range(b + 1, 1, -1):
        if i % 3 == 0 and b % i == 0:
            if a * b % i != 0:
                continue
            else:
                j = int(a * b / i)
                if j % 3 == 0 and b % j == 0:
                    res = min(i, j), max(i, j)
                    resList.append(res)
    resListSorted = sorted(resList, key=lambda x: sum(x))
    return " ".join([str(x) for x in resListSorted[0]])  # your answer


print(solve_it())  # 答案需要输出

结果:

19. 单身情歌

题目

抓不住爱情的我 总是眼睁睁看它溜走 …现在来练习一下发现爱的能力,给你一个字符串a,如果其中包含"LOVE"(love不区分大小写)则输出LOVE,否则输出SINGLE。
例如:a = “OurWorldIsFullOfLOVE”
则输出:LOVE

解析

  1. 直接使用 “s” in string 即可判定这个字符串中是否存在
  2. 因为忽略大小写,可以将a转换为全大写即可
a = "OurWorldIsFullOfLOVE"
def solve_it():
    aUpper = a.upper()
    if "LOVE" in aUpper:
        res = "LOVE"
    else:
        res = "SINGLE"
    return res  # your answer

print(solve_it())  # 答案需要输出

20. 信息加密

题目

给你个小写英文字符串a和一个非负数b(0<=b<26), 将a中的每个小写字符替换成字母表中比它大b的字母。这里将字母表的z和a相连,如果超过了z就回到了a。
例如a=“cagy”, b=3,
则输出 :fdjb

解析

  1. 首先是通过ord(a) + b,计算结果,如果超过了z,要看看其对z取的余数是多少
  2. 如果刚好是z,余数就是0,如果余数是1,那就是a,以此类推
  3. 所以应该是[ord(a) + b - ord(“a”)] % 26 + ord(a)
  4. 因为一共是26个字母,所以这里就根据它和a的差值,26一个循环
a="cagy"
b = 3
def solve_it():
    aNew = ""
    for c in a:
        cNew = (ord(c) + b - ord("a")) % 26 + ord("a")
        aNew += chr(cNew)
    return aNew  # your answer

print(solve_it())  # 答案需要输出

结果:

猜你喜欢

转载自blog.csdn.net/Fioman_GYM/article/details/121370696
今日推荐