浙大版《Python 程序设计》题目集 编程题

第1章-1 从键盘输入两个数,求它们的和并输出

a=int(input())
b=int(input())
print(a+b)

第1章-2 从键盘输入三个数到a,b,c中,按公式值输出

a,b,c=map(int,input().split())
print(b*b-4*a*c)

第1章-3 输出“Python语言简单易学”

s="Python语言简单易学"  
print(s.encode("utf-8"))

第2章-1 计算 11+12+13+…+m

m=int(input())
print('sum =',sum([i for i in range(11,m+1)]))

第2章-2 计算分段函数[1]

x=float(input())
if x==0.0:
    print('f(0.0) = 0.0')
else:
    print('f({0:.1f}) = {1:.1f}'.format(x,1/x))

第2章-3 阶梯电价

x=float(input())
if x<0:
    print('Invalid Value!')
elif x>=0 and x<=50:
    print('cost = {0:.2f}'.format(0.53*x))
else:
    print('cost = {0:.2f}'.format(0.53*50+0.58*(x-50)))

第2章-4 特殊a串数列求和

a,b=input().split()
b=int(b)
s=[int(j) for j in [a*i for i in range(1,b+1)]]
print('s =',sum(s))

第2章-5 求奇数分之一序列前N项和

n=int(input())
sum=sum([1/i for i in range(1,2*n,2)])
print('sum = {0:.6f}'.format(sum))

第2章-6 求交错序列前N项和

n=int(input())
s=[i/(2*i-1) if i%2==1 else -i/(2*i-1) for i in range(1,n+1)]
print('{0:.3f}'.format(sum(s)))

第2章-7 产生每位数字相同的n位数

'''本题输入格式不规范,需要处理输入'''
a,b=input().split(',')
a=a.strip()
b=b.strip()
b=int(b)
print(int(a*b))

第2章-8 转换函数使用

a,b=input().split(',')
b=int(b)
print(int(a,b))

第2章-9 比较大小

print(*sorted(map(int,input().split())),sep='->')

第2章-10 输出华氏-摄氏温度转换表

lower,upper=map(int,input().split())
if lower>upper:
    print('Invalid.')
else:
    print('fahr celsius')
    for i in range(lower,upper+1,2):
        print('{0:d}{1:>6.1f}'.format(i,5*(i-32)/9))

第2章-11 求平方与倒数序列的部分和

m,n=map(int,input().split())
sum=sum([i*i+1/i for i in range(m,n+1)])
print('sum = {0:.6f}'.format(sum))

第2章-12 输出三角形面积和周长

from math import sqrt
a,b,c=map(int,input().split())
if a+b<=c or a+c<=b or b+c<=a:
    print('These sides do not correspond to a valid triangle')
else:
    s=(a+b+c)/2
    area=sqrt(s*(s-a)*(s-b)*(s-c))
    perimeter=a+b+c
    print('area = {0:.2f}; perimeter = {1:.2f}'.format(area,perimeter))

第2章-13 分段计算居民水费

x=int(input())
y=4*x/3 if x<=15 else 2.5*x-17.5
print('{0:.2f}'.format(y))

第2章-14 求整数段和

a,b=map(int,input().split())
sum=0
for i in range(a,b+1):
    sum+=i
    print('{0:>5}'.format(i),end='')
    if (i-a+1)%5==0:
        print()
if (i-a+1)%5==0:
    print('Sum =',sum)
else:
    print('\nSum =',sum)

第3章-1 大于身高的平均值

l=list(map(int,input().split()))
average=sum(l)/len(l)
for i in l:
    if i>average:
        print(i,end=' ')

第3章-2 查验身份证

l=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]	#权重表
zm=['1','0','X','9','8','7','6','5','4','3','2']	#模值验证码表
n=int(input())
cnt=0
for i in range(n):
    id=input()
    sum=0
    for i in range(17):
        if id[i].isdigit():
            sum+=l[i]*int(id[i])
        else:
            print(id)
            break
    if i==16:	#说明身份证号前17位都是数字
        z=sum%11
        if zm[z]!=id[-1]:
            print(id)
        else:
            cnt+=1
if cnt==n:
    print('All passed')

第3章-3 输出字母在字符串中位置索引

