Python 基础练习题(三)

简介: Python 基础练习题

实例040:两数之和

题目:给定一个整数列表 nums和一个整数目标值 target,请你在该列表中找出和为目标值target的那两个整数,并返回它们的数组下标。

例如输入:nums = [2,7,8], target = 9 输出:[0,1]  nums = [3,3,8], target = 6 输出:[0,1]

def twoSum(nums, target):
    for x in range(len(nums)):
        for y in range(x + 1, len(nums)):
            if nums[x] + nums[y] == target:
                print([x, y])
twoSum([2, 7, 8], 9)
twoSum([1, 4, 3, 3, 2, 5], 6)

实例041:分发糖果

题目:有一个糖果盒子里有若干块糖果,

每人2块分余1块,每人3块刚好分完,

每人4块分余1块,每人5块分余1块,

每人6块分余3块,每人7块刚好分完,

每人8块分余1块,每人9块刚好分完。

请问盒子里最少有多少块糖果?


a =

0
while True:
    if a % 2 == 1 and a % 3 == 0 and a % 4 == 1 and a % 5 == 1 and a % 6 == 3 and a % 7 == 0 and a % 8 == 1 and a % 9 == 0:
        break
    a += 1
print(a)
'''
是不是有很多小伙伴会按上面方法每个列出来求。细心的小伙伴会发现 2、4、8 余1,3 和 9余0,
也就是 2 和 3 的 n 次方得到余数都是一样的,又发现题目中 5 和 7 的余数也分别为 1 和 0,
那么 5 和 8、7 和 9 最小公倍数的余数也应该是 1 和 0,那么代码是不是就可以简写为
'''
while True:
    if a % 6 == 3 and a % 40 == 1 and a % 63 == 0:
        break
    a += 1
print(a)

实例042:增长武力

题目:路飞的初始武力值为1,

如果勤于练功,每天武力值相比前一天增长1%,

如果疏于练功,每天武力值相比前一天减少1%,

一年练功计划,前5天每天练功,然后休息2天,

接下来再练5天休2天如此往复,

请你计算一年后路飞的武力值是多少?

(一年按365天计算,结果保留两位小数)

a = 1
for i in range(1, 366):
    if i % 6 == 0 or i % 7 == 0:
        a = a - a * 0.01
    else:
        a = a + a * 0.01
print('一年后路飞的武力值是:{}'.format(round(a, 2)))

实例043:冠军次数

题目:请你根据NBA冠军球队信息表,找出获得3次及3次以上的球队并打印球队名和冠军次数。


champion = {

   '1947': '勇士队', '1948': '子弹队', '1949': '湖人队', '1950': '湖人队', '1951': '皇家队', '1952': '湖人队', '1953': '湖人队',

   '1954': '湖人队', '1955': '民族队', '1956': '勇士队', '1957': '凯尔特人队', '1958': '鹰队', '1959': '凯尔特人队',

   '1960': '凯尔特人队', '1961': '凯尔特人队', '1962': '凯尔特人队', '1963': '凯尔特人队', '1964': '凯尔特人队', '1965': '凯尔特人队',

   '1966': '凯尔特人队', '1967': '76人队', '1968': '凯尔特人队', '1969': '凯尔特人队', '1970': '尼克斯队', '1971': '雄鹿队',

   '1972': '湖人队', '1973': '尼克斯队', '1974': '凯尔特人队', '1975': '勇士队', '1976': '凯尔特人队', '1977': '开拓者队',

   '1978': '子弹队', '1979': '超音速队', '1980': '湖人队', '1981': '凯尔特人队', '1982': '湖人队', '1983': '76人队',

   '1984': '凯尔特人队', '1985': '湖人队', '1986': '凯尔特人队', '1987': '湖人队', '1988': '湖人队', '1989': '活塞队', '1990': '活塞队',

   '1991': '公牛队', '1992': '公牛队', '1993': '公牛队', '1994': '火箭队', '1995': '火箭队', '1996': '公牛队', '1997': '公牛队',

   '1998': '公牛队', '1999': '马刺队', '2000': '湖人队', '2001': '湖人队', '2002': '湖人队', '2003': '马刺队', '2004': '活塞队',

   '2005': '马刺队', '2006': '热火队', '2007': '马刺队', '2008': '凯尔特人队', '2009': '湖人队', '2010': '湖人队', '2011': '小牛队',

   '2012': '热火队', '2013': '热火队', '2014': '马刺队', '2015': '勇士队', '2016': '骑士队', '2017': '勇士队', '2018': '勇士队',

   '2019': '猛龙队', '2020': '湖人队'

}

