《python程序设计》

*## python刷题

题目:第5章-7 列表去重 (40 分)

输入一个列表,去掉列表中重复的数字,按原来次序输出!

输入格式:
在一行中输入列表

输出格式:
在一行中输出不重复列表元素

输入样例:
在这里给出一组输入。例如:

[4,7,5,6,8,6,9,5]

输出样例:
在这里给出相应的输出。例如:

4 7 5 6 8 9

一、代码

n = eval(input())
print(*sorted(set(n),key=n.index))

二、心得

1.**eval(input)**函数用来执行一个字符串表达式,并返回表达式的值。
如:

n=81
eval("n + 4")
85

2.sorted() 函数对所有可迭代的对象进行排序操作。
如:

a = [5,7,6,3,4,1,2]
b = sorted(a)       # 保留原列表
 
>>> a 
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]

题目:第5章-8 能被3,5和7整除的数的个数(用集合实现) (30 分)

求指定区间内能被3,5和7整除的数的个数

输入格式:
在一行中从键盘输入2个正整数a,b(1<=a<b<=10000000),用空格隔开。

输出格式:
在一行输出大于等于a且小于等于b的能被3,5和7整除的数的个数。

输入样例1:
在这里给出一组输入。例如:

10 100

输出样例1:
在这里给出相应的输出。例如:

0

输入样例2:
在这里给出一组输入。例如:

1000 100000

输出样例:
在这里给出相应的输出。例如:

943

一、代码

a,b=map(int,input().split())
count=0
for i in range(a,b+1):
    if i%3==0 and i%5==0 and i%7==0:
        count+=1
print(count)

二、心得

好像不用集合也能过,hhhh~
集合的话可以参考别人的代码,如下

m, n = input().split()
m, n = int(m), int(n)
set3 = set()
set5 = set()
set7 = set()
res_set = set()
for i in range(m, n + 1):
    if (i % 3 == 0):
        set3.add(i)
    if (i % 5 == 0):
        set5.add(i)
    if (i % 7 == 0):
        set7.add(i)
res_set = set3 & set5 & set7
print(len(res_set))

题目:第5章-9 求矩阵鞍点的个数 (30 分)

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式: 输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式: 鞍点的个数

输入样例1:

4

1 7 4 1

4 8 3 6

1 6 1 2

0 7 8 9

输出样例1:

1

输入样例2:

2
1 7

4 1

输出样例2:

0

输入样例3:

3

4 7 8

1 3 3

2 3 1

输出样例3:

2

一、代码

n = int(input())
list1 = []
sum = 0
for i in range(n):
    s=input()
    list1.append([i for i in s.split()])
print(list1)
for i in range(n):
    for j in range(n):
        if list1[i][j]==max(list1[i]):
            for k in range(n):
                if list1[i][j]>list1[k][j]:
                    break
            else:
                sum+=1
print(sum)

二、心得

1.list1.append函数是列表元素的插入
2. s.split()****函数通过指定分隔符对字符串进行切片
3. max(list1[i])****函数是列表自带的求最大值的函数

题目:第5章-10 两数之和 (30 分)

给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 “no answer”。输出的下标按从小到大排序。用一重循环加字典实现。

输入格式:
在一行中给出这组数。 在下一行输入目标数

输出格式:
在一行中输出这两个数的下标,用一个空格分开。

输入样例1:
在这里给出一组输入。例如:

2,7,11,15

9

输出样例1:
在这里给出相应的输出。例如:

0 1

输入样例2:
在这里给出一组输入。例如:

3,6,9

10

输出样例2:
在这里给出相应的输出。例如:

no answer

一、代码

l=list(map(int,input().split(',')))
num=int(input())
d={}
for i in l:
    d[i]=num-i
# print(d.items())
for key,value in d.items(): 
    if key in l and value in l:
        print(l.index(key),l.index(value))
        break
else:
    print('no answer')

二、心得

  1. items() 函数以列表返回可遍历的(键, 值) 元组数组。
    如:
d = {'one': 1, 'two': 2, 'three': 3}
for key,value in d.items():#当两个参数时
    print(key + ':' + str(value))

输出:

one:1
two:2
three:3

题目:第5章-11 字典合并 (40 分)

输入用字符串表示两个字典,输出合并后的字典。字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!

输入格式:
在第一行中输入第一个字典字符串;

在第二行中输入第二个字典字符串。

输出格式:
在一行中输出合并的字典,输出按字典序。

“1” 的 ASCII 码为 49,大于 1,排序时 1 在前,“1” 在后。其它的字符同理。

输入样例1:
在这里给出一组输入。例如:

{1:3,2:5}

{1:5,3:7}

输出样例1:
在这里给出相应的输出。例如:

{1:8,2:5,3:7}