s=input()
char1,char2=input().split()
for i in range(len(s)-1,-1,-1):
    if s[i]==char1 or s[i]==char2:
        print(i,s[i])

第3章-4 查找指定字符

char=input()
s=input()
for i in range(len(s)-1,-1,-1):
    if s[i]==char:
        print('index =',i)
        break
else:
    print('Not Found')

第3章-5 字符转换

s=input()
print(int(''.join([i for i in s if i.isdigit()])))

第3章-6 求整数序列中出现次数最多的数

l=list(map(int,input().split()))
n=l.pop(0)
cnt={}
for i in l:
    cnt[i]=cnt.get(i,0)+1
for key,value in cnt.items():
    if value==max(cnt.values()):
        print(key,value)

第3章-7 求最大值及其下标

n=int(input())
l=list(map(int,input().split()))
print(max(l),l.index(max(l)))

第3章-8 字符串逆序

s=input()
print(s[::-1])

第3章-9 字符串转换成十进制整数

s=input()
sum=0
for i in s:
    if i.isdigit():
        sum=sum*16+ord(i)-48
    if 'a'<=i<='f':
        sum=sum*16+ord(i)-87
    if 'A'<=i<='F':
        sum=sum*16+ord(i)-55
for j in range(len(s)):
    if s[j].isdigit() or 'a'<=s[j]<='f' or 'A'<=s[j]<='F':
        break
if '-' in s and j>s.find('-'):
    sum=-sum
print(sum)

第3章-10 统计大写辅音字母

l=['A','E','I','O','U']
s=input()
cnt=0
for i in s:
    if i not in l and i.isupper():
        cnt+=1
print(cnt)

第3章-11 字符串排序

print('After sorted:')
print(*sorted(list(input().split())),sep='\n')

第3章-12 求整数的位数及各位数字之和

num=input()
s=[int(i) for i in num]
print(len(num),sum(s))

第3章-13 字符串替换

s=input()
l=''
for i in s:
    if i.isupper():
        i=chr(90-(ord(i)-65))   #'Z'减去字母到'A'的距离
    l+=i
print(l)

第3章-14 字符串字母大小写转换

s=input()
s=s[:-1]
for i in s:
    if i.isupper():
        print(i.lower(),sep='',end='')
    elif i.islower():
        print(i.upper(),sep='',end='')    
    else:
        print(i,sep='',end='')

第3章-15 统计一行文本的单词个数

s=list(input().split())
print(len(s))

第3章-16 删除重复字符

l=input()
for i in sorted(list(set([i for i in l]))):
    print(i,sep='',end='')

第3章-17 删除字符

s=input().strip()
c=input().strip()
result=[i for i in s if i!=c.lower() and i!=c.upper()]
print('result:',''.join(result))

第3章-18 输出10个不重复的英文字母

s=input()
l=''
for i in s:
    if i.isalpha() and i.lower() not in l and i.upper() not in l:
        l+=i
    if len(l)==10:
        break
if len(l)<10:
    print('not found')
else:
    print(l)

第3章-19 找最长的字符串

n=int(input())
l=[]
max=0
maxi=0
for i in range(n):
    s=input()
    if len(s)>max:
        max=len(s)
        maxi=i
    l.append(s)
print('The longest is:',l[maxi])

第3章-20 逆序的三位数

x=int(input())
while x%10==0:
    x=x//10
print(str(x)[::-1])

第3章-21 判断回文字符串

s=input()
t=s[::-1]
print(s)
if s==t:
    print('Yes')
else:
    print('No')

第3章-22 输出大写英文字母

s=input()
l=''
for i in s:
    if i.isupper() and i not in l:
        l+=i
if len(l)==0:
    print('Not Found')
else:
    print(l)

第4章-1 生成3的乘方表

from math import pow
n=int(input())
for i in range(n+1):
    print('pow(3,{0}) = {1}'.format(i,int(pow(3,i))))

第4章-2 统计素数并求和

def isprime(n):
    for i in range(2,n):
        if n%i==0:
            return False
    else:
        return True
m,n=map(int,input().split())
prime=[]
for i in range(m,n+1):
    if isprime(i) and i>1:
        prime.append(i)
print(len(prime),sum(prime))

第4章-3 猴子吃桃问题

