python编程题自测

1、计算 N!

def mian(n):
    for i in range(1,n):
        n*=i
    return n

2.计算并返回任意多个整数的和(不能用for循环)·······

def mian(*x):
    return sum(x)

3.返回item在lst中第一次的位置

def main(lst,item):
    i=0
    for num in lst:
        if num==item:
            return i
        i+=1
    return '不存在'

4.返回列表包含大于或等于所有整数平均值的整数

def main(lst):
    avg=sum(lst)/len(lst)
    lst2=[]
    for i in lst:
        if i>=avg:
            lst2.append(i)
    return lst2

5.返回一个元组,第一个元素为p整除q的商,第二个元素为p对q的余数

def main(p,q):
    return (int(p/q),p-q*int(p/q))

6.返回正整数num各位数字之和

def main(num):
    s=str(num)
    ls=list(map(int,s))
    return sum(ls)

7.列表去重

def main(lst):
    return list({}.fromkeys(lst).keys()) 

8.列表字符串转化为小写

def main(lst):
   for in range(len(lst)):
       lst[i]=lst[i].lower()
   return lst

9.列表字符串排序

def main(lst):
    lst.sort(key=lambda ele:len(ele),reverse=True)
    return lst

10.计算20,30,40的阶乘

from functools import reduce
from operator import mul
def main(n):
    return reduce(mul,range(1,n+1))
print(main(20))
print(main(30))
print(main(40))

11.向量的内积

def main(vector1,vector2):
    return sum(list(map(lambda num1,num2:num1*num2,vector1,vector2)))

12.最长字符串

def main(lst):
    return max(lst,key=len)

13.去除列表中的0

def main(lst):
    return list(filter(lambda x:x!=0,lst))

14.查找列表绝对值最大

def main(lst):
    Max=0
    for i in range(len(lst)):
        if abs(lst[Max]<abs(lst[i])):
            Max=i
    return lst[Max]

15.删除偶数

def main(lst):
    return [i for i in lst if i%2]

16.字符串填充

def main(s):
    return s.center(20."#")

17.字符串数字汉字转换

def main(s):
    nums=['零','一','二','三','四','五','六','七','八','九']
    s2=''
    for i in range(len(s)):
        if s[i].isdigit():
            num=int(s[i])
            s2+=nums[num]
            continue
        s2+=s[i]
    return s2

18.表中重复元素

def main(lst):
# 数据很水头两行可加可不加
    if len(lst)==1:
        return 1
    set_lst=set(lst)
    if len(set_lst)==len(lst):
        return 1
    elif len(set_lst)==1:
        return 0
    else:
        return 2

19.回文

import re
def main(s):
    s=re.sub('^A-Za-z','',s)
    return s[::-1]==s

20.接受任意字符串s,要求返回最多的前三个字符

from collections import Counter
def main(s):
    c=Counter(s)
    c=Counter(dict(counts.most_common(3)))
    return list(counts)

21.最大素数

def isPrime(num):
    for i in range(2,n-1):
        if num%i==0:
            return False
    return True
def main(n):
    i=n
    while i!=0
        if isPrime(i):
            return i
        i-=1
    return i

22.组合数C(n,i)

def main(n,i):
    nums1,num2=1,1
    i=min(i,n-i)
    for x in range(1,i+1):
        nums1 *=x
        nums2 *=x+n-i
    return nums2//nums1

23.用map()计算a+aa+aaa

