【python】py课后作业程序题1「PTA」

7-1 计算 11+12+13+…+m (30 分)

输入一个正整数m(20<=m<=100),计算 11+12+13+…+m 的值。

输入格式:
在一行输入一个正整数m。

输出格式:
在一行中按照格式“sum = S”输出对应的和S.

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

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

sum = 4040

思路:
这题很简单,直接把输入的数放到range中,然后从11开始通过for循环往上累加就行了,不过需要注意,因为range是右边不包括的,所以需要进行加一,不然会缺少一个数据

代码区:

sum = 0
m = int(input())#得到输入的数
for i in range(11, m + 1):#要加一,不然会缺少一个
    sum += i;
print("sum = {:d}".format(sum))

7-2 计算分段函数[1] (10 分)

本题目要求计算下列分段函数f(x)的值:

扫描二维码关注公众号,回复: 14231575 查看本文章

公式
在这里插入图片描述

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

输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1:
10
输出样例1:
f(10.0) = 0.1
输入样例2:
0
输出样例2:
f(0.0) = 0.0

思路:
同样很简单,来一个if语句判断就行了,如果等于0就输出0如不等于0就返回1 / n
注意,这里的输入需要用float()转化一下,因为是实数,最后输出一位小数

代码区:

def run(n):
    if(n == 0):
        return 0.0
    else:
        return 1 / n
n = float(input())
print("f({:.1f}) = {:.1f}".format(n, run(n)))


7-3 阶梯电价 (15 分)

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

输入样例1:
10
输出样例1:
cost = 5.30
输入样例2:
100
输出样例2:
cost = 55.50

思路:
和上一题一样,没什么花里胡哨的,就是简单用if进行判断就行了.(这里有深深的怨念!!错误输入的输出Invalid我给写成Invaid了,错了好多次就是看不出来哪里错了…)

代码区:

n = int(input())
price = 0
if(n >= 50):
    price = 0.53 * 50 + 0.58 * (n - 50)
    print("cost = {:.2f}".format(price))
elif n >= 0:
    price = 0.53 * n
    print("cost = {:.2f}".format(price))
else:
    print("Invalid Value!")

7-4 特殊a串数列求和 (20 分)

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:
输入在一行中给出不超过9的正整数a和n。

输出格式:
在一行中按照“s = 对应的和”的格式输出。

输入样例:
2 3
输出样例:
s = 246

思路:
在python里面我们可以直接把字符乘上次数就可以实现这个效果了.

代码区:

a, n = input().split()
n = int(n)# 将n从字符转化为整型
sum = 0
for i in range(1, n + 1):# n要加一,才能包括n
    sum += int(a * i)#因为是字符串所以需要转化为整型相加
print("s = {:d}".format(sum))

7-5 求奇数分之一序列前N项和 (15 分)

本题要求编写程序,计算序列 1 + 1/3 + 1/5 + … 的前N项之和。

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

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:
23
输出样例:
sum = 2.549541

思路:
我们可以使用列表推导式来进行简化,通过for循环到2*n(因为每次是加2的)然后if判断是奇数就把1 / i放入列表中
最后对列表求和就行了

代码区:

n = int(input())
res =  [1 / i for i in range(2 * n) if i % 2 == 1]
sumN = sum(res)
print("sum = {:.6f}".format(sumN))

7-6 求交错序列前N项和 (15 分)

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。

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

输出格式:
在一行中输出部分和的值,结果保留三位小数。

输入样例:
5
输出样例:
0.917

思路:
这题比上一题复杂一点但是不离其宗.本来想用列表推导式的,但是嫌麻烦懒得写就搞成普通的形式了,嘿嘿.
设置一个flag变量用来达到一加一减的效果
分子为1,2,3,4一步步加上去,分母为2*i-1,然后每次对应一个i就把flag取反乘进去.然后进行相加.

代码区:

n = int(input())
flag = 1
sum = 0.0
for i in range(1, n + 1):
    sum += flag * i / (2 * i - 1)
    flag = - flag
print("{:.3f}".format(sum))

7-7 产生每位数字相同的n位数 (30 分)

读入2个正整数A和B,1<=A<=9, 1<=B<=10,产生数字AA…A,一共B个A

输入格式:
在一行中输入A和B。

输出格式:
在一行中输出整数AA…A,一共B个A

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

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

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

    3  ,4

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

3333

思路:
因为输入中有空格,所以我们需要首先把空格给去除,在py里可以使用strip()方法来完成.最后用split(’,’)来把一行字符串以,来进行分割
最后将a字符乘上整型b就可以了

代码区:

a, b = input().strip().split(",")
b = int(b)
print(a * b)

