Python(第十四周)

1. 黑洞数 (10 分)

本题要求实现一个函数,判断某整数是否是黑洞数,如果是,返回True,否则返回False。黑洞数指的是,若某整数各个位上的数字组成的最大数减去各个位上数字组成的最小数等于该数本身,则称该数为黑洞数。比如495=954-459。

函数接口定义:

def isHd(n)

其中参数n是任意整数。

裁判测试程序样例:

/* 请在这里填写答案 */
n = int(input())
if isHd(n):
    print("yes")
else:
    print("no")

输入样例:
495
结尾无空行
输出样例:
yes
结尾无空行

输入样例:
1563
结尾无空行
输出样例:
no
结尾无空行

def isHd(n):
    n = list(map(str, str(n)))
    n1 = sorted(n, reverse=True)
    n2 = sorted(n, reverse=False)
    n = ''.join(n)
    n1 = ''.join(n1)
    n2 = ''.join(n2)

    if int(n1) - int(n2) == int(n):
        return 1
    else:
        return 0

2.成绩绩点计算 (10 分)

假设某大学的成绩绩点计算规则为:90分(含)以上计4.5分,80分(含)-90分(不含)计3分,70分(含)-80分(不含)计1.5分,60分(含)-70分(不含)计1分,60分以下不计分。输入某位同学的各门课成绩,请编写一个函数,打印该同学的平均绩点(保留2位小数)。

函数接口定义:

函数接口描述:
GPA(参数...)

裁判测试程序样例:

lst=list(map(eval,input().split()))
GPA(*lst)

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

90 95 87
结尾无空行
输出样例1:
在这里给出相应的输出。例如:

4.00
结尾无空行

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

60 73 88 59
结尾无空行
输出样例2:
在这里给出相应的输出。例如:

1.38
结尾无空行

def GPA(*l):
    sum = 0
    for i in l:
        if i >= 90:
            sum += 4.5
        elif 80 <= i < 90:
            sum += 3
        elif 70 <= i < 80:
            sum += 1.5
        elif 60 <= i < 70:
            sum += 1
        else:
            sum += 0
    print('%.2f' % (sum / len(l)))

3.求多项式的值 (30 分)

一元多项式可以用列表表示。如p(x)=1+3x+9x
4
,可以表示成列表[1,3,0,0,9]。输入列表表示的多项式和x的值,求多项式的值。

函数接口定义:

在这里描述函数接口。例如:
value(lst,x)

lst表示多项式,x代表具体的值。

裁判测试程序样例:

/* 请在这里填写答案 */

lst=eval(input())
y=float(input())
print("{:.1f}".format(polyvalue(lst,y)))

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

[1,3,0,0,9]
1
结尾无空行

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

13.0
结尾无空行

def polyvalue(lst, x):
    sum = 0
    for i, j in enumerate(lst):
        sum += j * x ** i
    return sum

4.合并两个列表并去重 (6 分)

输入两个列表alist和blist,要求列表中的每个元素都为正整数且不超过10; 合并alist和blist,并将重复的元素去掉后输出一个新的列表clist。 可以使用以下实现列表alist的输入: alist=list(map(int,input().split())) 同时为保证输出结果一致,请将集合内元素排序之后再输出。 如对于列表alist,可输出sorted(alist)。

输入格式: 共两行,每一行都用来输入列表中的元素值,以空格隔开(可能不至一个空格 )。

输出格式: 共一行,以列表形式打印输出。

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

1 2 3
4 3 2
结尾无空行

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

[1, 2, 3, 4]
结尾无空行

alist = list(map(int, input().split()))
blist = list(map(int, input().split()))
clist = set(alist + blist)
print(sorted(clist))

5.字符串合成 (10 分)

用户输入一个字符串,将下标为偶数的字符串提出来合并成一个新的字符串A,再将下标为奇数的字符串提出来合并成一个新的字符串B,再将字符串A和B连接起来输出。

输入格式:
输入一行字符串,如:abcdefg

输出格式:
将下标为偶数的字符串提出来合并成一个新的字符串A,再将下标为奇数的字符串提出来合并成一个新的字符串B,再将字符串A和B连接起来输出。如: aceg bdf acegbdf

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

abcdefg
结尾无空行
输出样例1:
在这里给出相应的输出。例如:

aceg
bdf
acegbdf
结尾无空行

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

白日依山尽
结尾无空行
输出样例2:
在这里给出相应的输出。例如:

白依尽
日山
白依尽日山
结尾无空行

s = input()
a, b = '', ''
for i in range(len(s)):
    if i % 2 == 0:
        a += s[i]
    else:
        b += s[i]