输入样例2:
在这里给出一组输入。例如:

{“1”:3,1:4}

{“a”:5,“1”:6}

输出样例2:
在这里给出相应的输出。例如:

{1:4,“1”:9,“a”:5}

一、代码

a, b = eval(input()), eval(input())
c = [i for i in a.keys() if i in b.keys()]

for i in c:
    b[i] = a[i] + b[i]

a.update(b) # 将b的键/值拷贝到a中

c = str(dict(sorted(a.items(), key=lambda x: x[0] if type(x[0]) == int else ord(x[0]))))
c = c.replace(' ', '')
c = c.replace("'", '"')
print(c)

二、心得

1.sorted() 函数对所有可迭代的对象进行排序操作。
2.a.update(b) 将b的键/值拷贝到a中。
3.rod()函数以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值。
4.replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串)
5.items() 函数以列表返回可遍历的(键, 值) 元组数组。

题目:第6章-1 输入列表,求列表元素和(eval输入应用) (10 分)

在一行中输入列表,输出列表元素的和。

输入格式:
一行中输入列表。

输出格式:
在一行中输出列表元素的和。

输入样例:

[3,8,-5]

输出样例:

6

一、代码

print(sum(eval(input())))

二、心得

  1. **eval()**函数使用需要熟悉掌握。
    列表自带求和函数 sum函数

题目:第6章-2 一帮一 (15 分)

“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:
输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例:

8

0 Amy

1 Tom

1 Bill

0 Cindy

0 Maya

1 John

1 Jack

0 Linda

输出样例:

Amy Jack

Tom Linda

Bill Maya

Cindy John

一、代码

N=int(input())
man=[]
woman=[]
stu=[]
for i in range(N):
    temp=input().split()
    stu.append(temp[1])
    if temp[0]=='1':
        man.append(temp[1])  # 男生都存在man列表里
    if temp[0]=='0':
        woman.append(temp[1])# 女生都存在woman列表里
for j in range(len(man)):
    if stu[j] in man:
        print("{} {}".format(stu[j],woman[-1]))
        del woman[-1] # 不断去掉最后一个
    elif stu[j] in woman:
        print("{} {}".format(stu[j],man[-1]))
        del man[-1]

二、心得

  1. append() 函数是列表的插入。
  2. lst[-1] : 表示最后的元素
  3. det lst[n] : 删除n位置的元素

题目:第6章-3 列表或元组的数字元素求和 (20 分)

求列表中数字和,列表中嵌套层次不限2层

输入格式:
在一行中输入列表或元组

输出格式:
在一行中输出数字的和

输入样例:
在这里给出一组输入。例如:

[11,2,[3,7],(68,-1),“123”,9]

输出样例:
在这里给出相应的输出。例如:

99

一、代码

lst = input()
# print(type(lst)) str类型
s = 0
# 去括号
lst = lst.replace('[','')
lst = lst.replace(']','')
lst = lst.replace('(','')
lst = lst.replace(')','')
lst = eval("[" + lst + "]")

for i in lst:
    if type(i) != str:
        s += int(i)
print(s)

