西电2020 python OJ作业(50道题,持续更新)

0.A+B problem

题目描述
用来适应环境的题目,自然比较简单些。 计算2个整数的和。这两个整数都在1到1000之间。

输入
输入只有一行,包括2个整数a, b。之间用一个空格分开。

输出
输出只有一行(这意味着末尾有一个回车符号),包括1个整数。
必须用print()输出你的结果,才能通过OJ的评判

#!/usr/bin/python3 
a, b = map(int, input().split()) 
print(a+b)

1.python的hello world

题目描述
请在一行输出 “Python = Pile + sensensen”

输入
程序无输入

输出
按照题目要求输出

#!/usr/bin/python3
print('Python = Pile + sensensen');

2.python成绩

题目描述
森森最近学习了Python课,这门课程的总成绩计算方法是:总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50% (课程实际评分规则请以任课教师要求为准)
森森想知道,这门课程自己最终能得到多少分。

输入
输入文件只有1行,包含三个非负整数A、B、C,分别表示森森的作业成绩、小测成绩和期末考试成绩。
相邻两个数之间用一个空格隔开,三项成绩满分都是100分。
0 ≤ A、 B、 C ≤ 100 且 A、 B、 C 都是 10 的整数倍

输出
输出文件只有1行,包含一个整数,即森森这门课程的总成绩,满分也是100分。

#!/usr/bin/python3
a, b, c= map(int, input().split())
d = int (a*0.2 + b*0.3 + c*0.5)
print(d)

3.eval() 函数的使用1

题目描述
Pile 学了 eval() 函数,感觉非常好用。所以,她也希望你能掌握这个技能。让我们开始吧。

输入
输入一行一个字符串,表示 eval() 函数所需要执行的语句。保证可以正常执行 eval() 函数。

输出
输出 eval() 函数执行的语句。

#!/usr/bin/python3
eval(input())

4.math 库的使用1

题目描述
森森在学专业课的时候,发现一个神奇的函数,叫 Gamma 函数。
森森想知道 Gamma 函数的值。

输入
输入一行一个正整数 n ,表示森森想要知道的函数值。

输出
输出一行一个浮点数,表示 Gamma(n) 的值。

#!/usr/bin/python3
import math
a = int(input())
print(math.gamma(a))

5.字符串存在判定

题目描述
Pile 想要知道,一个字符串在另一个字符串内是否存在。

输入
输入第一个字符串表示字符串 a;
第二行一个字符串 b

输出
输出 ‘True’ 或者 ‘False’ ,表示字符串是否存在。

#!/usr/bin/python3
a = input()
b = input()
if b.find(a) != -1:
    print("True")
else : print("False")

6.回文串的判断

题目描述
Pile 想知道她构造的一个字符串是不是回文串,请你帮她判断一下吧。
回文串的定义是反向排列与原串相同。

输入
一行一个字符串,表示 Pile 提供给你的字符串。

输出
输出 ‘True’ 表示输入的串是回文串;否则输出 ‘False’ 。

#!/usr/bin/python3
s = input()
a = len(s)
i = 0
count = 1
while i <= (a / 2):
    if s[i] == s[a - i - 1]:
        count = 1
        i += 1
    else:
        count = 0
        break

if count == 1:
    print('True')
else:
    print('False')

7.成绩分析

题目描述
森森的期末考试考完了,她想知道自己的成绩等级。
她的成绩与等级之间是这样转换的:
成绩在 90~100 分之间是 A;
成绩在 80~89 分之间是 B;
成绩在 70~79 分之间是 C;
成绩在 60~69 分之间是 D;
成绩在 0~59 分之间是 F。
请你根据她的成绩计算出她的等级。当然,她可能会输入一个错误的值,这时候请输出 “Error!” 。

输入
输入一行一个整数,表示森森的成绩

输出
输出一个字母或者 “Error!” 表示结果。

#!/usr/bin/python3
a = int(input())
if  0<=a<=59:
     print("F")
else:
     if 60<=a<=69:
      print("D")
     else:
        if 70<=a<=79:
          print("C")
        else:
            if 80<= a <= 89:
                 print("B")
            else:
                if 90 <= a <= 100:
                    print("A")
                else: print("Error!")