champion = {
    '1947': '勇士队', '1948': '子弹队', '1949': '湖人队', '1950': '湖人队', '1951': '皇家队', '1952': '湖人队', '1953': '湖人队',
    '1954': '湖人队', '1955': '民族队', '1956': '勇士队', '1957': '凯尔特人队', '1958': '鹰队', '1959': '凯尔特人队',
    '1960': '凯尔特人队', '1961': '凯尔特人队', '1962': '凯尔特人队', '1963': '凯尔特人队', '1964': '凯尔特人队', '1965': '凯尔特人队',
    '1966': '凯尔特人队', '1967': '76人队', '1968': '凯尔特人队', '1969': '凯尔特人队', '1970': '尼克斯队', '1971': '雄鹿队',
    '1972': '湖人队', '1973': '尼克斯队', '1974': '凯尔特人队', '1975': '勇士队', '1976': '凯尔特人队', '1977': '开拓者队',
    '1978': '子弹队', '1979': '超音速队', '1980': '湖人队', '1981': '凯尔特人队', '1982': '湖人队', '1983': '76人队',
    '1984': '凯尔特人队', '1985': '湖人队', '1986': '凯尔特人队', '1987': '湖人队', '1988': '湖人队', '1989': '活塞队', '1990': '活塞队',
    '1991': '公牛队', '1992': '公牛队', '1993': '公牛队', '1994': '火箭队', '1995': '火箭队', '1996': '公牛队', '1997': '公牛队',
    '1998': '公牛队', '1999': '马刺队', '2000': '湖人队', '2001': '湖人队', '2002': '湖人队', '2003': '马刺队', '2004': '活塞队',
    '2005': '马刺队', '2006': '热火队', '2007': '马刺队', '2008': '凯尔特人队', '2009': '湖人队', '2010': '湖人队', '2011': '小牛队',
    '2012': '热火队', '2013': '热火队', '2014': '马刺队', '2015': '勇士队', '2016': '骑士队', '2017': '勇士队', '2018': '勇士队',
    '2019': '猛龙队', '2020': '湖人队'
}
champion_count = {}
for i in champion:
    if champion[i] in champion_count:
        champion_count[champion[i]]+=1
    else:
        champion_count[champion[i]] = 1
for x in champion_count:
    if champion_count[x]>=3:
        print('{}队获得{}个总冠军'.format(x,champion_count[x]))

实例044:合并信息

题目:有ls1和ls2两个列表,请你将ls2列表内成绩加入到ls1每个人的信息表里。

ls1 = [
  {'name': '康康', 'student_id': 'sd0001', 'age': 20},
  {'name': '小新', 'student_id': 'sd0002', 'age': 21},
  {'name': '大熊', 'student_id': 'sd0003', 'age': 19},
  {'name': '妮妮', 'student_id': 'sd0004', 'age': 20}
  ]
ls2 = [
  {'student_id': 'sd0003', 'math': 97},
  {'student_id': 'sd0001', 'math': 95},
  {'student_id': 'sd0004', 'math': 90},
  {'student_id': 'sd0002', 'math': 86}
  ]
ls1 = [
  {'name': '康康', 'student_id': 'sd0001', 'age': 20},
  {'name': '小新', 'student_id': 'sd0002', 'age': 21},
  {'name': '大熊', 'student_id': 'sd0003', 'age': 19},
  {'name': '妮妮', 'student_id': 'sd0004', 'age': 20}
  ]
ls2 = [
  {'student_id': 'sd0003', 'math': 97},
  {'student_id': 'sd0001', 'math': 95},
  {'student_id': 'sd0004', 'math': 90},
  {'student_id': 'sd0002', 'math': 86}
  ]
for x in ls1:
   for y in ls2:
       if  x['student_id']==y['student_id']:
           x['math']=y['math']
print(ls1)

实例045:字母游戏

题目:请你根据输入词汇中的字母得出总分数。各个字母分数如下:

1 分:A, E, I, L, N, O, R, S, T, U

2 分:D, G

3 分:B, C, M, P

4 分:F, H, V, W, Y

5 分:K

8 分:J, X

10 分:Q, Z

