7-1 sdut-ASCII码排序

输入N个字符后,按各字符的ASCII码从小到大的顺序输出这N个字符。

输入格式:

输入数据有多组,每组占一行,有N个字符组成。

输出格式:

对于每组输入数据,输出一行,字符中间用一个空格分开。

输入样例:

Input1231

qwe1321

asddsfadsfadsf

zxc1321132dsfa

abcABCDFdefgDEFGHIJhijakfdsadsf;dsa

输出样例:

1 1 2 3 I n p t u

1 1 2 3 e q w

a a a d d d d f f f s s s s

1 1 1 2 2 3 3 a c d f s x z

; A B C D D E F F G H I J a a a a b c d d d d e f f f g h i j k s s s

答案:

while True:
    try:
        s=input()
        # sort()只能对列表list使用,改变原列表
        # 但sorted可适用于任何迭代对象,不改变原列表
        new_s=sorted(s)
        # 解包操作使每个元素间有一个空格
        print(*new_s)
    except:
        break

7-2 sdut-数据逆序

一行输入N个整数,按逆序输出数值。

输入格式:

输入有多行。

每行有若干个整数,用空格分隔。

输出格式:

对于每行输入,将数值逆序输出,数值以空格隔开。

输入样例:

1 3 5 9 7 6 8 2 4 0 234 656 2223

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

-3 -43 23 435 -5667 231 100 2002 2035

输出样例:

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

2223 656 234 0 4 2 8 6 7 9 5 3 1

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

2035 2002 100 231 -5667 435 23 -43 -3

答案:

while True:
    try:
        ls=list(map(int,input().split()))
        # 直接逆序
        new_ls=ls[::-1]
        print(*new_ls)
    except:
        break

7-4 sdut-统计身高超过平均值的学生

中小学生每个学期都要体检,量身高,因为身高可以反映孩子的生长状况。

现在,一个班的身高已经量好了,请输出其中超过平均身高的那些学生的身高。

输入格式:

输入为一行数据,以空格分隔,每个数据都是一个正整数。

输出格式:

输出超过身高平均数的学生的身高数值,每个数后面有一个空格。

输出的顺序和输入的相同。

输入样例:

143 174 119 127 117 164 110 128

输出样例:

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

143 174 164

答案:

ls=list(map(int,input().split()))
sum=0
# i表示列表ls内的每个元素
for i in ls:
    # 记得转换为int形式
    sum+=int(i)
ave=sum/len(ls)
for i in ls:
    if i>ave:
        print(i,end=' ')

7-5 sdut-求整数的位数及各位数字之和

对于给定的正整数N,求它的位数及其各位数字之和。

(用Python实现提示:把整数转换成字符串,列表,用sum和len函数)

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:

456

输出样例:

3 15

答案:

# 输入的n设为字符串格式,就可以直接转换成列表list啦
# len函数只能用于字符串 列表 元祖等,不可用于整数,所以要把n转换成字符串形式
n=input()
ls=list(n)
n1=len(ls)
sum=0
for i in ls:
    # 记得把ls内的每个元素转换成int
    sum+=int(i)
print("%d %d"%(n1,sum))

7-6 sdut-字母替换

编写程序,将输入字符串中的大写英文字母按以下对应规则替换,其他字符不变。

(Python实现提示:转换表用元组实现)

原字母 对应字母

A Z

B Y

C X

D W

... ...

X C

Y B

Z A

输入格式:

在一行中输入字符串。

输出格式:

在一行中给出替换完成后的字符串。

输入样例:

This is a pen.

输出样例:

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

Ghis is a pen.

答案:

s=input()
# 存放替换完成后的字符串
new_s=''
ls=list(s)
for i in ls:
    # 如果i是大写字母,就要进行替换
    if i.isupper():
        # ord()得到该字符的ASCII码值
        # chr()将计算结果转换回对应的字符
        new_s+=chr(155-ord(i))
    # 如果i是大写字母,就直接加入
    else:
        new_s+=i