8.最大公约数

题目描述
Pile 想要知道一个经典问题:
给你两个数,请求出一个数的最大公约数

输入
输入两行,其中:
第一行一个正整数,表示 a
第二行一个正整数,表示 b

输出
输出 a, b 的最大公约数

#!/usr/bin/python3
import math
a = int(input())
b = int(input())
z=math.gcd(a,b)
print(z)

9.输出偶数

题目描述
森森最喜欢偶数了。
请你帮她输出 从 1 到 n 的所有偶数~

输入
输入一行一个数,表示上文中的 n

输出
输出多行,保证一行有且只有一个偶数。

#!/usr/bin/python3
n = int(input())
i = 1
while i<=n:
 if (i % 2) == 0:
    print(i)
    i += 1
 else:
    i += 1

10.计算均值

题目描述
Pile 想问你一个问题:
给你 n(1 <= n <= 10000)个整数,求它们的和与均值。

输入
输入第一行是一个整数n,表示有n个整数。
第2~n+1行每行包含1个整数。

输出
输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。

#!/usr/bin/python3
n = int(input())
a = [0]

sum = 0
average = 0

i = 1
while i<=n:
    b = int(input())
    a.append(b)
    i +=1

j=1
while j<=n:
    sum += a[j]
    j +=1

average = sum/n
print(sum,format(average, '.5f'))

11.计算阶乘

题目描述
森森想知道 1! + 2! + … + n!,请你帮她计算一下吧。

输入
输入一行一个整数 n, 表示上文的 n

输出
输出一个整数表示结果

#!/usr/bin/python3
n = int(input())
a = [0]
sum = 0
i = 1
b=1

while i<=n:
    b = 1
    for x in range(1, i + 1):#[1,i]
        b = b * x
    a.append(b)
    i += 1

j=1
while j<=n:
    sum += a[j]
    j +=1

print(sum)

12.汇率兑换

题目描述
按照课本中温度转换程序的设计思路,按照 1美元 = 6人民币的汇率编写美元和人民币的双向兑换程序。

输入
输入一行字符串,表示人民币或者美元的数量。保证字符串的最后一位是 A-Z 的字母,其他位置均为数字。
人民币的最后一位一定是 ‘R’ 或者 ‘r’
美元的最后一位一定是 ‘D’ 或者 ‘d’

输出
输出转换后的结果。结果表示为一个字符串,前面输出一个整数,最后一位输出 “R” 或者 “D” 表示人民币或者美元。
如果不能转换,输出 “Error!” 。

#!/usr/bin/python3
zifuchuan = input()
a = 'R'
b = 'D'
c = 'r'
d = 'd'

num = int(''.join([x for x in zifuchuan if x.isdigit()]))


if zifuchuan.find(a) != -1:
    m=num//6
    print(str(m)+'D')
else:
    if zifuchuan.find(c) != -1:
        m = num //6
        print(str(m) + 'D')
    else :
        if zifuchuan.find(b) != -1:
           r = num * 6
           print(str(r)+'R')
        else:
            if zifuchuan.find(d) != -1:
                r = num * 6
                print(str(r) + 'R')
            else:
              print("Error!")

13.进度条的显示

题目描述
实现一个进度条函数,具体的实现方法可以与书上的代码以及对照进行实现。

输入
输入 scale 表示输出进度条的精度。

输出
输出整个执行过程。

#!/usr/bin/python3
scale = int(input())
print("------start------")
for i in range(scale+1):#[0 , scale]
    a = '**' * i
    b = '.' * 2*(scale - i)
    c = (i/scale)*100
    print("{0:3.0f} %[{1}->{2}]".format(c,a,b))
print("------end-----")

14.因子数

题目描述
森森非常喜欢数字4和7,看到一个数字她就想快速计算出因子里面分别有几个4和7,但是智商捉急的她总是要算很久,喜欢编程的你能够帮助她吗?

输入
第一行一个整数n,表示给定的数字。

输出
两个用空格隔开的数字,分别表示给定数字的因子中4和7的个数。