def main(n,a):
    l=list(range(1,n+1)return sum(list(map(lambda x:int(str(a)*x),l)))

24.读取文件用逗号分隔开的整数*10

def main():
    f=open('data24.txt')
    s=f.read().split(',')
    return list(map(lambda x:int(x)*10,s))
print(main())

25.集合的并集

def main(lst):
    l=set()
    for i in lst:
        l=l|i
    return l

26.计算sin()

from math import sin radians

def main(lst):
    return list(map(lambda x:sin(radians(x)),lst))

27.时间间隔

from datetime import date
def main(year1,month1,day1,year2,month2,day2)
    return abs((date(year1,month1,day1)-date(year2,month2,day2)).days)

28.闰年

def main(year):
    if year%400==0 or (year%4==0 and year%100 !=0):
        return 'yes'
    return 'no'

29.max(func(x))

def main(func,lst):
    return max(list(map(func,lst)))

30.截尾平均数,保留一位小数

def main(tup):
    return round((sum(tup)-max(tup)-min(tup))/(len(tup)-2),1)

31.斐波那契

def main(n):
    a,b=1,1
    if(n==1):
        return 1
    sum=1
    for i in range(n-1):
        t=a
        a=b
        b+=t
        sum+=a
    return sum

32.字符串*n+传参默认值设置

def main(s,n=3):
    return s*n

33.循环左移

def main(s, n):
    return s[n:]+s[0:n]

34.模拟整数类型操作

class Number:
    def __init__(self, value):
        self.value = value
    def __add__(self, another):
       return self.value + another.value
    def __str__(self):
        return str(self.value)
def main(x, y):
    return x+y

35.模拟整数/实数部分操作

class Number:
    def __init__(self, value):
        if type(value) != int and type(value) != float:
            self.__value = 0
        else:
            self.__value = value
    def __set(self, value):
        if type(value) == int or type(value) == float:
            self.__value = value
    def __get(self):
        return self.__value
    value = property(__get, __set)
def main(x, y):
    obj = Number(x)
    obj.value = y
    return (type(obj), obj.value)

36.并联

def main(*para):
    sum=0
    for i in para:
        sum+=1/i
    return round(1/sum,1)

37.黑洞数

def main(n):
    n=str(n)
    max=""
    min=""
    for it in sorted(n,reverse = True):
        max +=str(it)
    for it in sorted(n):
        min+=str(it)
    if int (max) -int(min)==int(n):
        return True
    else:
       return False

38.水仙花数

def main(n):
    n_str=str(n)
    sum=0
    l=len(n_str)
    for i in n_str:
        sum+=int(i)**l
    if sum==n:
        return True
    else:
        return False

39.列表绝对值之和

def main(lst):
    return sum(list(map(abs,lst)))

40.返回不同编码的字符串,如果不是字符串返回‘参数必须是字符串’

def main(s):
    try:
        return(s.encode("UTF-8",s.encode("GBK"))
    except:
        return '参数必须是字符串'

41.字符串包含

def main(s1,s2,*s3)
    if s2 not in s1:
        return False
    for s in s3:
        if s not in s1:
            return False
    return True

42.计算圆的面积

from math import pi as PI
def main(r):
    if isinstance(r,(int)) and r>0:
        return round(PI*r*r,2)
    else:
        return '参数必须是大于0的整数或实数'

43.正整数周围相接能够组成的最大的数

from itertools import permutations
def main(lst):
    max=0
    lst=list(map(str,lst))
    for i in permutations(lst):
        a=''.join(i)
        re=eval(a)
        if re>max:
            max=re
    return max 

44.n*n棋盘放米

def main(n):
    return 2**(n*n)-1

45.返回变成小写之后最大的字符串

def main(lst):
    try:
        L=[x.lower() for x in lst if isinstance(x,str)]
        return lst[L.index(max(L))]
    except:
        return '数据格式不正确'

46.众数

def main(lst):
    list_set=set(lst)
    frequency_dict={} 
    for i in list_set:
        frequency_dict[i]=lst.count(i)
    max_frequency=max(frequency_dict.values())
    for key,value in frequency_dict.items():
        if value==max_frequency:
            m=key
    return m

47.余弦定理求C

from math import cos,radians
def main(a,b,theta):
    try:
        if a<=0 or b<=0:
            return '数据不对'
        return round((a*a+b*b-2*a*b*cos(radians(theta)))**0.5,1)
    except:
        return '数据不对'

48.列表差

def main(vector1,vector2):
    try:
        if len(vector1)!=len(vector2):
            return'数据不对'
        return sum(list(map(lambda x,y:abs(x-y),vector1,vector2)))
    except:
        return '数据不对'

49.成绩字母转换

def main(score):
    try:
        if score>=90 and score<=100:
            return 'A'
        elif score>=80 and score <90:
            return 'B'
        elif score>=70 and score <80:
            return 'C'
        elif score>=60 and score <70:
            return 'D'
        elif score>=0 and score <60:
            return 'F'
        else:
            return '数据不对'
    except:
        return '数据不对'

50.小于n的最大斐波那契数

def main(n):
    a,b=1,1
    while b<n:
        t=a
        a=b
        b=t+b
    return a

51.鸡兔同笼

def main(n,m):
    y=(m-2*n)/2
    x=(4*n-m)/2
    if y-int(y) or x-int(x) or x<0 or y<0:
        return '数据不对'
    return int(x),int(y)

52.列表中最大值的位置

def main(lst):
    m= max(lst)
    l=[]
    for i in range(len(lst)):
        if lst[i]==m:
            l.append(i)
    return l

53.文件后+_new

from os.path import splitext
import os
def main(s):
    name,bac=os.path.splitext(s)
    name+='_new'
    return name+bac

54.列表元素相加等于10

from itertools import combinations
def main(lst):
    l=[]
    for i in combinations(lst,3):
        if i[0]+i[1]+i[2]==10:
            l.append(i)
    return l

55.返回只出现一次的字符

def main(s):
    s1=''
    for i in s:
        if s.count(i)==1:
            s1+=i
    return s1

56.列表数据重复

def main(lst):
    set_lst=set(lst)
    if len(set_lst)==len(lst):
        return 1
    elif len(set_lst)==1:
        return 0
    else:
        return 2

57.去除多余空格

import re
def main(s):
    s=s.strip()
    s=re.sub(' +',' ',s)
    return s

58返回最长的数字字符串

from re import findall
import re
def main(s):
    try:
        nums=re.findall(r'\d+',s)
        nums.sort(key=lambda num:len(num),reverse=True)
        return nums[0]
    except:
        return '没有数字'

59.列表最大公约数

from math import gcd
from funcrools import reduce

def main(lst):
    return reduce(gcd,lst)

60.查找docx文件关键字

from docx import Document
def main():
    dt=Document('data60.docx')
    for i in range(len(dt.paragraphs)):
        if  '山东' and '烟台' in dt.paragraphs[i].text:
            return dt.paragraphs[i].text
print(main())

61.docx整数相加

 from docx import Document
 
 def  main():
     dt=Document('data60.docx')
     sum=0
     table=dt.tables
     table=table[0]
     for i in range(0,len(table.rows)):
         for j in range(0,len(table.row_cells(i)):
             sum+=int(table.cell(i,j).text)
     return sum
 print(main())

62.千分位的逗号

 def main(s):
     try:
         l=len(s)
         if l<=3:
             return int(s)
         i=l-4
         while i>=0:
         if s[i]!=',':
             return '数据错误'
         i-=4
         s=s.replace(',','')
         return int(s)
     execpt:
         return '数据错误’

63.去除前导0

 def main(s):
     a=''
     s1=''
     for i in s:
         if str.isdigit(i):
             a+=i
         else:
             s1+=str(int(a))
             s1+=i
             a='' 
     return s1+str(int(a))

64.日期补0

 def main(s):
     s1=''
     s1+=s[0:5]
     a=''
     for i in range(5,len(s)):
         if s[i].isdigit():
             a+=s[i]
         else:
             s1+=a.rjust(2,'0')
             s1+=s[i]
             a=''
     return s1+a.rjust(2,'0')

65.插入千分符

def main(num):
    s=str(num)
    l=len(s)
    if l<=3:
        return str(num)
    i=l%3
    s1=''
    if i:
        s1=s[0:i]
        s1+=','
    while i<l:
        s1+=s[i:i+3]
        s1+=','
        i+=3
    return s1.rstrip(',')

66.整数拆分

def main(num):
    try:
        num=int(num)
        s=str(num)
        s1=''
        for i in s:
            s1+=i
            s1+=','
        return s1.rstrip(',')
    except:
        return '数据错误'

67.>=start第num个素数

def main(start,num):
    while num>0:
        if isPrime(start):
            num-=1
        start+=1
    return start-1 

68.丑数

def main(num):
    while num % 2 == 0:
        num = num / 2
    while num % 3 == 0:
        num = num / 3
    while num % 5 == 0:
        num = num / 5
    if num == 1:
        return True
    else:
        return False

69.正整数按各位数字相加之和大小排序的列表

def f(num):
    s=0
    while num:
        s+=num%10
        num/=10
    return s
def main(lst):
    lst.sort(key=f)
    return lst

70.奇数位,偶数位之和

def main(lst):
    odd=sum(lst[::2])
    even=sum(lst[1::2])
    return (even,odd)

71.判断列表中是否为实数

def main(lst):
    try:
        l=list(map(lambda x:int(x),lst))
        return True
    except:
        return False

72.i>8&i%2==0

def main(lst):
    try:
        l=[]
        for i in lst:
            if isinstance(i,int):
                if i>8 and i%2==0:
                    l.append(i)
            else:
                return '数据不符合要求'
    except:
        return '数据不符合要求'

73.字符串比对

def main(s1,s2):
    num=0
    for i,j in zip(s1,s2):
        if i==j:
        num+=1
    return num

74.字符串拼接

def main(s1,s2):
    m=min(len(s1),len(s2))
    for i in range(m,0,-1):
        if s1[-i:]==s2[:i]:
            return s1+s2[i:]
    return s1+s2

75.多个数的最大公约数

from math import gcd
from functools import reduce
def main(*integers):
    try:
        l=len(integers)
        if l==0: return '必须提供至少一个整数'
        return reduce(gcd,integers)
    except:
        return '必须都是整数'

76.二进制连续的0

import math
def main(n):
    return int(math.log2(n&-n))

77.小猴吃桃

def f(n):
    if n==1:
        return 1
    else:
        return f(n-1)*2+2
def main(n):
    return f(n)

78.计算颜色()

from operator import itemgetter
from docx import Document
from docx.shared import RGBColor

def main():
    word=Document('data78.docx')
    colors={}
    for p in word.paragraphs:
        for r in p.runs:
            color=r.font.color.rgb
            if color not in (RGBColor(0,0,0),None):
                colors[color]=colors.get(color,0)+1
    colors=sorted(colors.items(),key=itemgetter(1),reverse=True)
    return tuple(map(str,map(itemgetter(0),colors[:3])))
print(main())

79.连乘

from operator import mul
from functools import reduce
def main(lst):
    return reduce(mul,lst)

80.|a-b|

from operator import sub
def main(a,b):
    return sum(map(abs,map(sub,a,b)))

81.a//b,a%b

def main(a,b):
    return(a//b,a%b)

82.字符串s2在s1中的个数

def main(s1,s2):
    l=list(set(list(s2)))
    sum=0
    for i in l:
        sum+=s1.count(i)
    return sum

83,返回闭区间所有整数之和

def main(start,end)
    return sum(range(start,end),end)

84.返回绝对值的最大整数

def main(data):
    return max(data,key=abs)

85.中位数

def main(data):
    data_local=data[:]
    data_local=sorted(data_local)
    return data_local[len(data_local)//2]

86.素数

def main(num):
    for n in range(2,num+1)[::-1]:
        f=1
        for i in range(2,int(n**0.5)+1):
            if n%i==0:
                f=0
                break
        if f:
            return n

87.全局变量修改

x=3
def main(num):
    global x
    x=num
    return globals()['x']

88.返回圆的面积

from math import pi as PI
def main(r):
    if isinstance(r,(int,float)) and r>0:
        return round(PI*r*r,3)
    else:
        return '半径必须为大于0的整数或实数'

89.返回对应位置字符相同的数量

def main(origin, userInput):
    return sum(map(lambda oc,uc:oc==uc,origin,userInput))

90.约瑟夫环(因为不会用cycle,直接按思路来过了)

def main(lst,k):
    d=k-1
    for i in range(len(lst)-1):
        del lst[d]
        d=(d+k-1)%len(lst)
    return lst[0]

91.替换字符

def main(s):
   s=s.replace('a','A')
   s=s.replace('e','E')
   s=s.replace('i','I')
   s=s.replace('u','U')
   return s

92.计算字符串左边空格

def main(s):
    i=0
    while s[i]=='' and i<len(s):
        i+=1
    return i

93.计算第几天

def is_a_leap_year(year):
    if year % 100 != 0 and year % 4  == 0:
        return True
    if year % 100 == 0 and year %  400 ==0:
        return True
    return False
def main(year,month,day):
    leap_year =  is_a_leap_year(year)
    if leap_year:
        day_list =  [0,31,29,31,30,31,30,31,31,30,31,30,31]
    else:
        day_list =  [0,31,28,31,30,31,30,31,31,30,31,30,31]
    for i in  range(month):
        day+= day_list[i]
    return day

94.判断升序

def main(data):
    pre=0
    for i in range(1,len(data)):
        if data[pre]>data[i]:
            return False
        pre+=1
    return True

95.拼音排序

from pypinyin import pinyin

def main(s):
    s=sorted(s,key=lambda c:pinyin(c))
    ans=''
    for i in s:
        ans+=i
    return ans
  

96.密码判断

def main(pwd):
    l=len(pwd)
    if l<6:
        return 'weak'
    check = [0,0,0,0]
    for char in pwd:  
        if char.islower():
            check[0] = 1
        if char.isupper():
            check[1] = 1
        if char.isdigit():
            check[2] = 1
        if not (char.isalpha()|char.isdigit()|char.isspace()):
            check[3] = 1
    if check_num==1:
        return 'weak'
    elif check_num==2:
        return 'below_middle'
    elif check_num==3:
        return above_middle'
    else:
        return 'strong'

97.大小写判断

def main(s):
    a=0
    b=0
    for ch in s:
        if ch.isupper():
            a+=1
        if ch.islower():
            b+=1
    return (a,b)

98.多项式计算

def main(factors,x)
    coeffs=factors
    n = len(coeffs)
    exponents = range(n-1, -1, -1)  
    powers_of_x = [x**i for i in exponents] 
    return reduce(lambda acc, pair: acc + pair[0]*pair[1], zip(coeffs, powers_of_x), 0)

99.上台阶

def main(n):
    if n<3:
        return n
    if n==3:
        return 4
    x,y,z=1,2,4
    for i in range(4,n+1):
        t=x+y+z
        z=y
        y=z
        z=t
   return z

100.文件最长一行

def main():
    with open("data100.txt") as file:
        l=file.readlines()
    return max(list(map(lambda s:len(s),l)))
print(main())

你可能感兴趣的:(python,算法,数据结构)