print(new_s)

7-7 sdut-输出字母在字符串中位置索引

输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。

输入格式:

第一行输入字符串;

第二行输入两个字符,用空格分开。

输出格式:

从右向左输出字符和索引(中间有一个空格)。下标最大的字符最先输出。每行一个。

输入样例:

pmispsissippi

s p

输出样例:

11 p

10 p

8 s

7 s

5 s

4 p

3 s

0 p

答案:

s=input()
a,b=input().split()

# 从右->左遍历
# len(s)-1得到最后字母的索引位置
# 第一个-1是指循环的结束条件是i>-1,即一直遍历到i=0
# 第二个-1的意思是每次循环-1,实现从右到左的倒序遍历
for i in range(len(s)-1,-1,-1):
    if s[i]==a or s[i]==b:
        print(i,s[i])

7-8 sdut- 输出10个不重复的英文字母

输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来进行输出

如没有10个英文字母,显示信息“not found”。

输入格式:

在一行中输入字符串。

输出格式:

在一行中输出最左边的10个不重复的英文字母;或者显示信息:“not found"

输入样例1:

poemp134567

输出样例1:

not found

输入样例2:

This 156is a test example

输出样例2:

Thisaexmpl

答案:

s=input()
# 存放输出的十个字母(如果有的话)
s1=''
# 计算已存放在s1中的字母数量
cnt=0
for i in range(len(s)):
    # 如果i是字母
    if s[i].isalpha():
        # 如果cnt>10且i未重复(可保证cnt里只有10个字母)
        if cnt<10 and s[i].upper() not in s1 and s[i].lower() not in s1:
            s1+=s[i]
            cnt+=1
if cnt<10:
    print("not found")
else:
    print(s1)

7-9 sdut-判断两个字符串是否为变位词

如果一个字符串是另一个字符串的重新排列组合,那么这两个字符串互为变位词。

比如,"heart" 与 "earth" 互为变位词,"Mary" 与 "arMy" 也互为变位词。“Hello world"与“worldHello"不是变位词。

输入格式:

第一行输入第一个字符串;

第二行输入第二个字符串。

输出格式:

若是变位词,输出:yes;否则,输出:no。

输入样例1:

Mary

arMy

输出样例1:

yes

输入样例2:

hello world

world hello

输出样例2:

yes

输入样例3:

I am very good.

verygood I am.

输出样例3:

no

答案:

s1=input()
s2=input()
if sorted(s1)==sorted(s2):
    print("yes")
else:
    print("no")

7-10 sdut-猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:

让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。

请问是原来第几号猴子当选猴王?

输入格式:

在一行中给一个正整数N(≤1000)。

输出格式:

在一行中输出当选猴王的编号。

输入样例:

11

输出样例:

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

7

答案:

# 一个典型的约瑟夫环问题~
# 接下来是约瑟夫环的数学解法
n=int(input())
# 从0开始标下标
# 如果只有一只猴子,猴王下标就是0,后续+1就是编号了
p=0
# i为当前的猴子数,从2->n
# i=x时,就是在计算x只猴子时的胜利者编号。而只有i>=2时,才需要计算
# 当有一只猴子时直接就当猴王了
for i in range(2,n+1):
    p=(p+3)%i
# 将下标转换为编号
print(p+1)

7-11 sdut-找出两组数据中非公共元素

给定两行输入,每行代表一组元素。求两组中非公共的元素。

输入格式:

在两行中给出两组元素,每行的元素间用空格分开。在一行中元素可能会有重复值。

输出格式:

在一行中按照元素的输入顺序输出不是两组共有的元素,以空格分隔。(题目保证至少存在一个这样的元素)

输入样例:

10 3 -5 2 8 0 5 -15 9 100

10 6 4 8 2 -5 9 0 100 1

输出样例:

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

3 5 -15 6 4 1

答案:

