第二章习题

本文提供了一系列Python编程练习题,包括列表去重、成绩等级判断、多项式求和公式打印、统计名字首字母出现次数、判断是否能构成三角形等基础算法和数据处理问题,适合初学者巩固编程基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1使用尽可能多的方法实现list去重。
方法一:利用内置函数set去重

old_list = [1,2,2,3,3,4,5]
set(old_list)

方法二:定义一个新的列表存放结果,然后遍历旧列表,如果不在新列表中,就把元素插入到新列表中

old_list = [1,2,2,3,3,4,5]
new_list = []
for i in old_list:
    if i not in new_list:
        new_list.append(i)

print(new_list)

方法三:遍历列表中的元素,如果count某个元素的个数大于1,就把该元素删除。

old_list = [1,2,2,3,3,4,5]
for i in old_list:
    if old_list.count(i) > 1:
        old_list.remove(i)

print(old_list)

方法四:利用字典的key值唯一去重

old_list = [1,2,2,3,3,4,5]
j = 1
new_list = []
d = {}
for i in old_list:
    d[i] = j

for k in d.keys():
    new_list.append(k)

print(new_list)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法五:先把list重新排序,然后从list的最后开始扫描

>>> a = [1,2,3,4,4,5]
>>> a.sort()
>>> a
[1, 2, 3, 4, 4, 5]
>>> last = a[-1]
>>> for i in range(len(a)-2,-1,-1):
...     if last == a[i]:
...         del a[i]
...     else:
...         last = a[i]
...
>>> print(a)
[1, 2, 3, 4, 5]

2.成绩等级判断:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

grade=float(input("请输入成绩:"))
if grade>=90:
    print("A")
elif grade>=60 and grade<=89:
    print("B")
else:
    print("C")

在这里插入图片描述
3.实现数学中多项式求和公式的打印
比如:a6x^6 + a5x^5 + a4x^4 + a3x^3 + a2x^2 + a1x^1 + a0

#r = a6x^6 + a5x^5 + a4x^4 + a3x^3 + a2x^2 + a1x^1 + a0
r = ""
n = 7

for i in list(range(n))[::-1]:
    if i == 0:
        r+="a0"
    else:
        r+="a"+str(i)+"x^"+str(i)+"+"        

print(r)

在这里插入图片描述
4.统计名字列表中,各名字的首字母在名字列表中出现的次数。

name=['foster','foe','lily','mickel','live','moon','ruby','cindy','miya']
d = {}
for i in name:
    if i[0] in d:
        d[i[0]]+=1
    else:
        d[i[0]]=1

print(d)
for k,v in d.items():
    print("姓名以字母 %s 开头的有 : %d人" %(k,v))

在这里插入图片描述
5.输入三个数,判断是否能构成三角形
能构成三角形三边关系:
三边都大于零
两边之和大于第三边,两边之差小于第三边

def check_triangle(a,b,c):
    if not (a and b and c):
        return False 
    flag = a + b > c and a + c > b and b + c > a 
    if not flag:
        return False 
    return True 

    
print(check_triangle(3, 4, 5))
print(check_triangle(1, 2, 3))
print(check_triangle(3, 6, 9))
print(check_triangle(2, 8, 5))

在这里插入图片描述
6.实现字典的fromkeys方法
例如:
seq = (‘name’, ‘age’, ‘sex’)
dict = dict.fromkeys(seq, 10)
print “New Dictionary : %s” % str(dict)
结果:New Dictionary : {‘age’: 10, ‘name’: 10, ‘sex’: 10}

>>> def myfromkeys(seq,value):
...     seq_dict = {}
...     for i in seq:
...         seq_dict[i] = value
...     return seq_dict
...
>>> print(myfromkeys(('name', 'age', 'sex'),10))
{'name': 10, 'age': 10, 'sex': 10}

7.键盘读入一字符串,逆序输出

>>> s = input("请输入字符串:")
请输入字符串:I am a good boy!
>>> for i in s[::-1]:
...     print(i,end=" ")
...
! y o b   d o o g   a   m a   I >>>

8.读入一个整数n,输出n的阶乘

>>> n = int(input("please input a integer:"))
please input a integer:5
>>> result = 1
>>> for i in range(2,n+1):
...     if i == 2:
...         result *=2
...     else:
...         result*=i
...
>>> print(result)
120

9.打印1/2, 1/3, 1/4,….1/10

>>> for i in range(2,11):
...     if i==10:
...         print("1/%s" % i)
...     else:
...         print("1/%s" % i,end=",")
...
1/2,1/3,1/4,1/5,1/6,1/7,1/8,1/9,1/10

