PYTHON-例题

列表

1-1 计算序列和

编写程序,计算序列 1 - 1/5 + 1/9 - 1/13 + ... 之和,当数据项绝对值小于eps时停止

输入格式:输入eps

输出格式:输出序列和,保留2位小数

eps=float(input())
i=1
a=1
while True:
    a=a+(-1)**i/(1+4*i)
    if 1/(1+4*i)<eps:
        break
    i=i+1
print("s = {:.2f}".format(a))

1-8 计算序列

编写程序,计算序列 1 - 3/4 + 5/7 - 7/10 + ... 前N项之和

输入格式:输入N

输出格式:保留2位小数输出序列和

N=int(input())
i=1
a=1
while i<=N-1:
    a=a+(-1)**i*(1+2*i)/(1+3*i)
    i=i+1
print("s = {:.2f}".format(a))

※1-2 计算方阵的和,创建新方阵

输入 1 个正整数 n(1≤n),再按行读入 n 阶方阵 a 和 b, 生成并输出 n 阶方阵 c,c 中的元素是 a 和 b 对应元素的和.c[i][j]=a[i][j]+b[i][j] i,j=0,1,2...n-1(1<=c[i]<=99)

输入格式:在第一行输入n;在第二行输入a方阵;在第一行输入b方阵

输出格式:输出c方阵

n=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
A=[]
B=[]
for i in range(n):
    A.append(a[i*n:(i+1)*n])
for i in range(n):
    B.append(b[i*n:(i+1)*n])

c=[]
for i in range(n):
    c.append([0]*n)
for i in range(n):
    for j in range(n):
        c[i][j]=A[i][j]+B[i][j]

for i in range(n):
    for j in range(n):
        print("{:>2}".format(c[i][j]),end=' ')
    print("")

1-3 求矩阵各行元素之和

本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

输入格式:输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间

以空格分隔。

输出格式:每行输出对应矩阵行元素之和。

m,n=map(int,input().split())
a=[]
for i in range(m):
    a.append(list(map(int,input().split())))
for i in range(m):
    print(sum(a[i]))

1-4 输出三角形字符阵列

本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。

输入格式:输入在一行中给出一个正整数n(1≤n<7)。

输出格式:输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。

n=int(input())
t=0
for i in range(n):
    for j in range(n-i):
        print(chr(ord("A")+t),end=" ")
        t=t+1
    print()

※1-5 jmu-python-凯撒密码加密算法

编写一个凯撒密码加密程序,接收用户输入的文本和密钥k,对明文中的字母a-z和字母A-Z替换为其后第k个字母。

输入格式:接收两行输入,第一行为待加密的明文,第二行为密钥k。

输出格式:输出加密后的密文。

不用table

m=input()
n=int(input())
new=''
for i in m:
    if i.isalpha()==True:
        if chr(ord(i)+n).isalpha()==False:
            if ord(i)+n>122:
                new+=chr(ord('a')+ord(i)+n-123)
            elif ord(i)+n>90 and ord(i)<=90:
                new += chr(ord('A') + ord(i) + n - 91)
        else:
            new += chr(ord(i) + n)
    else:
        new+=i
print(new)

用table

m=input()
k=int(input())
abc="abcdefghijklmnopqrstuvwxyz"
ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
table1=str.maketrans(abc,abc[k:]+abc[:k])
m1=m.translate(table1)
table2=str.maketrans(ABC,ABC[k:]+ABC[:k])
m2=m1.translate(table2)
print(m2)

※1-6 兔子繁衍问题(斐波那契数列)

通过列表来求递归

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式:输入在一行中给出一个不超过10000的正整数N。

输出格式:在一行中输出兔子总数达到N最少需要的月数。

n=int(input())
s=[1,1]
i=2
if n>=2:
    while True:
        s.append(s[i-2]+s[i-1])
        if s[i]>=n:
            break
        i+=1
    print(i+1)
elif n==1:
    print("1")

1-7求二维数组周边元素的累加和

求一个二维数组周边元素的累加和。
输入一个二维数组的行数m(m<10),列数n(n<10),二维数组的各元素值。输出周边元素之和。

输入格式:输入的第一行为矩阵的行数和列数,从第二行开始,为矩阵元素的输入。

输出格式:输出周边元素之和。

m,n=map(int,input().split())
s=[]
for i in range(m):
    s.append(0)