#!/usr/bin/python3
n = int(input())
i=0
j=0
n1=n
n2=n
while(n1%4 == 0):
    i=i+1
    n1=n1//4
while(n2%7 == 0):
    j=j+1
    n2=n2//7
print(i,j)

15.文章检测

题目描述
给你一篇英文文章,请问你里面有多少个空格、数字字符、英文字母和其他字母。

输入
输入多行文字,以 EOF 结束
每一行表示一个文章的段落

输出
输出一行提示信息,具体格式见样例。

#!/usr/bin/python3

stopword = ''
stri = ''
try:
    for line in iter(input, stopword):
        stri += line + '\n'
except EOFError:
   pass
stri = stri[0:-1]
# do something...
int1_count = 0
str_count = 0
other_count = 0
kong_count = 0

for i in stri:

  if i.isdigit():
   int1_count += 1

  elif i.isalnum():
     str_count += 1

  elif i == ' ':
        kong_count += 1
  else:
         other_count += 1

print('%d spaces, %d numbers, %d letters, %d other characters.' %(kong_count, int1_count ,str_count,other_count))

16.eval() 函数的使用2

题目描述
森森希望多了解一下 eval() 函数,于是她给你了几个定义:
x = 12, y = 14
她希望你能计算她的表达式。
她可能需要使用 math 库来保证表达式的正常执行。

输入
输入一行字符串表示 x 和 y 的表达式

输出
输出一行一个数,表示字符串的值。

#!/usr/bin/python3
import math
x = 12
y = 14
value = eval(input())
print(value)

17.质数的和与积

题目描述
Pile 想知道一个简单的问题:
两个质数的和是S,它们的积最大是多少?

输入
一个不大于10000的正整数S,为两个质数的和。

输出
一个整数,为两个质数的最大乘积。数据保证有解。

#!/usr/bin/python3
import math

def is_prime(number):  # 判断是否为素数
    sqrt = int(math.sqrt(number))
    for j in range(2, sqrt + 1):  # 从2到number的算术平方根迭代
        if number % j == 0:  # 判断j是否为number的因数
            return 0
    return 1

n = int(input())
x = n//2
while(1):
    if is_prime(x)+is_prime(n-x) == 2:
       break
    x -=1

s = x*(n-x)

print(s)

18.寻找多数元素

题目描述
森森在学习列表的时候,发现一道经典的题目:在一个序列中寻找多数元素。
她给你了一道简化版的问题:
询问你这个序列里面出现次数最多的元素的出现次数。

输入
输入多行,一行一个数表示序列里面的每一个数。
注:使用
try:
except EOFError:
来判断什么时候结束输入

输出
输出一行,表示出现次数最多的数字的出现次数。

#!/usr/bin/python3

list=[]
while(1):
    try:
        num=int(input())
        list.append(num)
    except:
        break
dict={}#字典
for key in list:
    dict[key]=dict.get(key,0)+1 #查询字典中key是否有,有的话返回key值,没有返回0
value=max(dict.values())
print(value)

19.判断素数

题目描述
Pile 想实现一个判断素数的函数。当这个数是素数的时候输出 ‘True’ ,不是素数输出 ‘False’ 。
但是她是一个粗心的孩子,她有时候会输入一些奇怪的字符串,这个时候你需要输出 ‘invalid’。

输入
输入一行一个字符串表示 Pile 的输入。

输出
对于输入,输出一行字符串 ‘True’ ‘False’ 或者 ‘invalid’ 表示结果。

#!/usr/bin/python3
import math

def is_prime(number):  # 判断是否为素数
    sqrt = int(math.sqrt(number))
    for j in range(2, sqrt + 1):  # 从2到number的算术平方根迭代
        if number % j == 0:  # 判断j是否为number的因数
                return 'False'
    return 'True'

str = input()
int1_count = 0

for i in str:
    if i.isdigit():
        int1_count += 1

if int1_count!=len(str):
    print('invalid')
else:
    print(is_prime(int(str)))

20.所有参数的乘积

题目描述
森森想要写一个返回多个参数的乘积函数。你需要这样调用:
#!/usr/bin/python3

print(eval(input()))