# 输入的元素不一定是数字
# 故输入应按字符串直接比较
s1=input()
s2=input()
# 将字符串s1、s2分割成多个子字符串,并返回一个列表
ls1=s1.split()
ls2=s2.split()
# 存放非公共元素
ls3=[]
# 字符串列表也可以直接用for循环
for i in ls1:
    if i not in ls2:
        # append是列表(list)的方法,用于在列表的末尾添加一个新元素
        ls3.append(i)
for i in ls2:
    if i not in ls1:
        ls3.append(i)
print(*ls3)

7-13 sdut-矩阵行、列、对角线和的最大值

求一个3*3矩阵每行、每列及对角线和的最大值。

输入格式:

在一行输入9个整数。

输出格式:

在一行输出每行、每列及对角线和的最大值。

输入样例:

3 6 5 9 8 2 1 4 5

输出样例:

19

答案:

# 虽然笨但有用。
ls=list(map(int,input().split()))
h1=ls[0]+ls[1]+ls[2]
h2=ls[3]+ls[4]+ls[5]
h3=ls[6]+ls[7]+ls[8]
l1=ls[0]+ls[3]+ls[6]
l2=ls[1]+ls[4]+ls[7]
l3=ls[2]+ls[5]+ls[8]
d1=ls[0]+ls[4]+ls[8]
d2=ls[2]+ls[4]+ls[6]
num=max(h1,h2,h3,l1,l2,l3,d1,d2)
print(num)

7-15 sdut-打印显示直角字母图形

给定行数,输出指定行数的字母组成的图形。

输入格式:

在一行内给出行数n,1<=n<=10。

输出格式:

输出由大小字母组成的直角图形。

输入样例1:

2

输出样例1:

A

AB

输入样例2:

7

输出样例2:

A

AB

ABC

ABCD

ABCDE

ABCDEF

ABCDEFG

答案:

n=int(input())
s='ABCDEFGHIJ'
# 遍历行数
for i in range(n):
    # 每行有i个字母
    # i是0->n-1,所以下面j需要是i+1,即1->n
    for j in range(i+1):
        # 同一行间的字母不需要以空格相隔
        print(s[j],end='')
    # 换行
    print()

7-17 sdut-array2-5 打印“杨辉三角“ 品中国数学史 增民族自豪感(2)

背景介绍

北宋人贾宪约1050年首先使用“贾宪三角”进行高次开方运算。
南宋数学家杨辉在《详解九章算法》(1261年)记载并保存了“贾宪三角”,故称杨辉三角。杨辉三角是中国数学史上的一个伟大成就。
杨辉三角,是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。

中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

杨辉三角数字的特点为:

(1)在三角形的首列和对角线上,数值均为1;

(2)其余数据为:每个数字等于上一行的左右两个数字之和,第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,用公式表示为: C(n+1,i)=C(n,i)+C(n,i-1)。

图示为:

1.jpg

杨辉三角的应用:(a+b)的n次方,展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。

输入格式:

欲打印杨辉三角的行数n(1<=n<=13)。

输出格式:

(1)输出的数据为等腰三角形样式;

(2)每个数字占据4个字符的位置,数字左对齐,数字不足4位的右边留出空格;

(3)最后一行的数值“1”顶格,前面无空格。

提示:以n=5,分析行首空格数为:

7.jpg

输入样例1:

5

输出样例:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

输入样例2:

6

输出样例:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

答案:

n=int(input())
# 存放杨辉三角的每一行
# 第一行一定有一个1
ls=[ [1] ]
# 从第二行(索引1)开始
for i in range(1,n):
    # 每一行开头都是一个1
    row=[1]
    # 从第1列到第i-1列,不包括每一行的最后一个数
    for j in range(1,i):
        # 杨辉三角的递推公式:当前行第j个数 = 上一行第j-1个数 + 上一行第j个数
        # ls[i-1]为当前行的上一行,索引从0开始,要对应好
        row.append( ls[i-1][j]+ls[i-1][j-1] )
    # 每一行末尾也是1
    row.append(1)
    # 将每一行都添加到ls内
    ls.append(row)