for i in range(m):
    s[i]=list(map(int,input().split()))
S=sum([sum(s[i]) for i in range(m)])
for i in range(1,m-1):
    S-=sum(s[i][1:-1])
print(S)

 1-8 计算序列

编写程序,计算序列 1 - 3/4 + 5/7 - 7/10 + ... 前N项之和

输入格式:输入N

输出格式:保留2位小数输出序列和

N=int(input())
i=1
a=1
while i<=N-1:
    a=a+(-1)**i*(1+2*i)/(1+3*i)
    i=i+1
print("s = {:.2f}".format(a))

1-9 列表或元组的数字元素求和

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

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

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

输入样例:[11,2,[3,7],(68,-1),"123",9],输出样例:99

def s(lst):
    total = 0
    for item in lst:
        if isinstance(item, list):  # 如果当前项是列表,则递归调用
            total += s(item)
        elif isinstance(item, tuple):  # 如果当前项是元组,则递归调用
            total += d(item)
        elif isinstance(item, str):# 如果当前项是字符串,则处理成0。。。早说啊
            total += 0
        else:
            total += item  # 否则,直接加到总和中
    return total

def d(lst):#如果输入元组
    total = 0
    for item in lst:
        if isinstance(item, list):  # 如果当前项是列表,则递归调用列表
            total += s(item)
        elif isinstance(item, tuple):  # 如果当前项是元组,则递归调用元组
            total += d(item)
        elif isinstance(item, str):# 如果当前项是字符串,则处理成0。。。早说啊
            total += 0
        else:
            total += item  # 否则,直接加到总和中
    return total

lst=eval(input())
if type(lst)==list:
    #print(lst)
    print(s(lst))
else:
    print(d(lst))

1-10 求分数序列前N项和

计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。

说明:该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

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

输出格式:在一行中输出求得的和的值,精确到小数点后两位。(题目保证计算结果不超过双精度范围。)

#方法一:列表+1次循环
n=int(input())
z=[2,3]
m=[1,2]
s=3.5
for i in range(2,n):
    z.append(z[i-2]+z[i-1])
    m.append(z[i-1])
    s+=z[i]/m[i]
print("{:.2f}".format(s))

**1-11 间隔杀人求幸存者

n个人围成一圈,隔m个人杀掉一个人,求最后幸存的是排第几个的?

输入格式:在一行中输入n m

输出格式:幸存者编号

m,n=map(int,input().split())
l=[]
for i in range(n):
    l.append(i+1)
index=0
while True:
    del l[index]
    if len(l)==1:
        break
    else:
        index=(index+m-1)%len(l)
print(l)

**1-12 求子集

输入一个集合,求集合的子集

def sset(Set):
    res = [[]]
    for num in Set: 
        res += [ i + [num] for i in res]
    return res