输入
输入一行表示字符串,保证字符串的格式为:
multi(参数列表)
其中参数列表中每个数以逗号分隔。
保证至少有一个参数。

输出
如果输入的参数均可以参与乘法运算,输出乘积;
否则输出第一个不合法的参数,形式为 :
Invalid arg x
x 表示第 x 个参数不合法

#!/usr/bin/python3
def multi(*n):
	result = 1
	count = 0
	try:
		for i in n:
			count += 1
			i = i + 1 - 1 #判断是否为数字
			result *= i
	except TypeError:
		return ('Invalid arg %d'%count)
	return result

print(eval(input()))

21. 到底怎么样才能写好 Python?

题目描述
Pile 想知道,到底怎么样才能写好 Python?你需要输出一篇 Tim Peters 的文章来告诉 Pile。

输入
程序无输入。

输出
输出题目所要求的文章。

#!/usr/bin/python3
import this

22. CSV 文件解析

题目描述
森森喜欢将 CSV 文件打开看看,但是当她看到的文件里面都有好多逗号的时候,她觉得很不舒服。
她需要你去把一个 CSV 文件的逗号去掉并换成 \t 。
请你帮帮她吧。

输入
输入多行,表示一个 CSV 文件。

输出
输出多行,表示你的输出。注意逗号都需要换成 \t 。

#!/usr/bin/python3
import csv

#输入csv文件
fo = open("shishi.csv","w")
list=[]

stopword = ''
stri = ''
try:
    for line in iter(input, stopword):
        stri += line + '\n'
except EOFError:
   pass
stri = stri[0:-1]
list = stri.split(",")

fo.write(",".join(list)+"\n")
fo.close()

#输出csv文件
fo = open("shishi.csv","r")
ls = []
for line in fo:
    line = line.replace("\n","")
    ls = line.split(",")
    lns = ""
    for s in ls:
       lns += "{}\t".format(s)
    print(lns)
fo.close()

23. 重复元素的判定

题目描述
Pile 想知道一个集合里面有没有重复元素,请你帮帮她吧。

输入
输入第一行表示元素的个数 N。
以下 N 行,每行一个数字。

输出
如果有重复元素,请输出两行:第一行"True" ;第二行,输出一个数,表示是第几个元素重复。如果有多个重复的,请输出重复元素中编号最小的; (注:这里重复元素中编号最小的指从第2个重复的元素开始算,如1 2 2则输出第二个2所在的位置3,1 3 4 3输出4,1 3 4 5 3 3输出5,依次类推。)
否则,输出一行 “False” 表示没有元素重复。

#!/usr/bin/python3
list=[]
N = int(input())

while(N):
    try:
        num=int(input())
        list.append(num)
        N -= 1
    except:
        break

i = 0
dict={}#字典
for key in list:
    dict[key]=dict.get(key,0)+1 #查询字典中key是否有,有的话返回key值,没有返回0
    i +=1
    if dict[key] == 2:
        print("True")
        print(i)
        break

value=max(dict.values())
if value<2:
    print("False")

24. 计算集合的并

题目描述
森森喜欢求两个集合的并,请你帮她求一下吧。

输入
输入两行,每行表示一个集合,每个集合的元素(均为数字)以一个空格分隔。

输出
输出一行表示集合。

#!/usr/bin/python3
s = set(map(int,input().split()))
t = set(map(int,input().split()))
z = s|t
print(z)

25. 计算标准差

题目描述
Pile 想知道好多个数字的标准差。

输入
输入多行,每行表示一个整数

输出
输出标准差,输出格式可以参考样例。
输出的标准差要求利用科学计数法表示,且只能输出 2 位数,例如 1.2e+09。

#!/usr/bin/python3
import math

def mean(numbers):#计算平均值
    s = 0.0
    for num in numbers:
        s = s +num
    return s / len(numbers)

def dev(numbers,mean):#计算方差
    sdev = 0.0
    for num in numbers:
      sdev = sdev + (num - mean)**2
    return math.sqrt(sdev/(len(numbers)-1))

list=[]
while(1):
    try:
        num=int(input())
        list.append(num)
    except:
        break