# c为每一行前面的空格数
c=n*2-2
# 逐行打印
for i in range(n):
    # 在开始打印每行数字前,要先打印c个空格
    print(' '*c,end='')
    # 遍历该行的每个数字,并格式化打印以实现左对齐
    # 第0行有1个数字,第1行有两个..以此类推,故用i+1
    for j in range(i+1):
        # end=''实现不换行
        print("%-4d"%ls[i][j],end='')
    # 打印完一行,换行!
    print()
    # 每往下一行,每行前面的空格数-2
    c-=2


7-18 sdut-列表去重

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

输入格式:

在一行中输入列表。

输出格式:

在一行中输出不重复的列表元素。

输入样例1:

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

输出样例1:

4 7 5 6 8 9

输入样例2:

[1,2,3,"abcd","hello",1,2,3,4,5,6]

输出样例2:

1 2 3 abcd hello 4 5 6

答案:

# eval()函数将输入的列表样式的字符串转换成世纪的列表
s=eval(input())

# 准备输出的去重后的列表
# set():set为集合,元素唯一,可自动去重
# set集合无序,题目要求按原次序输出,需要指定排序
# 排序依据:key=s.index->以元素在s中第一次出现的索引位置排序
ls=sorted(set(s),key=s.index)

# 将列表解包,并设置列表内元素以空格分隔
print(*ls,sep=' ')

7-19 sdut-期末考试之排名次

期末考试结束了,童鞋们的成绩也出来的了,可是为了排名次可忙坏了老师,因为学生太多了。这时,老师把这个任务交给了你,希望你能帮老师完成。作为IT人,你当然不能用笨笨的人工方法了,编程解决才是好办法。
共有三门课,语文、数学和英语,要求根据学生的各科成绩计算出其总成绩,并根据总成绩从高到低排序.

输入格式:

第一行一个整数N(N<=100),代表学生的人数。
接下来的N行数据,每行有三个整数,C,M,E分别代表一个学生语文、数学和英语的成绩.

输出格式:

一共N行,每行一个数,从大到小,分别代表各个学生的总成绩.

输入样例:

3

70 80 90

59 59 59

100 100 100

输出样例:

300

240

177

答案:

n=int(input())
# 存放学生的总成绩
ls=[]
for i in range(n):
    c,m,e=map(int,input().split())
    score=c+m+e
    ls.append(score)
# 逆序排序(从大到小)
ls.sort(reverse=True)
# 由于要求每个元素占一行,直接用for循环
for i in ls:
    print(i)
    

7-20 sdut- 矩阵转置(II)

从键盘输入一个m(2<=m<=6)*n(2<=n<=6)阶的矩阵,编程输出它的转置矩阵。

输入格式:

在第一行输入矩阵的行数m和列数n的值;

在第二行按照矩阵格式输入矩阵的数据,同行数据之间用空格隔开。

输出格式:

矩阵格式输出,同行数据之间用一个空格隔开。

输入样例:

3 5

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

输出样例:

1 1 1

2 2 2

3 3 3

4 4 4

5 5 5

答案:

m,n=map(int,input().split())

# 保存原矩阵
a=[]

for i in range(m):
    # list将map的结果转换成真正的列表
    row=list( map(int,input().split()))
    a.append(row)

#转置矩阵
for i in range(n): # 原矩阵的行
    for j in range(m): # 原矩阵的列
        # 输出元素,注意是a[j][i]
        print(a[j][i],end='')
        # 如果当前元素不是转置矩阵此行最后一个元素,要加空格
        if j!=m-1:
            print(" ",end='')
    # 转置矩阵一行输出结束,换行
    print()

7-23 sdut-对称矩阵的判定

分数 10

作者 周雪芹

单位 山东理工大学