print(sset(list(eval(input())))

1'-13 复制

输出是什么?

list1=[1,43]
list2=list1
list1[0]=22
print(list2[0])

答案:22 (list2并未创建一个新对象,而是指向list1,所以list1还是list2发生更改,他们都会更改)

1‘-14 列表元素相加的限制

下面程序的运行结果是什么?

b=[1,2,3]
b[2]=b
s = 0
for row in b:
    if type(row)==list:
        for elem in row:
            s += elem
    else:
        s+=row
print(s)

答案:报错 

字典

**※2-1 图的字典表示

通过s[i][j]的索引方式避免多次.values()

捕获.JPG

有向图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。比如上图0点表示:{'O':{'A':2,'B':5,'C':4}}。用eval函数处理输入,eval函数具体用法见第六章内置函数。

输入格式:第一行表示输入的行数,下面每行输入表示一个顶点和该顶点相连的边及长度的字符串

输出格式:在一行中输出顶点数,边数,边的总长度

a=int(input())
s={}
v=0
c=0
for i in range(a):
    s[i]=eval(input())
for i in s:
    for j in s[i]:
        v=v+sum(list(s[i][j].values()))
        c=c+len(s[i][j])
print(len(s),c,v)

2-2 四则运算(用字典实现)

四则运算(用字典实现),比较c语言的switch语句。

输入格式:在一行中输入一个数字,在一行中输入一个四帜运算符(+,-,*,/),在一行中输入一个数字

输出格式:在一行中输出运算结果(小数保留2位)

a=int(input())
b=input()
c=int(input())
if b=="/" and c==0:
    print("divided by zero")
else:
    s = {"+": a + c, "-": a - c, "*": a * c, "/": a / c}
    print("{:.2f}".format(s[b]))

2-3 统计字符出现次数

本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

输入格式:输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。

输出格式:在一行中输出给定字符在给定字符串中出现的次数。

m=input()
n=input()
d={}
for i in m:
    if i not in d:
        d[i]=1
    else:
        d[i]+=1
if d.get(n)==None:
    d[n]=0
print(d[n])

2-4 统计工龄

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

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

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

a = int(input())
b = list(map(int, input().split()))
s = {}

for i in range(51):
    s[i] = b.count(i)

for i in s:
    if s[i]!=0:
        print(str(i) + ":" + str(s[i]))

※2-5 求矩阵鞍点的个数

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。

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

输出格式:鞍点的个数

n=int(input())
d={}
c={}
b=0
for i in range(n):
    d[i] = list(map(int, input().split()))
for i in d.keys():
    for j in d[i]:
        for k in range(len(d[i])):
            if d[i][k]==max(d[i]):
                c["d[{:}][{:}]".format(i,k)]=d[i][k]
for k in range(n):
    min=d[0][k]
    for i in d.keys():
        if d[i][k]<min:
            min=d[i][k]
    for i in d.keys():
        if d[i][k]==min:
            if "d[{:}][{:}]".format(i,k) in c.keys():
                b+=1
print(b)

2-6 两数之和

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

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

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

m=list(map(int,input().split(',')))
n=int(input())
found=0
for i in range(len(m)):
    for j in range(len(m)):
        if i<j:
            if m[i]+m[j]==n:
                print(i,j)
                found=1
    if found==1:
        break
if found==0:
    print("no answer")

※2-7 字典合并

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

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

输出格式:在一行中输出合并的字典,输出按字典序。"1" 的 ASCII 码为 49,大于 1,排序时 1 在前,"1" 在后。其它的字符同理。

m=eval(input())
n=eval(input())
f={}
a=[]
for i in m.keys():
    for j in n.keys():
        if i==j:
            f[i]=m[i]+n[j]
c={**m,**n}
d={**c,**f}

for i in d.keys():
    a.append(i)
#排序"1"和'1'
f={}
for i in a:
    if type(i)==int:
        f[i]=i
    if type(i)==str:
        f[i]=ord(i)
b=dict(sorted(f.items(), key=lambda x: x[1]))
e=str({**b,**d})
#统一格式:引号全为"",输出间无空格
g=e.replace("'",'"')
g=g.replace(" ","")
print(g)
#第二次写的简化版
a=eval(input())
b=eval(input())
for i in a:
    for j in b:
        if i==j:
            b[j]=a[i]+b[j]
c={**a,**b}
c=dict(sorted(c.items(),key=lambda x:x[0] if type(x[0])== int else ord(str(x[0])),reverse=False))
print(str(c).replace(' ','').replace("'",'"'))

2-8 显示数字出现次数

输入一个十进制正整数,转换成16进制数。再输入一个数(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),统计这个数出现的次数。

输入格式:一行输入十进制正整数。另一行输入要统计的数。

输出格式:要统计的数出现的次数。

m=int(input())
b=hex(m)
c=list(b)[3:]
d=input()
print(c.count(d))

函数 

#计算最长递增子序列
#下列程序运行的结果是:7
def basic_lis(seq):
    l=[1]*len(seq)
    for cur ,val in enumerate(seq):           #enumerate返回元素的"索引和值"
        for pre in range(cur):
            if seq[pre]<val:
                l[cur]=max(l[cur],1+l[pre])
    return max(l)

L=[49, 64, 17, 100, 86, 66, 78, 68, 87, 96, 19, 99, 35]
print(basic_lis(L))
#下列程序运行的结果是:19
import math
def factors(x):
    y=int(math.sqrt(x))
    for i in range(2,y+1):
        if (x%i ==0):
            factors(x//i)
            break
        else:
            print(x,end=' ')
        return
factors(38)
#下列程序输出第四行的内容是:231
def perm(choice,selected=[]):
    if len(choice)==1:
        print("".join(selected+choice))
    else:
        for i in range(len(choice)):
            t=choice[i]
            choice.remove(t)
            selected.append(t)
            perm(choice,selected)
            choice.insert(i,t)
            selected.pop()

first=["1","2","3"]
perm(first,selected=[])

分析如右: 

字符串

3-1 规则图形构建和输出

某游戏公司拟开发一款益智类小游戏,请你帮忙编写程序实现指定的界面。

输入格式:输入在一行中给出1个正整数(范围在[1,10])

输出格式:输出对应的规则图形

n=int(input())
t=2*n-1
print("*"*t)
for i in range(n-1):
    print("{:*^{:}}".format(' '*(2*i+1),t))
for i in range(n-1):
    print("{:*^{:}}".format(' '*(t-2*i-4),t))

#输入3
#输出
*****
** **
*   *
** **
*****

3-2 从句子中输出特定类型字符

输入一个句子,输出句子中的所有数字(如2024)和数字的个数(如2024和2,共2个)

a="In 2020,Father is 56 years old."
b=list(a)
t=0
i=0
while i<len(b):
    if b[i].isnumeric()==True:
        for j in range(i,len(b)):
            if b[j].isnumeric()==False:
                print(b[i:j])
                t+=1
                i=j
                break
    else:
        i+=1
print(t)

循环结构

4-1斐波那契数列检索

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m<n≤100000)之间的所有Fibonacci数的数目。
所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,fib(0)=fib(1)=1。其中函数fib(n)须返回第n项Fibonacci数;函数PrintFN(m,n)用列表返回[m, n]中的所有Fibonacci数。

函数接口:

fib(n),返回fib(n)的值

PrintFN(m,n),用列表返回[m, n]中的所有Fibonacci数。

def fib(n):
    if n==1 or n==0:
        return 1
    else:
        return fib(n-1)+fib(n-2)

def PrintFN(m,n):
    d=[]
    for i in range(n):
        if m<=fib(i)<=n:
            d.append(fib(i))
        elif fib(i)>n:#及时break避免超时
            break
    return d

# m,n,i=input().split()
# n=int(n)
# m=int(m)
# i=int(i)
# b=fib(i)
# print("fib({0}) = {1}".format(i,b))
# a=PrintFN(m,n)
# print(len(a))

4-2使用函数求余弦函数的近似值

本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps(绝对值小于eps的项不要加):

函数接口:funcos(eps,x),其中用户传入的参数为eps和x;函数funcos应返回用给定公式计算出来,保留小数4位。

def f(n,x):
    if n==1:
        return 1
    else:
        return f(n-1,x)*(-1)*x**2/(2*n-3)/(2*n-2)

def funcos(eps,x):
    n=1
    s=0
    while abs(f(n,x))>=eps:
        s+=f(n,x)
        n+=1
        # print("f({:},{:})=".format(n,x)+"{:.4f}".format(f(n,x)))
    return s

# eps=0.0001
# x=-3.1
# eps,x=float(eps),float(x)
# value=funcos(eps,x )
# print("cos({0}) = {1:.4f}".format(x,value))

逻辑推断

5.1 反序二进制

输入一个十进制正整数,将它对应的二进制数的各位反序,形成新的十进制数输出。如有多组答案可选,则选答案字符序在先的那组答案。
如:13-->1101-->1011-->11
如:10-->1010-->0101-->5

x=eval(input())
y=0
while(___(1)___):   
  t=x%2
   ___(2)___    
   ___(3)___    
print(y)

答案:AHD

5.2 10进制转16进制

decimal = eval(input("Enter an integer: "))
hexString = ""
value = ___(1)___
while value != 0:
    single = value % 16
    if single == 15: 
        hexString = "F" + hexString
    elif single == 14:
        hexString = "E" + hexString
    elif single == 13:
        hexString = "D" + hexString
    elif single == 12:
        hexString = "C" + hexString
    elif single == 11:
        hexString = "B" + hexString
    elif single == 10:
        hexString = "A" + hexString
    else:
        hexString = ___(2)___+ hexString
    value = ___(3)___
print(str(decimal) + "'s hex representation is " + hexString)

答案:BGE 

m=[2,1,0,5,3,5,7,4]  
def naive(M,A=None):  
    if A is None:  
        A=set(range(len(M)))  
    if len(A)==1:return(A)  
    B=set(M[i] for i in A)  
    C=A-B  
    if C:  
        A.remove(C.pop())  
    return naive(M,A)  
    return A  
print(sum(list(naive(m))))

输出值为:8 

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值