n = list
m = mean(n)
print("dev = {:.2}.".format(dev(n,m)))

35. 圆周率的计算

题目描述
求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。
请以给定的数字作为随机数种子,获得用户输入的撒点数量,编写程序输出圆周率的值,保留小数点后6位。

输入
输入两行,第一行表示用户撒点的数量,第二行表示随机数种子。
保证撒点数量 < 3*105

输出
输出一个含有 6 位小数的值,表明本次撒点实验得到的圆周率。

#!/usr/bin/python3
from random import random, seed

DARTS = eval(input())
zhongzi = int(input())
seed(zhongzi)
hits = 0.0
for i in range(DARTS):
    x, y = random(), random()
    dist = pow(x ** 2 + y ** 2, 0.5)
    if dist <= 1.0:
        hits = hits + 1
pi = 4 * (hits/DARTS)
print("{:.6f}".format(pi))

36.凯撒密码

题目描述
凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
对于原文字符P,其密文字符C满足如下条件:C=(P+x) mod 26‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
上述是凯撒密码的加密方法,解密方法反之,即:P=(C-x) mod 26‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪
其中x为偏移量。‬
假设用户可能使用的输入包含大小写字母azAZ、空格和特殊符号,请编写一个程序,对输入字符串进行凯撒密码加密,直接输出结果,其中空格和特殊符号不用进行加密处理。

输入
输入两行,第一行是凯撒密码字符串,第二行表示偏移量。
保证偏移量 > 0,字符串长度在 100 以内。

输出
输出一行,表示最终得到的字符串。

#!/usr/bin/python3
code = list(input())
x = int(input())
string_s=''
for cr in code:
    if (ord(cr)>=65 and ord(cr)<=90):
        a = ord(cr)-65
        a = (a+x)%26
        cr = chr(65+a)
    elif (ord(cr)>= 97 and ord(cr)<= 122):
        a = ord(cr)-97
        a = (a+x)%26
        cr = chr(97+a)
    string_s+=cr
print(string_s)

37. 字符串重复判断

题目描述
从一篇文章中取出 N 个字符串,这 N 个字符串构成一个数组(列表) A,假设每个字符串只包含小写字母,返回由数组 A 中每个字符串都包含的字符构成的字符串,字符串中的字母都按照字母序排列。

输入
输入一个列表,每个字符串都是由引号括起来的。

输出
输出一个符合题意的字符串,注意这个字符串包含双引号"。

#!/usr/bin/env python3
import ast

def main():
    a = ast.literal_eval(input())
    dataset2 = []
    out = ''
    stra = ''
    for i in a[0]:
        dataset2.append(i) 
        for i1 in range(1,len(a)):
            if i not in a[i1]:
                del(dataset2[-1])
                break
            stra = a[i1].replace(i,'',1)
            a[i1] = stra
    dataset2 = sorted(dataset2)
    for i in range(len(dataset2)):
        out += str(dataset2[i])
    print('"{}"'.format(out))
if __name__ == '__main__':
    main()

38. 卡片选择

题目描述
从一篇文章中取出 N 个字符串,这 N 个字符串构成一个数组(列表) A,假设每个字符串只包含小写字母,返回由数组 A 中每个字符串都包含的字符构成的字符串,字符串中的字母都按照字母序排列。

输入
输入一个列表,每个字符串都是由引号括起来的。

输出
输出一个符合题意的字符串,注意这个字符串包含双引号"。

#!/usr/bin/python3
def maxlist(thelist):
	if 0 not in thelist:
		print(-1)
	elif 5 not in thelist:
		print(0)
	else:
		for i in range(thelist.count(5), 8, -1):
			if 5 * i % 9 == 0:
				print('5' * i + '0' * thelist.count(0))
				exit(0)
		print(0)
n = int(input())
filist = list(map(int, input().split()))
maxlist(filist)

39. Life, the Universe, and Everything

题目描述
Please rewrite small numbers from input to output. Stop processing input after reading in the number 42. All numbers at input are integers of one or two digits.
请将很小的数从输入重写到输出。当读到数字 42 时停止处理输入。所有在输入的数字都只有 1 或 2 位数。