输入矩阵的行数,再依次输入矩阵的每行元素,判断该矩阵是否为对称矩阵,若矩阵对称输出“yes”,不对称输出“no”。

输入格式:

输入有多组,每一组第一行输入一个正整数N(N<=20),表示矩阵的行数(若N=0,表示输入结束)。

下面依次输入N行数据。

输出格式:

若矩阵对称输出“yes",不对称输出“no”。

输入样例:

3

6 3 12

3 18 8

12 8 7

3

6 9 12

3 5 8

12 6 3

0

输出样例:

yes

no

答案:

while True:
    n=int(input())
    if n==0:
        break
    else:
        a=[]
        for i in range (n):
            row=list( map(int,input().split()) )
            a.append(row)

        # 先假设对称
        flag=True
        for i in range(n):
            for j in range(n):
                # 如果有不对称情况,更改flag
                if a[i][j]!=a[j][i]:
                    flag=False
            # 如果有不对称,提前结束外层循环
            # 如果在内循环判断,则只结束内循环 而不结束外循环,浪费时间
            if not flag:
                break
        if flag:
            print("yes")
        else:
            print("no")

7-18 sdut-查验身份证

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:
{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10

M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

验证身份证合法性的规则:(1)前17位是否全为数字;(2)最后1位校验码计算准确。

输入格式:

输入第一行给出正整数N(≤100)表示:输入的身份证号码的个数。

随后N行,每行给出1个18位身份证号码。

输出格式:

按照输入的顺序每行输出1个有问题的身份证号码。

如果所有号码都正常,则输出All passed。

输入样例1:

4

320124198808240056

12010X198901011234

110108196711301866

37070419881216001X

输出样例1:

12010X198901011234

110108196711301866

37070419881216001X

输入样例2:

2

320124198808240056

110108196711301862

输出样例2:

All passed

答案:

#定义权重分配
weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
# 定义检验码M
M=[1,0,"X",9,8,7,6,5,4,3,2]

n=int(input())
cnt=0 # 记录合法的身份证数量
for i in range(n):
    sum=0
    s=input()
    # 检验前17位是否全为数字
    # [:-1]表示从开始到倒数第一个(不包括倒数第一个)
    # [开始位置:结束位置:步长]
    if s[:-1].isdigit():
        # s是字符串,要进行数学计算则需要转换成列表
        # map将字符串中的每个字符转换为整数
        ls=list( map(int,s[:-1]) )
        # 计算加权和
        for i in range(len(ls)):
            sum+=weights[i]*ls[i]
        # 计算Z值
        sum=sum%11
        # 检验校正码M
        # s[-1]是身份证最后一位(负索引),是字符串,所以M也需要转换成str
        if str(M[sum])!=s[-1]:
            print(s)
        else:
            cnt+=1
    else:
        print(s)
if cnt==n:
    print("All passed")

7-19 sdut-统计两个字符串中相同的字符个数

输入字符串A、字符串B,求在字符串A、字符串B中相同的字符个数。

输入格式:

第一行输入,表示字符串A。
第二行输入,表示字符串B。

输出格式:

在一行内,输出字符串A、B中相同字符的个数。

输入样例:

AEIOU

HELLO World!

输出样例:

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

2

答案:

s1=input()
s2=input()
cnt=0
# set可以去重
for i in set(s1):
    if i in set(s2):
        cnt+=1
print(cnt)

7-20 sdut-分析每队活动投票情况

利用集合分析活动投票情况。

第一小队有五名队员,序号是1,2,3,4,5; 第二小队也有五名队员,序号6,7,8,9,10。

输入一个得票队员的编号的字符串,求第一、二小队没有得票的队员。在一行中输入得票的队员的序列号,用逗号隔开。

输入格式:

在一行中输入得票的队员的序列号,用逗号隔开。

输出格式:

在第一行中输出第一小队没有得票的队员序号,用空格分开;

在第二行中输出第二小队没有得票的队员序号,用空格分开。

输入样例:

1,5,9,3,9,1,1,7,5,7,7,3,3,1,5,7,4,4,5,4,9,5,10,9

输出样例:

2

6 8

答案:

# 读取输入的字符串,并转换成整数列表
ls=list( map(int,input().split(',')) )
# 创建两个空列表,储存没有得票的队员
one=[]
two=[]
for i in range(1,6):
    if i not in ls:
        one.append(i)
# 对one解包,使其由打印“one]0],one[1],..."转换为打印one[0] one[1]...
# sep设定分隔符
print(*one,sep=' ')

for i in range(6,11):
    if i not in ls:
        two.append(i)
print(*two,sep=' ')

7-21 sdut-统计字符在字符串中出现的次数

统计并输出某给定字符在给定字符串中出现的次数。

输入格式:

第一行给出一个以回车结束的字符串(一行少于80个字符);

第二行输入一个字符。

输出格式:

在一行中输出给定字符在给定字符串中出现的次数。(如果未出现,则输出0)

输入样例:

programming is More fun!

m

输出样例:

2

答案:

#很简单,没什么好解释的。
s=input()
x=input()
print(s.count(x))

7-22 sdut-四则运算(用字典实现)

根据输入信息进行四则运算(用字典实现)。

(与c语言的switch语句相比较。)

输入格式:

第1行中输入一个数字a;

第2行中输入一个四则运算符(+ , - , * , / ) op,

在第3行中输入一个数字b。

输出格式:

在一行中输出 a op b 的运算结果(保留2位小数)。

输入样例1:

7

/

3

输出样例1:

2.33

输入样例2:

10

/

0

输出样例2:

divided by zero

答案:

# 也没啥好说的。
a=int(input())
op=input()
b=int(input())
if op=="+":
    print("%.2f"%(a+b))
elif op=="-":
    print("%.2f"%(a-b))
elif op=="*":
    print("%.2f"%(a*b))
else:
    if b==0:
        print("divided by zero")
    else:
        print("%.2f"%(a/b))

7-23 sdut-统计工龄

给定公司N名员工的工龄,按工龄增序输出每个工龄段有多少员工。

输入格式:

首先给出正整数N(≤105 ),即员工总人数;随后给出N个整数,即每个员工的工龄,范围在[0, 50]

输出格式:

按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。
每项占一行。

输入样例:

8

10 2 0 5 7 2 5 2

输出样例:

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

0:1

2:3

5:2

7:1

10:1

答案:

n=int(input())
ages=list( map(int,input().split()) )
# [0]表示此列表内只有一个元素0
# *51:工龄范围在0-50,故有51个
count=[0]*51
for i in ages:
    count[i]+=1
for i in range(51):
    if count[i]>1:
        print("%d:%d"%(i,count[i]))

7-24 sdut-字典合并

输入用字符串表示两个字典,输出合并后的字典。字典的键用一个字母或数字表示。

注意: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

答案:

# eval()将字符串转换为python字典
# dict()确保是字典类型
d1=dict(eval(input()))
d2=dict(eval(input()))
# 存放d1和d2合并后的所有键
l1=[]
for i in d1:
    if i in d2:
        # 相同键的值直接相加
        d2[i]+=d1[i]
    else:
        # 不同键的直接添加
        d2[i]=d1[i]
for i in d2:
    l1.append(i)
# 存放l去重后的所有键
l2=list(set(l1))
# 保存所有字符串键,如['1', 'a']
l3=[]
# 保存转换后的键值
l4=[]
for i in l2:
    # 如果i是字符串
    if isinstance(i,str):
        # 保存字符串键本身
        l3.append(i)
        # 保存字符串的ASCII码
        l4.append(ord(i))
    else:# 如果是数值键,直接保存
        l4.append(i)
# 创建要输出的那个字典
d3={}
for i in d2:
    if isinstance(i,str):
        # 如果是字符串键,需将其转换为ACSII码作为新键
        d3[ord(i)]=d2[i]
    else:
        d3[i]=d2[i]
# l4中保存的是统一的键值(字符串为ACSII码)
for i in sorted(l4):
    if chr(i) not in l3:
        # 如果chr(i)不在l3(保存着所有原始字符串键)中,将ACSII码转换回字符
        print("%s:%s"% (i,d3[i]))
    else:
        print("'%s':%s"% (chr(i),d3[i]))

7-25 sdut-集合相等问题

给定2 个集合S和T,试设计一个判定S和T是否相等的蒙特卡罗算法。

设计一个拉斯维加斯算法,对于给定的集合S和T,判定其是否相等。

输入格式:

输入数据的第一行有1 个正整数n(n≤10000),表示集合的大小。

接下来的2行,每行有n个正整数,分别表示集合S和T中的元素。

输出格式:

将计算结论输出。集合S和T相等,则输出:YES,否则输出:NO。

输入样例:

3

2 3 7

7 2 3

输出样例:

YES

答案:

# 也也没啥好说的。
n=int(input())
l1=list( map(int,input().split()) )
l2=list( map(int,input().split()) )
flag=True
for i in l1:
    if i not in l2:
        flag=False
if not flag:
    print("NO")
else:
    print("YES")

7-26 sdut-植物与颜色

请定义具有red, orange, yellow, green, blue, violet六种颜色的变量color。

根据输入的颜色名称,输出以下六种植物花朵的颜色:
Rose(red), Poppies(orange), Sunflower(yellow), Grass(green), Bluebells(blue), Violets(violet)。

如果输入的颜色名称不在变量color中,例如,输入:purple,请输出:I don't know about the color purple.

输入格式:

第1行为颜色的数量n。

接下来有n行字符串每行有一个字符串代表颜色名称,颜色名称最多30个字符。

输出格式:

输出对应颜色的植物名称,例如:Bluebells are blue.

如果输入的颜色名称不在color变量中,例如purple, 请输出I don't know about the color purple.

输入样例:

3

blue

yellow

purple

输出样例:

Bluebells are blue.

Sunflower are yellow.

I don't know about the color purple.

答案:

colors=['red','orange','yellow','green','blue','violet']
flowers=['Rose', 'Poppies', 'Sunflower', 'Grass', 'Bluebells','Violets']
n=int(input())
for i in range(n):
    s=input()
    if s in colors:
        # colors和flowers的元素一一对应
        # 因此只需求出flowers中s的索引,就可以知道对应的flower
        index=colors.index(s)
        flower=flowers[index]
        # %c输出单个字符,%s输出字符串
        print("%s are %s."%(flower,s))
    else:
        print("I don't know about the color %s."%s)

7-27 sdut-众数

众数是指在一组数据中,出现次数最多的数。例如:1, 1, 3 中出现次数最多的数为 1,则众数为 1。

给定一组数,你能求出众数吗?

输入格式:

输入数据有多组(数据组数不超过 50)。对于每组数据:

第 1 行输入一个整数 n (1 <= n <= 10000),表示数的个数。

第 2 行输入 n 个用空格隔开的整数 Ai (0 <= Ai <= 100000),依次表示每一个数。

输出格式:

对于每组数据,在一行中输出众数以及它出的次数,中间用空格分隔。

数据保证有唯一的众数。

输入样例:

3

1 1 3

5

0 2 3 1 2

输出样例:

1 2

2 2

答案:

while True:
    # 当没有更多输入时,input()会抛出一个error
    # 所以需要try-except捕获这个error
    try:
        n=int(input())
        ls=list( map(int,input().split()) )
        # 求众数
        # 函数ls.count计算某个数在列表中出现的次数
        num=max(ls,key=ls.count)
        # 求此众数出现的次数
        cnt=ls.count(num)
        print("%d %d"%(num,cnt))
    except:
        break

更多推荐