浙大版《Python 程序设计》题目集第2章-13——第3章-3

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

为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。

输入格式:
输入在一行中给出非负实数x。

输出格式:
在一行输出应交的水费,精确到小数点后2位。

输入样例1:

12

输出样例1:

16.00

输入样例2:

16

输出样例2:

22.50

答案样例:

a = int(input())
if a <= 15:
    print('%.2f'%(4*a/3))
else:
    print('%.2f'%(2.5*a-17.5))
# print('%.2f'%(4*a/3)) if a <= 15 else print('%.2f'%(2.5*a-17.5))

第2章-14 求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。

输入样例:

-3 8

输出样例:

   -3   -2   -1    0    1
    2    3    4    5    6
    7    8
Sum = 30

答案样例:

a,b = input().split()
a,b = eval(a),eval(b)
c = 0
s = 0
for i in range(a,b+1):
    c += 1
    print(f"{i}".rjust(5),end="")# 右对齐,默认是以空格补齐长度
    if c%5 == 0:
        print('\n',end='')
    elif i == b:# 最后再打印一个换行,要是最后一个刚好是第5个就不会执行这个
        print('\n',end='')
    s += i
print(f"Sum = {s}")

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

中小学生每个学期都要体检,要量身高,因为身高可以反映孩子的生长状况。现在,一个班的身高已经量好了,请输出其中超过平均身高的那些身高。程序的输入为一行数据,其中以空格分隔,每个数据都是一个正整数。程序要输出那些超过输入的正整数的平均数的输入值,每个数后面有一个空格,输出的顺序和输入的相同。

输入格式:
在一行输入中一个班的身高值,以空格分隔。

输出格式:
在一行输出超过输入的平均数的输入值,以空格分隔。

输入样例:
在这里给出一组输入。例如:

143 174 119 127 117 164 110 128

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

143 174 164 

答案样例:

list1 = list(map(int,input().split(' ')))
average = sum(list1)/len(list1)
print(*filter(lambda x: x > average, list1),end=' ')# *相当于给序列进行解压
# a = [1,2,3]
# b = {'name':'zhangsan','age':18}
# print(*a)# 1 2 3
# print(*b)# name age

第3章-2 查验身份证

一个合法的身份证号码由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。

输入样例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出样例1:

12010X198901011234
110108196711301866
37070419881216001X

输入样例2:

2
320124198808240056
110108196711301862

输出样例2:

All passed

答案样例:

# 加权求和就是每一位乘以它的权数然后进行相加
n = int(input())
cnt = 0
jlist = ['1','0','X','9','8','7','6','5','4','3','2']
flist = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
for i in range(n):
    num = input()
    num_17 = num[:-1]
    end  = num[-1]
    if not num_17.isdigit():# 判断前17位是否全为数字
        print(num)
        continue
    l = map(int,list(num_17))
    s = sum(i*j for i, j in zip(flist,l))
    m = s % 11
    if jlist[m] == end:
        cnt += 1
    else:
        print(num)
if cnt == n:
    print('All passed')

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

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

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

输出格式:
反向输出字符和索引,即最后一个最先输出。每行一个。

输入样例:
在这里给出一组输入。例如:

mississippi
s p

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

9 p
8 p
6 s
5 s
3 s
2 s

答案样例:

str1 = input()[::-1]
a,b = input().split()
for i in range(len(str1)):
    if str1[i] == a:
        print('{} {}'.format(len(str1)-i-1,a))
    elif str1[i] == b:
        print('{} {}'.format(len(str1)-i-1,b))

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值