输入
多行输入,输入满足题意。

输出
多行输出,输出满足题意要求的字符串。

#!/usr/bin/python3
lists = []
while True:
    nums = int(input())
    if(nums==42):
        for number in lists:
            print(number)
        while(1):
            nums = input()
    lists.append(nums)

40. 23333

题目描述
给定一个十进制数N。N满足:除了最高位是2,其余都是3,且3的个数大于0。求N在K进制的表示。

输入
输入一行两个整数N, K

输出
一个K进制数。

#!/usr/bin/python3
list=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
[num,K]=map(int,input().split())

outlist=[]

while(1):
    quotient=num//K
    remainder=num%K
    outlist.append(remainder)
    if(quotient==0):
        break
    num=quotient

outstr=''
for i in range(0,len(outlist)):
    outstr+=list[outlist[len(outlist)-1-i]]

print(outstr)

41. 整数数列求和

题目描述
求s=a+aa+aaa+aaaa+….的值,其中,a是0~9范围内的一个数字。输入n和a,其中n表示累加的项数。例如,当n=5,a=2时,s=2+22+222+2222+22222。

输入
输入整数n和a, 0 ≤ a ≤ 9, n ≤ 10000

输出
计算s=a+aa+aaa+aaaa+….的值并输出,其中共有n项进行累加。

#!/usr/bin/python3
n,a = input().split()
sum = 0
a = int(a)
b = a
for i in range(int(n)):
    sum += a
    a = a*10+b
print(sum)

42.星号三角形

题目描述
读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共 N 个星号。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入
一行一个整数,表示 N (N ≤ 30) 且 N 是奇数

输出
输出题目要求的三角形

#!/usr/bin/python3
n=int(input())
h = int((n+1)/2)
for i in range(h):
    str1=''
    str2=''
    j = 2*i+1  #number of stars
    k = h-i-1
    for g in range(k):
        if(k==0):
            break
        str1+=' '
    for m in range(j):
        str2+='*'
    print(str1+str2+str1)

43.手机短号

题目描述
大家都知道,手机号是一个 11 位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后 5 位,比如号码为 13512345678 的手机,对应的短号就是 645678。
现在,如果给你一个手机号码,你能找出对应的短号吗? 注意,这个手机号码可能并不是 11 位的,这个时候你需要输出 “Halation - I can’t join it!”

输入
输入数据的第一行是一个N(N <= 200),表示有N个数据,接下来的N行每一行为一个多位的手机号码,但是长度不会超过 50。

输出
输出应包括 N 行,每行包括一个对应的短号或者提示信息,输出应与输入的顺序一致。

#!/usr/bin/python3
n = int(input())
strs=[]
for i in range(n):
    ss = input()
    strs.append(ss)
for s in strs:
    if len(s)!=11:
        print("Halation - I can't join it!")
        continue
    print('6'+s[-5:])

44.aaaa + bbbb

45.6翻了

题目描述
“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!
本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

输入
输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。

输出
从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。

s = input()            
temp = ""
num = 0
flag = False
for i in s:
    if i == "6":       
        num = num + 1
        flag = True   
    else:               
        if flag:
            if num > 9:
                temp = temp + "27"
            elif num > 3:
                temp = temp + "9"
            else:
                temp = temp + "6" * num    
        temp = temp + i     
        num = 0
        flag = False
if flag:            
    if num > 9:
        temp = temp + "27"
    elif num > 3:
        temp = temp + "9"
    else:
        temp = temp + "6" * num
print(temp)

46.有理数四则运算1

题目描述
本题要求编写程序,计算 2 个有理数的和。

输入
输入两行,每行一个字符串,表示这个分数形式的有理数。其中分子和分母全是整数,分母不为 0。

输出
输出 2 个有理数的和 x/y ,注意数字需要约分到最简。

#!/usr/bin/python3
from fractions import Fraction
s1=input()
s2=input()
a=Fraction(s1)+Fraction(s2)
c = str(a.numerator)
d = str(a.denominator)
print(c+'/'+d)

47.时间复杂度1

48.时间复杂度2

49.admin 的密码问题