大小写字母得分相同。比如,如果参加者举出单词 apple,那就得到 1 + 3 + 3 + 1 + 1 = 9 分。

你能写一个程序,计算单词的分数吗?

要求:

提示参加者手动输入 10 个字母以内的单词;

如果单词超过 10 个字母,就打印“单词太长了!”

如果输入的字符中有非字母,则计 0 分,比如 x-box 中的连字符记 0 分。

计算单词的得分,并打印“你的得分是XX分!

dict1 = {
    'AEILNORSTU': 1,
    'DG': 2,
    'BCMP': 3,
    'FHVWY': 4,
    'K': 5,
    'JX': 8,
    'QZ': 10
}
dict_sum = 0
name = input('请您输入一个10个字母以内的单词:')
if len(name) > 10:
    print('单词太长了!')
else:
    for x in name:
        for y in dict1:
            if x.upper() in y:
                dict_sum += dict1[y]
            else:
                dict_sum += 0
    print('你的得分是{}分'.format(dict_sum))

实例046:制作门牌

题目:雯雯要为一条街的住户制作门牌号。

这条街一共有 2021 位住户,门牌号从 1 到 2021 编号。

雯雯制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字

符粘贴到门牌上,例如门牌 1018 需要依次粘贴字符 1、0、1、8,即需要 1 个

字符 0,2 个字符 1,1 个字符 8。

请问要制作所有的 1 到 2021 号门牌,总共需要多少个字符 2?

num = 0
for i in range(1, 2022):
    x = str(i).count('2')
    num += x
print('制作2021个门牌号共需要{}个字符2'.format(num))
实例047:反转句子
题目:请你将下面两句话反转输出打印。例如'Hello Python' 打印输出'Python Hello '。
str1 = 'Hello Python'
str2 = 'It is a happy day'
str1 = 'Hello Python'
str2 = 'It is a happy day'
def sentence_reverse(x):
    a = x.split(' ')
    a.reverse()
    b = ' '.join(a)
    print(b)
sentence_reverse(str1)
sentence_reverse(str2)
实例048:恢复字母
题目:请你将下面打乱的26个英文字母按顺序排序,并返回他的小写字母。
例如:Aa Bb Cc
letters = 'SMQLTRBZVHPOJIFWDCEYXGNUKA'
letters = 'SMQLTRBZVHPOJIFWDCEYXGNUKA'
ls = []
for i in letters:
    ls.append(i+i.lower())
ls.sort()
print(ls)
实例049:反转数字
题目:定义一个函数输入一个数字,返回这个数字的反转数。例如:123返回321 -123返回-321。
def reverse(x):
    x = str(x)
    if x[0] == '-':
        y = int('-' + x[1:][::-1])
    else:
        y = int(x[::-1])
    return y
print(reverse(123))
print(reverse(-123))

实例050:进制转换

题目:请你不利用进制函数完成10进制转2进制、8进制、16进制。

10进制转2进制
num = 123
bi = ''
while True:
    if num == 0:
        break
    else:
        num, rem = num // 2, num % 2
        bi = bi + str(rem)
bi = bi[::-1]
print('0b' + bi)
10进制转8进制
num = 123
oc = ''
while True:
    if num == 0:
        break
    else:
        num, rem = num // 8, num % 8
        oc = oc + str(rem)
oc = oc[::-1]
print('0o' + oc)
10进制转16进制
num = 123
he = ''
dic = {'10': 'a', '11': 'b', '12': 'c', '13': 'd', '14': 'e', '15': 'f'}
while True:
    if num == 0:
        break
    else:
        num, rem = num // 16, num % 16
        if str(rem) in dic:
            he = he + dic[str(rem)]
        else:
            he = he + str(rem)
he = he[::-1]
print('0x' + he)
实例051:公约公倍
题目:请你输入两个整数,求这两个数字的最大公约数和最小公倍数。
number1 = int(input('请您第一个整数::'))
number2 = int(input('请您第二个整数::'))
number = [number1, number2]
number.sort()
convention = []
for x in range(1, number[0] + 1):
    if number1 % x == 0 and number2 % x == 0:
        convention.append(x)
print('数字{}和{}最大公约数是:{}。'.format(number1, number2, convention[-1]))
common_multiple = []
if number[1] % number[0] == 0:
    common_multiple.append(number[1])