二、心得

  1. lst = lst.replace(’[’,’’) 是str自带的替换字符函数,将字符 ‘[’ 全部替换为 ‘,’

题目:第6章-4 列表数字元素加权和(1) (40 分)

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。第一层每个元素 的值为:元素值1,第二层每个元素的值为:元素值2,第三层每个元素的值为:元素值*3, …,以此类推!

输入格式:
在一行中输入列表

输出格式:
在一行中输出加权和

输入样例:
在这里给出一组输入。例如:

[1,2,[3,4,[5,6],7],8]

输出样例:
在这里给出相应的输出。例如:

72

一、代码

def Right(l,n):
    total = 0
    if type(l) == type(1):
      return n*l
    else:
        for i in l:
            total = total + Right(i,n+1)
        return total
l = eval(input())
print(Right(l,0))

二、心得

1.通过递归实现不断遍历

题目:第6章-5 列表元素个数的加权和(1) (40 分)

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权个数和。第一层每个元素算一个元素,第二层每个元素算2个元素,第三层每个元素算3个元素,第四层每个元素算4个元素,…,以此类推!

输入格式:
在一行中输入一个列表。

输出格式:
在一行中输出加权元素个数值。

输入样例:
在这里给出一组输入。例如:

[1,2,[3,4,[5,6],7],8]

输出样例:
在这里给出相应的输出。例如:

15

一、代码

def Right(l,n):
    total = 0
    if type(l) == type(1):
      return n
    else:
        for i in l:
            total = total + Right(i,n+1)
        return total
l = eval(input())
print(Right(l,0))

二、心得

1.递归实现

题目:第6章-6 求指定层的元素个数 (40 分)

输入一个嵌套列表,再输入层数,求该层的数字元素个数。

输入格式:
第一行输入列表 第二行输入层数

输出格式:
在一行中输出元素个数

输入样例:
在这里给出一组输入。例如:

[1,2,[3,4,[5,6],7],8]

3

输出样例:
在这里给出相应的输出。例如:

2

一、代码

a = input()
c = int(input())
num= 0
sum=0
for i in range(0,len(a)):
    if(a[i]=='['):
        num+=1
    elif(a[i]==']'):
        num-=1
    if (c == num) and (a[i]!='[') and (a[i]!=']' and a[i]!=',' and a[i+1].isdigit()==False):
        sum += 1
print(sum)

二、心得

1, if (c == num) 判断是否到要求的层次
and (a[i]!=’[’) and (a[i]!=’]’ and a[i]!=’,’ 判断是否不为数字
and a[i+1].isdigit()==False) 因为a为字符串类型,这个是判断数字是否存在连续现象

题目:第6章-7 找出总分最高的学生 (15 分)

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。

输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。

输出格式:
在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。

输入样例:

5

00001 huanglan 78 83 75

00002 wanghai 76 80 77

00003 shenqiang 87 83 76

10001 zhangfeng 92 88 78

21987 zhangmeng 80 82 75

输出样例:

zhangfeng 10001 258

一、代码

n = int(input())
s = [input().split() for i in range(n)]
# print(type(s))
maxSum = [int(s[i][2]) + int(s[i][3]) + int(s[i][4]) for i in range(n)]
big = maxSum.index(max(maxSum)) # 找到maxSum列表中最大的成绩的下标
print(s[big][1],s[big][0],maxSum[big])

二、心得

熟悉列表的内置函数

  1. max(列表1) 找最大元素
  2. 列表1.index(a) 找到列表1中的a元素对应的下标

题目:第6章-8 输出全排列 (20 分)

输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。

输入格式:
一行输入正整数n。

输出格式:
按字典序输出1到n的全排列。每种排列占一行,数字间无空格。

输入样例:
在这里给出一组输入。例如:

3

输出样例:
在这里给出相应的输出。例如:

123

132

213

231

312

321

一、代码

import random
import math
n = int(input())
t = []
s = set()
for i in range(1, n + 1):
    t.append(str(i))
all=math.factorial(n) # n个数字有n!种排列
while len(s) < all:
    random.shuffle(t)  # 每次都打乱
    s.add("".join(t))  # 拼成字符串,加到s容器
s = sorted(s)  # 按照字典序排列
# print(type(s))
for i in s:
    print(i)

二、心得

1.set 容器可以自动除去相同元素
2. sorted() 函数可以对元素进行排序
如:

s=set()
n=input().split()
for i in n:
    s.add(i)
print(s)
s=[int(i) for i in s]
print(*sorted(s)) # '*' 可以去掉 '['  ']'  ','

输出:

4 1 3 6 21 2 4 1
{'21', '6', '1', '4', '2', '3'}
1 2 3 4 6 21
  1. **math.factorial(n)**函数是求n的阶乘
  2. **random.shuffle(t)**函数将序列的所有元素随机排序。
    如:
list=[2,5,1,7,3]
for i in range(3):
    random.shuffle(list)
    print(list)

输出:

[1, 5, 3, 7, 2]
[7, 5, 2, 1, 3]
[5, 1, 7, 2, 3]

题目:第7章-1 词频统计 (30 分)

请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。

所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。

输入格式:
输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。

输出格式:
在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。

随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。

输入样例:

This is a test.

The word “this” is the word with the highest frequency.

Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee. But this_8 is different than this, and this,and this…# this line should be ignored.

输出样例:(注意:虽然单词the也出现了4次,但因为我们只要输出前10%(即23个单词中的前2个)单词,而按照字母序,the排第3位,所以不输出。)

23

5:this

4:is

一、代码

# 导入库
import re
import collections
import sys

words = "".join([line for line in sys.stdin]) # 标准输入sys.stdin读入文本
words = re.compile(r"\w+", re.I).findall(words.lower().split('#')[0]) # 正则表达式将文本处理成全小写并读到符号#
words = [each.strip() for each in words] # 去除空格
words = list(map(lambda each: each[0:15] if len(each) > 15 else each, words)) # 长度超过15的单词将只截取保留前15个单词字符
counter = collections.Counter(words) # 使用Counter统计词频
rank = sorted(counter.items(), key=lambda each: (-each[1], each[0]), reverse=False) # 按照词频递减排序
print(len(rank)) # 输出不同单词的个数
for each in rank[0:int(0.1*len(rank))]: # 输出词频最大的前10%的单词
    print("{}:{}".format(each[1], each[0]))

二、心得

有点困难,先暂时参考…

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值