题目描述
为了准备 Python OJ 的账号,admin 有时需要为用户随机生成密码。
问题是总是有一些难以识别的密码,比如说1和l(L的小写字母),或者0和O(o的大写字母)。
一个解决方法是用@替换1,用%替换0,用L替换l,用o替换O。
现在你的任务是写一个程序来帮助 admin 核对账户信息并改变难以识别的密码。

输入
每个输入文件包含一组测试数据。
对于每组输入数据,包含一个正整数N(<=1000),接着是N行账户信息。
每条账户信息包含一个用户名和一个密码,都是不包括空格的不超过10个字符的字符串。

输出
对于每组输入数据,首先输出需要修改的密码总数M,接着输出N行修改后的账户信息,即用户名和对应的修改后的密码。账户必须按照和读入顺序一样的顺序输出。
如果没有账户需要修改,输出一行 “There are N accounts and no account is modified”,N为账户总数。但是,如果N为1,你必须输出 “There is 1 account and no account is modified” 。

#!/usr/bin/python3
n = int(input())
strs=[]
lists=[]
for i in range(n):
    s = input()
    strs.append(s)
rec = len(strs)
sums=0
change = 0
for s in strs:
    first = s.split(' ')[0]
    back = s.split(' ')[1]
    if '1' in back or'0' in back or 'l' in back or 'O'in back:
        back = back.replace('1','@')
        back = back.replace('0', '%')
        back = back.replace('l', 'L')
        back = back.replace('O', 'o')
        lists.append(first+' '+back)
        change+=1
    else:
        sums+=1
if sums == rec and sums == 1:
    print('There is {} account and no account is modified'.format(sums))
elif sums == rec and sums>1:
    print('There are {} accounts and no account is modified'.format(sums))
else:
    print(change)
    for s in lists:
        print(s)

50.分级

题目描述
相信大家对于英语考试结果分班这个事情不陌生吧。
假设这一次英语的满分为 m 分,每个分数对应的人数 ci (表示分数为 i 的人有 ci 个)。现在要对这些人分班。
你需要找到一个合适的k,使得大于等于k的人数在[L,R]范围内,这些人为高级班。
同样小于k的人数也需要满足[L,R]范围,这些人为初级班。
需要你找出最小满足条件的 k ,若不存在答案,请输出 0 。

输入
输入文件共三行。
第一行输入一个整数 m(1<=m<=100);
第二行输入 m 个整数 ci (0<=ci<=100);
第三行输入两个整数L,R(1<=L<=R<=10000)含义见描述

输出
输出最小满足条件的k,若不满足则输出0.

#!/usr/bin/python3
m = int(input())
c=input().split()
L,R = input().split()
L = int(L)
R = int(R)
flag=0
for k in range(m):
    big = 0
    small = 0
    for (index,sc) in enumerate(c):
        sc = int(sc)
        if index>=k:
            big+=sc
        else:
            small+=sc
    if  L<=big<=R and L<=small<=R:
        flag=1
        print(k+1)
        break
if flag==0:
    print(0)

51.统计工龄

题目描述
给定公司 N 名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。

输入
输入首先给出正整数N(<=105),即员工总人数;随后给出N个整数,即每个员工的工龄

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

#!/usr/bin/python3
n = int(input())
a = list(map(int,input().split()))
a.sort()
d = {}
for i in range(n):
    d[a[i]]=d.get(a[i],0)+1
for key in d:
    print("%d:%d" %(key,d[key]))

58.Cut Integer

题目描述
给一个偶数个位的正整数num,把它从中间分成左右两个整数a、b,请问 num 能不能被 a 和 b 的乘积整除,能的话输出 Yes ,不能的话输出 No

输入
第一行输入一个正整数 n (n ≤ 20) 表示输入组数。以下 n 行每行一个正整数,保证每个正整数的长度是偶数。

输出
输出 n 行,每行一个单词 Yes 或 No 表示答案。

#!/usr/bin/python3
num = int(input())
ss = []
for i in range(num):
    ss.append(input())