c = a + b
print(a)
print(b)
print(c)

6.查找数字字符串并求和 (8 分)

从键盘输入任意字符串,查找字符串中的所有数字字符串。若无数字字符串,则输出“No digits",若有数字子串,则找到所有数字子串并求它们的和。 注意:数字可能有实数的子串。

输入格式:
输入任意字符串。

输出格式:
若无数字字符串,则输出“No digits",若有数字子串,则找到所有数字子串并求它们的和。

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

34euitye87.89df37.903jdhf374
输出样例:
在这里给出相应的输出。例如:

533.793

n = input() + 'a'
x = ''
l = []
for i in n:
    if i.isdigit():
        x += i
    elif i == '.':
        if x == '':
            continue
        elif x.isdigit():
            x += i
        else:
            x = ''
    else:
        if x != '' and x[0].isdigit():
            l.append(eval(x))
            x = ''
if len(l) != 0:
    print("%s" % sum(l))
else:
    print("No digits")

7.加密字符串 (15 分)

实现一个加密函数easyCrypto(),带两个输入参数:一个需加密的字符串,一个3位数字字符串的秘钥,输出密文。

加密规则:对于出现的第一个字母,按第一个数字后的字母变换,出现的第二个字母按第二个数字,出现的第三个字母按第三个数字,出现的第四个字母按第一个数字,以此类推,字母之外的字符保持不变。

输入格式:
第一行输入要加密的字符串 第二行输入3位数字字符串

输出格式:
输出加密后的字符串

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

abcde
123
结尾无空行
输出样例1:
在这里给出相应的输出。例如:

bdfeg
结尾无空行

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

aA,zZ
111
结尾无空行
输出样例2:
在这里给出相应的输出。例如:

bB,aA

def easyCrypto(s, p):
    t = 0
    for i in s:
        if i.isalpha():
            t += 1
            f = t % 3 - 1
            if ord(i) <= 90:
                if ord(i) + int(p[f]) > 90:
                    print(chr(ord(i) + int(p[f]) - 26), end="")
                else:
                    print(chr(ord(i) + int(p[f])), end="")
            else:
                if ord(i) + int(p[f]) > 122:
                    print(chr(ord(i) + int(p[f]) - 26), end="")
                else:
                    print(chr(ord(i) + int(p[f])), end="")
        else:
            print(i, end="")


lst = input()
passwd = input()
easyCrypto(lst, passwd)

8.旋转方阵 (10 分)

对于一个奇数n阶方阵,请给出经过顺时针方向m次旋转后的结果。

输入格式:
测试数据有多组,处理到文件尾。每组测试的第一行输入2个整数n,m(1<n<20,1≤m≤100),接下来输入n行数据,每行n个整数。

输出格式:
对于每组测试,输出奇数阶方阵经过m次顺时针方向旋转后的结果。每行中各数据之间留一个空格。

输入样例:
3 2
4 9 2
3 5 7
8 1 6
3 1
4 9 2
3 5 7
8 1 6
3 7
4 9 2
3 5 7
8 1 6
3 8
4 9 2
3 5 7
8 1 6
输出样例:
6 1 8
7 5 3
2 9 4
8 3 4
1 5 9
6 7 2
2 7 6
9 5 1
4 3 8
4 9 2
3 5 7
8 1 6

while True:
    try:
        n, m = map(int, input().split())
        l = list()
        for i in range(n):
            l.append(list(map(int, input().split())))
        for x in range(m):
            data = []
            for i in range(n):
                t = []
                for j in range(n):
                    t.insert(0, l[j][i])
                data.append(list(t))
                t.clear()
            l = data
        for i in range(n):
            for j in range(n-1):
                print(l[i][j], end=" ")
            print(l[i][n-1])
    except:
        break

9. 简版田忌赛马 (10 分)

这是一个简版田忌赛马问题,具体如下: 田忌与齐王赛马,双方各有n匹马参赛,每场比赛赌注为200两黄金,现已知齐王与田忌的每匹马的速度,并且齐王肯定是按马的速度从快到慢出场,请写一个程序帮助田忌计算他最多赢多少两黄金(若输,则用负数表示)。 简单起见,保证2n匹马的速度均不相同。

输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试数据输入3行,第一行是n(1≤n≤100) ,表示双方参赛马的数量,第2行n个正整数,表示田忌的马的速度,第3行n个正整数,表示齐王的马的速度。

输出格式:
对于每组测试数据,输出一行,包含一个整数,表示田忌最多赢多少两黄金。