else:
    for x in range(1, number1 + 1):
        for y in range(1, number2 + 1):
            if number1 * x == number2 * y:
                common_multiple.append(number1 * x)
if common_multiple:
    print('数字{}和{}最小公倍数数:{}。'.format(number1, number2, common_multiple[0]))
else:
    print('数字{}和{}最小公倍数数:{}。'.format(number1, number2, number1 * number2))

实例052:分解质因

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

n = int(input('请您输入一个正整数:'))
number = n
prime_number = []
prime_factor = []
for x in range(2, number + 1):
    for y in range(2, x):
        if x % y == 0:
            break
    else:
        prime_number.append(x)
while True:
    for z in range(2, int(number) + 1):
        if number % z == 0 and z in prime_number:
            prime_factor.append(z)
            number = number / z
    if number == 1:
        break
prime_factor.sort()
c = [str(i) for i in prime_factor]
print('{} = {}'.format(n, ' * '.join(c)))

实例053:寻找完数

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。

例如6=1+2+3.编程找出1000以内的所有完数。

number = int(input('请您输入一个正整数范围:'))
for x in range(1, number):
    prime_factor = []
    for y in range(1, x):
        if x % y == 0:
            prime_factor.append(y)
    if sum(prime_factor) == x:
        print('{} = {}'.format(x, ' + '.join([str(i) for i in prime_factor])))

实例054:阶乘求和

题目:求1+2!+3!+...+20!的和。

number = int(input('请您输入阶乘项数:'))
factorial = []
for x in range(1, number + 1):
    a = 1
    for y in range(1, x + 1):
        a *= y
    factorial.append(a)
print('前{}项阶乘和是:{}'.format(number, sum(factorial)))

实例055:名片管理

题目:请你编写一个名片管理系统,要求具备增加人员,删除人员,修改人员,查询人员,系统退出五个功能。

mpglq = {
    '闻闻': [18, 12300000001],
    '雯雯': [21, 12300000002]
}
while True:
    mp = input('请您选择操作内容(1.添加名片 2.删除名片 3.修改名片 4.查询名片 5.退出系统):')
    if mp == '1':
        name = input('请您输入姓名:')
        age = input('请您输入年龄:')
        tel = input('请您输入电话:')
        mpglq[name] = [age, tel]
    elif mp == '2':
        name = input('请您选择要删除人员姓名:')
        mpglq.pop(name)
    elif mp == '3':
        xx = input('请您选择需要修改的信息(1.姓名 2.年龄 3.电话):')
        if xx == '1':
            name = input('请您输入需要修改人员姓名:')
            new_name = input('请您输入修改人员新的姓名:')
            mpglq[new_name] = mpglq[name]
            mpglq.pop(name)
        elif xx == '2':
            name = input('请您输入需要修改人员姓名:')
            new_age = input('请您输入修改人员新的年龄:')
            mpglq[name][0] = new_age
        elif xx == '3':
            name = input('请您输入需要修改人员姓名:')
            new_tel = input('请您输入修改人员新的电话:')
            mpglq[name][1] = new_tel
    elif mp == '4':
        name = input('请您输入需要查询人员姓名:')
        nr = input('请您输入查询人员内容(1.年龄 2.电话 3.年龄和电话):')
        if nr == '1':
            print('{}的年龄是{}'.format(name, mpglq[name][0]))
        elif nr == '2':
            print('{}的电话是{}'.format(name, mpglq[name][1]))
        elif nr == '3':
            print('{}的年龄是{}、电话是{}'.format(name, mpglq[name][0], mpglq[name][1]))
    elif mp == '5':
        break
print(mpglq)


相关文章
|
6月前
|
存储 Python
Python经典练习题(四)
Python经典练习题(四)
Python经典练习题(四)
|
6月前
|
存储 Web App开发 开发者
Python 自动化指南(繁琐工作自动化)第二版:附录 C:练习题的答案
Python 自动化指南(繁琐工作自动化)第二版:附录 C:练习题的答案
67 0
|
存储 Python
Python经典练习题(三)
Python经典练习题(三)
|
5月前
|
Python
python练习题
python练习题
|
6月前
|
存储 索引 Python
【python】——组合数据类型(单选练习题)
【python】——组合数据类型(单选练习题)
|
6月前
|
算法 Python
python文件读取操作练习题(统计单词)
python文件读取操作练习题(统计单词)
118 0
|
Python
Python|PTA练习题
Python|PTA练习题
130 0