for s in ss:
    n = int(len(s)/2)
    s1 = s[:n]
    s2 = s[n:]
    s = int(s)
    s1 = int(s1)
    s2 = int(s2)
    if s1*s2==0:
        print('No')
        continue
    if s%(s1*s2)==0:
        print('Yes')
    else:
        print('No')

66.列表排序

题目描述
给你一些正整数,请你将这些数插入到列表中,并将这些数按从小到大的顺序进行排序。排完序后,我想知道这个列表的一些位置上的数字,请你告诉我这些数分别是什么。

输入
第一行一个正整数 n,表示你需要对 n 个数进行排序;
接下来 n 行一行一个整数 L[i] ,表示这个列表第 i 个整数; (0 ≤ i < n)
接下来一行,一个正整数 q 表示我的询问次数;
接下来 q 行,一行一个整数表示询问第 i 位的值是多少。 (0 ≤ i < n)

输出
输出 q 行,一行一个数表示对应询问的 L[i] 值。

#!/usr/bin/python3
n = int(input())
L=[]
for i in range(n):
    sr = int(input())
    L.append(sr)
L.sort()
q = int(input())
record=[]
for j in range(q):
    ss = int(input())
    record.append(ss)
for r in record:
    print(L[r])

69.麦森数(模拟考试题目)

题目描述
形如2P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。

任务:输入P(1000<P<300000),计算2P-1的位数和最后500位数字(用十进制高精度数表示)以及最高位数字。

输入
每组输入只包含一个整数P(1000<P<300000)。

输出
第一行:十进制高精度数2P-1的位数。

第2-11行:十进制高精度数2P-1的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)
第12行:2P-1的最高位数字。

#!/usr/bin/python3
import math
a = int(input())
b = 2**a-1
print(int(math.log10(2) * a) + 1)
a = b % (10**500)
l = []
for i in range(500):
    l.append(a % 10)
    a =a // 10
for i in range(499,-1,-1):
    print(l[i],end="")
    if i % 50 == 0:
        print("")
print(str(b)[0])

81.寻找目标3

题目描述
在实际应用过程中,使用者对特定数据感兴趣。因此需要将这些数据提取出来。那么如何提取呢?
在本题中,会给你一个 JSON 文件,你需要将这个文件中 Value 对应值在 [A, B] 的数据提取出来,来做进一步的处理。
在提取出来的过程中需要进行检验结果,请你输出这些行来展示这些结果。

输入
第一行输入一个 JSON 文件,这个文件表现为一个一行的输入,如题目所示。
第二行输入 A, B (A<B) ,表示你需要寻找的 Value 值的范围。

输出
输出多行,按照文件读入顺序进行输出符合条件 Value 值对应的 ID。

# !/usr/bin/python3
a = eval(input())
b = list(a)
c =[]
c = input().split()
min = int(c[0])
max = int(c[1])
for i in range(len(b)):
    if min <= b[i]['Value'] <= max:
        print(b[i]['ID'])

110.查验身份证

题目描述
一个合法的身份证号码由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
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

n = int(input())
iden = []
for i in range(n):
    iden.append(input())
flag = [1] * n
weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
z = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
m = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
break_temp = 0
for i in range(n):
    sum = 0
    for j in range(17):
        if iden[i][j] == 'X':
            flag[i] = 0
            break_temp = 1
            break
        else:
            sum += weight[j] * int(iden[i][j])
    if break_temp == 1:
        break_temp = 0
        continue

    Z = sum % 11
    if str(iden[i][17]) == str(m[Z]):
        flag[i] = 1
    else:
        flag[i] = 0
if 0 not in flag:
    print("All passed")
else:
    for i in range(len(flag)):
        if flag[i] == 0:
            print(iden[i])

119.列表元素个数的加权和(模拟考试题目)

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

输入
在一行中输入一个列表。

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

#!/usr/bin/python3
a = input()
b = ''.join(a)
num= 0
sum=0
for i in range(0,len(b)):
    if(b[i]=='['):
        num+=1
    elif(b[i]==']'):
        num-=1
    if b[i].isdigit() and (i!='[') and (i!=']') and b[i]!=',' and b[i+1].isdigit()==False:
        sum = sum+num
print(sum)