n=int(input())
sum=1
for i in range(n-1):
    sum=(sum+1)*2
print(sum)

第4章-4 验证“哥德巴赫猜想”

from math import sqrt
def isprime(n):
    for i in range(2,int(sqrt(n)+1)):
        if n%i==0:
            return False
    else:
        return True
x=int(input())
for i in range(2,x):
    if isprime(i) and isprime(x-i):
        break
print('{0} = {1} + {2}'.format(x,i,x-i))

第4章-5 求e的近似值

def fac(n):
    sum=1
    for i in range(2,n+1):
        sum*=i
    return sum
x=int(input())
s=[1/fac(i) for i in range(1,x+1)]
print('{0:.8f}'.format(sum(s)+1))

第4章-6 输出前 n 个Fibonacci数

fibs=[1,1]
n=int(input())
for i in range(n-2):
    fibs.append(fibs[-1]+fibs[-2])
if n<1:
    print('Invalid.')
else:
    for i in range(n):
        print('{0:11d}'.format(fibs[i]),end='')
        if (i+1)%5==0:
            print()

第4章-7 统计学生平均成绩与及格人数

n=int(input())
if n==0:
    print('average = 0.0')
    print('count = 0')
else:
    l=list(map(int,input().split()))
    s=[i for i in l if i>=60]
    print('average = {0:.1f}'.format(sum(l)/n))
    print('count =',len(s))

第4章-8 求分数序列前N项和

n=int(input())
a=2
b=1
sum=a/b
for i in range(n-1):
    temp=a
    a=a+b
    b=temp
    sum+=a/b
print('{:.2f}'.format(sum))

第4章-9 查询水果价格

print('[1] apple')
print('[2] pear')
print('[3] orange')
print('[4] grape')
print('[0] exit')
l=list(map(int,input().split()))
price=[3.00,2.50,4.10,10.20]
cnt=0
for i in l:
    cnt+=1
    if cnt>5 or i==0:
        break
    if i<0 or i>4:
        print('price = 0.00')
    else:
        print('price = {:.2f}'.format(price[i-1]))

第4章-10 最大公约数和最小公倍数

'''求,就硬求
m,n=map(int,input().split())
max=max([i for i in range(1,m) if m%i==0 and n%i==0])
min=0
for i in range(m,m*n+1):
    if i%m==0 and i%n==0:
        min=i
        break
print(max,min)
'''
#老祖宗的辗转相除法
def gcd(m,n):
    if m%n == 0:
        return n
    else :
        return gcd(n,m%n)