10.输入数字a,n,如a,4,则打印a+aa+aaa+aaaa之和

>>> def sum(a,n):
...     result = 1
...     for i in range(n):
...         if i == n-1:
...             result*=a
...         else:
...             result=result*a+1
...
...     return result
...
>>> print(sum(3,4))
120
times = input("please input the times:")
digit = input("please input the digit:")
result = 0
for i in range(1,int(times)+1):
    result += int(digit*i)

print(result)

在这里插入图片描述

times = input("please input the times:")
digit = input("please input the digit:")
temp_value = int(digit)
sum = int(digit)
for i in range(int(times)-1):
    sum = temp_value*10+int(digit)+sum
    temp_value = temp_value*10 + int(digit)

print(sum)

在这里插入图片描述
11.求100个随机数之和,随机数要求为0—9的整数

>>> import random
>>> sum = 0
>>> for i in range(100):
...     random_num = random.randint(0,9)
...     sum+=random_num
...
>>> print(sum)
409

13.要求在屏幕上分别显求1到100之间奇数之和与偶数之和

>>> odd_num_sum = 0
>>> even_num_sum = 0
>>> for i in range(1,101,2):
...     print(i,end=" ")
...     odd_num_sum+=i
...
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 5
7 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 >>> for j in ra
nge(2,101,2):
...     print(j,end=",")
...     even_num_sum+=j
...
2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,
58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,>>> print(odd
_num_sum)
2500
>>> print(even_num_sum)
2550

14.输入10个数,并显示最大的数与最小的数

>>> a = []
>>> for i in range(10):
...     a.append(float(input("请输入一个数字:")))
...
请输入一个数字:4
请输入一个数字:2.4
请输入一个数字:9.8
请输入一个数字:2.3
请输入一个数字:1.9
请输入一个数字:3.45
请输入一个数字:6.42
请输入一个数字:0.56
请输入一个数字:6
请输入一个数字:7.98
>>> print(max(a),min(a))
9.8 0.56
l = list(range(10))
def func(l):
    max_item = l[0]
    min_item = l[0]
    for val in l:
        if val > max_item:
            max_item = val
        elif val < min_item:
            min_item = val
    return max_item,min_item
max_number,min_number = func(l)
print("最大数: ",max_number)
print("最小数: ",min_number)

在这里插入图片描述
15.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出
各位数字。

>>> num = input("请输入一个不多于5位的整数:")
请输入一个不多于5位的整数:86324
>>> print(len(num))
5
>>> print(num[::-1])
42368

16.求1000以内的所有水仙花数(水仙花数:它的每个位上的数字的 n 次幂
之和等于它本身,例如:1^3 + 5^3+ 3^3 = 153)

>>> num_list = []
>>> for num in range(1,1000):
...     n = len(str(num))
...     if n == 2:
...         if int(str(num)[0])**2 + int(str(num)[1])**2 == num:
...             num_list.append(num)
...     elif n == 3:
...         if int(str(num)[0])**3 + int(str(num)[1])**3 +int(str(num)[2])**3 ==
 num:
...             num_list.append(num)
...
>>> print(num_list)
[153, 370, 371, 407]

17.编程求s=1!+2!+3!+……+n!

>>> def factorial_sum(n):
...     r = 1
...     s = 0
...     for i in range(1,n+1):
...         r*=i
...         s+=r
...     return s
...
>>>
>>> print(factorial_sum(3))
9

18.钞票换硬币 把一元钞票换成一分、二分、五分硬币(每种至少一枚),有多种换法,分 别有哪些?

remain = 100-1-2-5
result = []
count = 0
for i in range(int(remain/1)):
    for j in range(int(remain/2)):
        for k in range(int(remain/5)):
            if (i + 2*j + 5*k) == remain:
                count += 1
                result.append((i,j,k))

print(count)
print(result)

在这里插入图片描述
19.自己实现在一句话中查找某个单词的算法,存在返回索引号,否则返回False

>>> s = "you are a beautiful girl good"
>>>
>>> def find_word(s,tar_word):
...     length = len(tar_word)
...     for i in range(len(s)):
...         if s[i:i+length] == tar_word:
...             return i
...     return False
...
>>> print(find_word(s,"girl"))
20

20.读入一个十进制整数,实现十进制转二进制算法将其转成二进制数 要求:不能使用现成进制转换函数,自己写代码实现

def dec_to_bin(num):
    
    remainder_list = []

    while True:
        temp = num%2
        num = num//2
        remainder_list.append(str(temp))
        if num == 0:
            break
    return remainder_list[::-1] 

print("".join(dec_to_bin(345)))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值