输入样例:
3
3
92 83 71
95 87 74
2
20 25
21 12
10
1 2 3 24 5 6 7 8 9 12
11 13 15 19 22 34 14 21 44 99

输出样例:
200
400
-1200

t = eval(input())
for i in range(t):
    n = eval(input())
    tj = list(map(int, input().split()))
    qw = list(map(int, input().split()))
    sum = 0
    for j in range(n):
        if max(tj) > max(qw):
            sum += 200
            tj.remove(max(tj))
            qw.remove(max(qw))
        elif max(tj) < max(qw):
            sum -= 200
            tj.remove(min(tj))
            qw.remove(max(qw))
    print(sum)

10.进步排行榜 (10 分)

假设每个学生信息包括“用户名”、“进步总数”和“解题总数”。解题进步排行榜中,按“进步总数”及“解题总数”生成排行榜。要求先输入n个学生的信息;然后按“进步总数”降序排列;若“进步总数”相同,则按“解题总数”降序排列;若“进步总数”和“解题总数”都相同,则排名相同,但输出信息时按“用户名”升序排列。

输入格式:
首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入一个正整数n(1 < n < 50),表示学生总数。然后输入n行,每行包括一个不含空格的字符串s(不超过8位)和2个正整数d和t,分别表示用户名、进步总数和解题总数。

输出格式:
对于每组测试,输出最终排名。每行一个学生的信息,分别是排名、用户名、进步总数和解题总数。每行的各个数据之间留一个空格。注意,进步总数和解题总数都相同的学生其排名也相同。

输入样例:
2
6
usx15131 21 124
usx15101 27 191
usx15113 31 124
usx15136 18 199
usx15117 27 251
usx15118 21 124
10
usx15131 21 124
usx15101 27 191
usx15107 24 154
usx15113 31 124
usx15117 25 251
usx15118 21 124
usx15119 22 117
usx15121 43 214
usx15128 21 124
usx15136 28 199

输出样例:
1 usx15113 31 124
2 usx15117 27 251
3 usx15101 27 191
4 usx15118 21 124
4 usx15131 21 124
6 usx15136 18 199
1 usx15121 43 214
2 usx15113 31 124
3 usx15136 28 199
4 usx15101 27 191
5 usx15117 25 251
6 usx15107 24 154
7 usx15119 22 117
8 usx15118 21 124
8 usx15128 21 124
8 usx15131 21 124

t = eval(input())
for i in range(t):
    n = eval(input())
    l = list()
    for i in range(n):
        s, d, t = input().split()
        l.append([str(s), int(d), int(t)])
    l = sorted(l, key=lambda x: (-x[1], -x[2], x[0]), reverse=False)
    flag1, flag2 = 0, 0
    ls1, ls2 = 0, 0
    for x in range(n):
        flag2 += 1
        if ls1 == l[x][1] and ls2 == l[x][2]:
            flag1 = flag1
        else:
            ls1, ls2 = l[x][1], l[x][2]
            flag1 = flag2
        print(flag1, ' '.join(str(i) for i in l[x]))

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,特别是使用pandas库,按照一来进行组是一项常见的数据析操作。这通常意味着你需要根据日期数据的星期信息来进行析或者汇总统。这里详细解释如何通过Pandas的groupby功能来按照组数据。 ### 步骤详解 #### 准备数据 假设有如下一个DataFrame `df`,包日期列`date_column`: ```python import pandas as pd data = {'date_column': [ '2023-01-01', '2023-01-07', '2023-01-14', '2023-01-21', '2023-01-28', '2023-02-04', '2023-02-11' ], 'value': [10, 20, 30, 40, 50, 60, 70] } df = pd.DataFrame(data) ``` #### 按照组并聚合数据 首先,确保日期列被解释为日期格式: ```python df['date_column'] = pd.to_datetime(df['date_column']) ``` 然后,使用 `.dt` 属性来访问日期相关的属性,如、月等。为了将日期转换成按照组的数据,我们可以使用 `.apply()` 来自定义转换逻辑: ```python df['year_week'] = df['date_column'].dt.strftime('%Y-%W') ``` 这会生成一个新的列 `year_week` ,表示每年的第几。现在,你可以使用 `.groupby()` 函数来根据这一新列进行组: ```python grouped_data = df.groupby('year_week').agg({'value': 'sum'}) print(grouped_data) ``` 这将会打印出每的总价值汇总。 ### 相关问题: 1. 是否可以直接使用`pd.Grouper(freq='W')`来按组而不显式地创建新的列? 2. 当数据中有末缺失值时应该如何处理? 3. 组后的数据如何进一步进行复杂操作,如求平均值、中位数或标准差?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值