m,n=map(int,input().split())
print('{} {}'.format(gcd(m,n),m*n//gcd(m,n)))

第4章-11 判断素数

from math import sqrt
def isprime(n):
    if n<=1:
        return False
    for i in range(2,int(sqrt(n)+1)):
        if n%i==0:
            return False
    else:
        return True
n=int(input())
for i in range(n):
    x=int(input())
    if isprime(x):
        print('Yes')
    else:
        print('No')

第4章-12 求满足条件的斐波那契数

n=int(input())
fibs=[1,1]
while fibs[-1]<=n:
    fibs.append(fibs[-1]+fibs[-2])
print(fibs[-1])

第4章-13 求误差小于输入值的e的近似值

def fac(n):
    sum=1
    for i in range(2,n+1):
        sum*=i
    return sum
error=float(input())
sum1=1
sum2=0
i=1
while True:
    sum1=sum1+1/fac(i)
    i+=1
    sum2=sum1+1/fac(i)
    if sum2-sum1<error:
        break
print('{:.6f}'.format(sum2))

第4章-14 统计字符

'''
本题难点在于不知道10个字符分几行输入
所以每接收一行都要要统计回车数
'''
enter=0;letter=0;blank=0;digit=0;other=0
c=''
while True:
    s=input()
    enter+=1
    c+=s
    if len(c)+enter>10:
        enter-=1
        break
for i in c:
    if i.isalpha():
        letter+=1
    elif i==' ':
        blank+=1
    elif i.isdigit():
        digit+=1
    else:
        other+=1
print('letter = {}, blank = {}, digit = {}, other = {}'.format(letter,blank+enter,digit,other))

第4章-15 换硬币

x=int(input())
count=0
fen5=0;fen2=0;fen1=0;total=0
for a in range(x//5,0,-1):
    for b in range(x//2,0,-1):
        for c in range(x,0,-1):
            if 5*a+2*b+c*1==x:
                print('fen5:{}, fen2:{}, fen1:{}, total:{}'.format(a,b,c,a+b+c))
                count+=1
print('count =',count)

第4章-16 jmu-python-判断是否构成三角形

a,b,c=map(int,input().split())
if a+b<=c or a+c<=b or b+c<=a:
    print('no')
else:
    print('yes')

第4章-17 水仙花数

from math import pow
n=int(input())
start=int(pow(10,n-1))
stop=int(pow(10,n))
for i in range(start,stop):
    l=str(i)
    s=[int(pow(int(j),n)) for j in l]
    if i==sum(s):
        print(i)

第4章-18 猴子选大王

'''我的辣鸡代码如下
n=int(input())
l=[i for i in range(1,n+1)]
cnt0=0  #记录报3的人数
cnt=0   #记录报数报到几了
while True:
    for i in range(n):
        if l[i]!=0: #只有不为0的人有资格报数
            cnt+=1
            if cnt==3:
                l[i]=0  #报3的人将其编号置零
                cnt=0   #并且重新开始报数
                cnt0+=1 #报3的人数+1
    for i in range(n):
        if l[i]!=0:
            l[i]+=cnt   #报完一遍数后,接着上一个报数
    if cnt0==n-1:   #当报3的人数为n-1时,剩下的为王
        break
for i in range(n):
    if l[i]!=0: #最后不为0的人只有一个,通过遍历找出
        print(i+1)
'''
'''大佬的
https://tuenity.blog.csdn.net/article/details/102609489
这个解答为下面的评论区的回复,作者为@zjuvegetable
侵删
'''
#约瑟夫环问题
n=int(input())
if n == 1:
    print(1)
else:
    monkey=[i for i in range(1,n+1)]
    while len(monkey) >= 3:
        monkey.pop(2)
        monkey.append(monkey.pop(0))
        monkey.append(monkey.pop(0))
    print(monkey[1])

第4章-19 矩阵运算

n=int(input())
sum=0
l=[]
for i in range(n):
    num=list(input().split())
    l.append(num)
for i in range(n):
    for j in range(n):
        if i+j!=n-1 and i!=n-1 and j!=n-1:
            sum+=int(l[i][j])
print(sum)

第4章-20 求矩阵各行元素之和

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

第4章-21 判断上三角矩阵

x=int(input())
for i in range(x):
    y=int(input())
    l=[]
    flag=True
    for j in range(y):
        s=list(map(int,input().split()))
        l.append(s)
    for m in range(1,y):
        for n in range(m):
            if l[m][n]!=0:
                flag=False
    if flag:
        print('YES')
    else:
        print('NO')

第4章-22 找鞍点

n=int(input())
l=[]
for i in range(n):
    s=list(map(int,input().split()))
    l.append(s)
x=[]
y=[]
for i in range(n):
    xmax=max([l[i][j] for j in range(n)])   #行最大值
    ymin=min([l[j][i] for j in range(n)])   #列最小值
    x+=[(i,j) for j in range(n) if l[i][j]==xmax]
    y+=[(j,i) for j in range(n) if l[j][i]==ymin]
    x=list(set(x)&set(y))
if len(x)==0:
    print('NONE')
else:
    print(x[0][0],x[0][1])

第4章-23 求矩阵的局部极大值

m,n=map(int,input().split())
l=[]
for i in range(m):
    s=list(map(int,input().split()))
    l.append(s)
flag=False
for i in range(1,m-1):
    for j in range(1,n-1):
        if l[i][j]>l[i-1][j] and l[i][j]>l[i+1][j]\
        and l[i][j]>l[i][j-1] and l[i][j]>l[i][j+1]:
            flag=True
            print(l[i][j],i+1,j+1)
    if flag==False and i==m-2:
        print('None',m,n)

第4章-24 打印九九口诀表

n=int(input())
for i in range(1,n+1):
    for j in range(1,i+1):
        print('{0}*{1}={2:<4d}'.format(j,i,i*j),end='')
        if j==i:
            print()

第4章-25 输出三角形字符阵列

n=int(input())
c='A'
for i in range(n,0,-1):
    for j in range(i):
        print('{} '.format(c),end='')
        c=chr(ord(c)+1)
        if j==i-1:
            print()

第4章-26 求1!+3!+5!+……+n!

n=int(input())
if n==1:
    print('n=1,s=1')
else:
    l=[]
    for i in range(1,n+1,2):
        s=1
        for j in range(1,i+1):
           s*=j
        l.append(s)
    print('n={},s={}'.format(n,sum(l))) 

第4章-27 二维数组中每行最大值和每行和

l=list(map(int,input().split()))
for i in range(9):
    if i%3==0:
        s=[]
    s.append(l[i])
    if i%3==2:
        for j in range(3):
            print('{:>4d}'.format(s[j]),end='')
        print('{:>4d}{:>4d}'.format(max(s),sum(s)))

第4章-28 矩阵转置

l=list(map(int,input().split()))
for i in range(3):
    for j in range(9):
        if j%3==i:
            print('{:>4d}'.format(l[j]),end='')
    print()

第4章-29 找出不是两个数组共有的元素

s=list(map(int,input().split()))
t=list(map(int,input().split()))
lens=s.pop(0)
lent=t.pop(0)
l=[]
for i in s:
    if i not in t and i not in l:
        l.append(i)
for i in t:
    if i not in s and i not in l:
        l.append(i)
print(*l,sep=' ')

第4章-30 找完数

from math import sqrt
m,n=map(int,input().split())
flag=False
for i in range(m,n+1):
    l=[1]
    for j in range(2,int(sqrt(i))+1):
        if i%j==0:
            l.append(j)
            l.append(i//j)
    l=sorted(l)
    if i==sum(l):
        flag=True
        print('{} = '.format(i),end='')
        print(*l,sep=' + ')
if flag==False:
    print('None')

第5章-1 输出星期名缩写

d={1:'Mon',2:'Tue',3:'Wed',4:'Thu',5:'Fri',6:'Sat',7:'Sun'}
n=int(input())
print(d[n])

第5章-2 图的字典表示

n=int(input())
counte=0    #边数
sumd=0  #度的和
for i in range(n):
    d=eval(input())
    for j in d.keys():
        l=d[j]
        for key,value in l.items():
            counte+=1
            sumd+=value
print(n,counte,sumd)

第5章-3 四则运算(用字典实现)

m=int(input())
operator=input()
n=int(input())
d={'+':'m+n','-':'m-n','*':'m*n','/':'m/n'}
try:
    print('{:.2f}'.format(eval(d[operator])))
except ZeroDivisionError:
    print('divided by zero')

第5章-4 分析活动投票情况

l=list(map(int,input().split(',')))
s=[i for i in range(6,11) if i not in l]
print(*s,sep=' ')

第5章-5 统计字符出现次数

s=input()
c=input()
print(s.count(c))

第5章-6 统计工龄

n=int(input())
l=list(map(int,input().split()))
d={}
for i in l:
    d[i]=d.get(i,0)+1
for key in sorted(d.keys()):
    print('{0}:{1}'.format(key,d[key]))

第5章-7 列表去重

l=eval(input())
s=[]
for i in l:
    if i not in s:
        s.append(i)
print(*s,sep=' ')

第5章-8 能被3,5和7整除的数的个数(用集合实现)

m,n=map(int,input().split())
s3=set();s5=set();s7=set()
for i in range(m,n+1):
    if i%3==0:
        s3.add(i)
    if i%5==0:
        s5.add(i)
    if i%7==0:
        s7.add(i)
s=s3&s5&s7
print(len(s))

第5章-9 求矩阵鞍点的个数

n=int(input())
l=[]
for i in range(n):
    s=list(map(int,input().split()))
    l.append(s)
x=[]
y=[]
s=set()
for i in range(n):
    xmax=max([l[i][j] for j in range(n)])   #行最大值
    ymin=min([l[j][i] for j in range(n)])   #列最小值
    x+=[(i,j) for j in range(n) if l[i][j]==xmax]
    y+=[(j,i) for j in range(n) if l[j][i]==ymin]
    s|=set(x)&set(y)
print(len(s))

第5章-10 两数之和

l=list(map(int,input().split(',')))
num=int(input())
d={}
for i in l:
    d[i]=num-i
for key,value in d.items():
    if key in l and value in l:
        print(l.index(key),l.index(value))
        break
else:
    print('no answer')

第5章-11 字典合并

d1=eval(input())
d2=eval(input())
d3={}
for i in d1:
    d3[i]=d1[i]+d2.get(i,0)
for i in d2:
    if i not in d3.keys():
        d3[i]=d2[i]
d3=dict(sorted(d3.items(),key=lambda x:x[0] if type(x[0])==int else ord(x[0])))
cnt=0
print('{',end='')
for i in d3:
    if type(i)==str:
        print('"{}":{}'.format(i,d3[i]),end='')
    else:
        print('{}:{}'.format(i,d3[i]),end='')
    cnt+=1
    if cnt!=len(d3):
        print(',',end='')
print('}',end='')

第6章-1 输入列表,求列表元素和(eval输入应用)

print(sum(eval(input())))

第6章-2 一帮一

n=int(input())
stu=[]
for i in range(n):
    no,name=input().split()
    stu.append((no,name))
l=[]
for i in stu[:n//2]:
    for j in stu[n//2:][::-1]:
        if i[0]!=j[0] and i not in l and j not in l:
            l.append(i)
            l.append(j)
for i in range(n):
    print(l[i][1],end='')
    if i%2!=0:
        print()
    else:
        print(' ',end='')

第6章-3 列表或元组的数字元素求和

def f(l):
    s=0
    if type(l)==type(1):
        s+=l
    if type(l)==type([]) or type(l)==type((1,)):
        for i in l:
            s+=f(i)
    return s
l=eval(input())
print(f(l))

第6章-4 列表数字元素加权和(1)

def f(l,deep):
    s=0
    if isinstance(l,int):
        s+=l*deep
    if isinstance(l,list):
        deep+=1
        for i in l:
            s+=f(i,deep)
    return s
l=eval(input())
print(f(l,0))

第6章-5 列表元素个数的加权和(1)

def f(l,deep):
    s=0
    if isinstance(l,int):
        s+=1*deep
    if isinstance(l,list):
        deep+=1
        for i in l:
            s+=f(i,deep)
    return s
l=eval(input())
print(f(l,0))

第6章-6 求指定层的元素个数

def f(l,deep,num):
    s=0
    if isinstance(l,int) and deep==num:
        s+=1
    if isinstance(l,list):
        deep+=1
        for i in l:
            s+=f(i,deep,num)
    return s
l=eval(input())
num=int(input())
print(f(l,0,num))

第6章-7 找出总分最高的学生

n=int(input())
stu=[]
for i in range(n):
    stu.append(list(input().split()))
stu=sorted(stu,key=lambda x:int(x[2])+int(x[3])+int(x[4]),reverse=True)
print(stu[0][1],stu[0][0],int(stu[0][2])+int(stu[0][3])+int(stu[0][4]))

第6章-8 *6-7 输出全排列

from math import pow
n=int(input())
start=int(pow(10,n-1))
stop=(n+1)*int(pow(10,n-1))
l=set([str(i) for i in range(1,n+1)])    #数字库
for i in range(start,stop):
    i=str(i)
    s=set()
    for j in i:
        s.add(j)
    if l==s:
        print(int(i))

第7章-1 词频统计

import re
import collections
import sys

words_str = ''.join([line for line in sys.stdin])   #系统读取输入,聚合成一个字符串
words_str = words_str.lower().split('#')[0] #所有字母变小写后,按“#”分割,取“#”前的字符串
words_list = re.findall(r'\w+',words_str) #将所有的单词提取出来
top15_words_list = [i[0:15] if len(i)>15 else i for i in words_list]    #取所有单词的前15位
words_counter_dict = collections.Counter(top15_words_list)   #统计各个单词的个数
words_rank_list = sorted(words_counter_dict.items(),key=lambda x:(-x[1],x[0]))    #按单词个数降序排序,如若一样,则按单词升序排序

print(len(words_rank_list))
for i in words_rank_list[0:int(len(words_rank_list)*0.1)]:  #输出排序列表的前10%
    print("{}:{}".format(i[1],i[0]))

你可能感兴趣的:(浙大版《Python程序设计》,python)