7-8 转换函数使用 (30 分)

输入一个整数和进制,转换成十进制输出

输入格式:
在一行输入整数和进制

输出格式:
在一行十进制输出结果

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

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

37

思路:
我们要首先把输入的数进行反转才能进行权重相乘得到新的进制数,(具体可以自行百度一下).我们用reversed函数来进行反转字符串.
通过for循环来取出每一位的数,然后转化成整型之后乘上我们需要转化的进制数的i次方.将值累加到res中就可以实现进制转化.

代码区:

a, b = input().split(",")
b = int(b)
res = 0
re = list(reversed(a))
for i in range(len(re)):
    res += int(re[i]) * b ** i
print(res)

7-9 比较大小 (10 分)

本题要求将输入的任意3个整数从小到大输出。

输入格式:
输入在一行中给出3个整数,其间以空格分隔。

输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:
4 2 8
输出样例:
2->4->8

思路:
我的想法是先把输入的数存到列表中然后进行排序,然后按大小顺序输出
(不过我这的做法有点麻烦,可以用列表推导式简单一点)
代码区:

nums = input().split()
newNums = []
for num in nums:
     newNums.append(int(num))
newNums.sort()
print("{:d}->{:d}->{:d}".format(newNums[0], newNums[1], newNums[2]))

7-10 输出华氏-摄氏温度转换表 (15 分)

输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。

温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入格式:
在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:
第一行输出:“fahr celsius”

接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。

若输入的范围不合法,则输出"Invalid."。

输入样例1:
32 35
输出样例1:
fahr celsius
32 0.0
34 1.1
输入样例2:
40 30
输出样例2:
Invalid.

思路:
首先定义一个函数来完成华氏度和摄氏度的转化,这个就是按照转化方程写就完事了.
我们先对输入值进行有效判断,如果lower大于upper或者两者有大于100的就输出无效值.
如果符合输入条件,就以步长为2的range来输出两个温度
注意格式因为要靠右对齐所以要用>
代码区:

def trans(f):
    c = (f - 32) / 9 * 5
    return c
lower, upper = input().split()
lower = int(lower)
upper = int(upper)
if(lower > upper or lower > 100 or upper > 100):
    print("Invalid.")
else:
    print("fahr celsius")
    for i in range(lower, upper + 1, 2):
        print("{:d}{:>6.1f}".format(i, trans(i)))

7-11 求平方与倒数序列的部分和 (15 分)

本题要求对两个正整数m和n(m≤n)编写程序,计算序列和
在这里插入图片描述

输入格式:
输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例:
5 10
输出样例:
sum = 355.845635

思路:
我们可以观察式子,是i的次方加上1/i组成
我们可以用列表推导式来实现
然后将列表求和

代码区:

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

7-12 输出三角形面积和周长 (15 分)

本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:
在这里插入图片描述


,其中s=(a+b+c)/2。

输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。

输出格式:
如果输入的边能构成一个三角形,则在一行内,按照

area = 面积; perimeter = 周长
的格式输出,保留两位小数。否则,输出

These sides do not correspond to a valid triangle
输入样例1:
5 5 3
输出样例1:
area = 7.15; perimeter = 13.00
输入样例2:
1 4 1
输出样例2:
These sides do not correspond to a valid triangle

思路;
对于输入的数都转化成整型,可以用map来快速解决.
对于三角形我们要进行判断是否是一个正确的三角形,即任意两边之和大于第三边.所以我用最大值和全部和减去最大值进行比较可以可以进行判断了.
代码区:

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

7-13 分段计算居民水费 (10 分)

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

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

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

输入样例1:
12
输出样例1:
16.00
输入样例2:
16
输出样例2:
22.50

思路:
同样,简单的if判断题

代码区:

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

7-14 求整数段和 (15 分)

给定两个整数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

思路:
使用map来进行字符到整型的转化
按照格式每五个进行换行,所以需要进行个数累加
因为输出是在同一行,所以需要用end = ''来进行不换行输出
注意,在最后输出结果的时候如果不换行就会导致结果输出在旧行后面,所以需要进行判断如果不是旧行已满就换行.

代码区;

a, b = map(int, input().split())
cnt = 0
sum = 0
for i in range(a, b + 1):
    sum += i
    print("{:>5d}".format(i), end = '')# 不换行输出
    cnt += 1
    if cnt % 5 == 0:# 每5个进行换行
        print()
if(cnt % 5 != 0):# 如果个数不是5的倍数就输出换行
    print()
print("Sum = {:d}".format(sum))

新手上路,解答可能不是最优解,见谅。有错请指正;

猜你喜欢

转载自blog.csdn.net/qq_33884853/article/details/124187724