Loading...
墨滴

zstar

2021/03/12  阅读:126  主题:科技蓝

PTA第02章练习题

PTA第02章练习题

本篇内容所用到的函数概览:

函数 作用
split() 空格内为空白默认以空格分割,(,)以逗号分割
map(a,b) 将括号内的第二项作为自变量,第一项作为函数做映射
ceil() 返回数字的上入整数
floor() 返回数字的下入整数
strip() 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
eval() 用来执行一个字符串表达式,并返回表达式的值
list() 转换为列表
print("",end="") 取消换行
zip() 将对象打包成元组
math.sin(math.radians(35)) 计算sin(35°)
math.log(7) 计算ln(7)

1 计算 11+12+13+...+m

题目:

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

输入格式:

在一行输入一个正整数m。

输出格式:

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

解题代码:

m=int(input())
sum=0
for i in range(11,m+1):
    sum+=i
print("sum =",sum)

2 阶梯电价

题目:

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

输入格式:

一行中输入某用户的月用电量(单位:千瓦时)和电价上调的X值(单位:元),中间用空格分开。

输出格式:

在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”。

解题代码:

a, x = map(float, input().split())
if a < 0:
    print("Invalid Value!")
elif a <= 50:
    print("cost = {:.2f}".format(a*0.53))
else:
    print("cost = {:.2f}".format(50*0.53+(a-50)*(0.53+x)))

split()函数:空格内为空白默认以空格分割,(,)以逗号分割

map():将括号内的第二项作为自变量,第一项作为函数做映射。 例如map(float, input().split())等价于float(input().split())


3 求奇数分之一序列前N项近似和

题目:

编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项近似和(提示:用ceil函数)。

输入格式:

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

输出格式:

在一行中按照“sum ≈ S”的格式输出近似和S。S是大于序列和的最小整数。

解题代码:

import math
n = int(input())
sm = 0
d = 1
for i in range(n):
    sm = sm + 1/d
    d = d+2
print("sum ≈ %d" % math.ceil(sm))

range:遵循左闭右开的原则,如果只有一个数,则区间下沿为0。

常用操作: range(0, 30, 5) (0,30] 步长为5

->[0, 5, 10, 15, 20, 25]

ceil():返回数字的上入整数(本意天花板,很好记,使用注意引入math库)


4 求交错序列前N项和

题目:

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

输入格式:

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

输出格式:

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

解题代码:

n = int(input())
sum = 0
a = 1
b = 1
for i in range(n):
    if a % 2 == 0:
        sum -= a / b
    else:
        sum += a / b
    a += 1
    b += 2
print("%.3f" % sum)

5 产生每位数字相同的n位数

题目:

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

输入格式:

在一行中输入A和B。

输出格式:

在一行中输出整数AA...A,一共B个A。

解题代码:

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

strip() 方法:用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。


6 转换函数使用

题目:

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

输入格式:

在一行输入整数和进制。

输出格式:

在一行十进制输出结果。

解题代码:

a,b=input().split(",")
b=eval(b)
c=int(a,b)
print(c)

eval() 函数:用来执行一个字符串表达式,并返回表达式的值。


7 比较大小

题目:

输入3个不同整数,这3个整数分别对应3个字母的ASCII码值,把这3个字母按它的ASCII码值从小到大输出。

输入格式:

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

输出格式:

在一行中将3个字母按ASCII码值从小到大输出,其间以“<”相连。

解题代码:

numlist=sorted(list(map(eval,input().split())))
print("{:c}<{:c}<{:c}".format(numlist[0],numlist[1],numlist[2]))

list():转换为列表

sorted():默认从小到大排序


8 输出摄氏-华氏温度转换表

题目:

输入2个正整数lower和upper(-20<=lower<=upper<=50),表示摄氏范围。请输出一张取值范围为[lower,upper]、 且每次增加2摄氏度的摄氏-华氏温度转换表。温度转换的计算公式: F=C×1.8+32 其中:C表示摄氏温度,F表示华氏温度。

输入格式:

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

输出格式:

第一行输出:"celsius□□□□fahr"

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

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

解题代码:

lower,upper=map(eval,input().split())
if -20<= lower<= upper<=50:
    print("celsius    fahr")
    i = lower
    while i <= upper:
        print("{:d}{:>14.1f}".format(i, i * 1.8 + 32))
        i = i + 2
else:
    print("Invalid.")

format中:^<>分别表示居中、左对齐、右对齐,后面带宽度

“>14”:右对齐,占据14个字符位置


9 偶数位特殊序列和

题目:

给定不超过9的正整数a,给定正整数n,n是偶数,4<=n<=18,要求编写程序求aa+aaaa+aaaaaa+⋯+aa⋯a(n个a)之和。

输入格式:

在一行中给出不超过9的正整数a和n。

输出格式:

在一行中输出对应的和。

解题代码:

a,b=input().split()
a=int(a)
b=int(b)
k=a
sum=0
for i in range(2,b+1):
    a=a*10+k
    if(i%2==0):
            sum+=a
print(sum)

10 分段计算居民水费

题目:

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

输入格式:

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

输出格式:

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

解题代码:

f=lambda x:4*x/3 if x<15 else 2.5*x-17.5
print("{:.2f}".format(f(eval(input()))))

匿名函数 lambda:变量+简单表达式


11 输出指定图形

题目:

输入正整数(1<=n<=7),输出指定图形。(提示:用*运算符)

输入格式:

输入正整数n。

输出格式:

输出有n行的图形。

解题代码:

n = int(input())
for i in range(1, n+1):
    if i == 1:print("* ",end="")
    if i == 2: print("\n* * ",end="")
    if i == 3: print("\n* * * ",end="")
    if i == 4: print("\n* * * * ",end="")
    if i == 5: print("\n* * * * * ",end="")
    if i == 6: print("\n* * * * * * ",end="")
    if i == 7: print("\n* * * * * * * ",end="")

这题主要考格式

冷门知识点:print默认换行,print("",end="")取消换行


最后:记录一个实际问题

元组的相减:

a =(1,2)
b =(3,4)
c =()
for i,j in zip(a,b):
    summ= j-i
    c = c + (summ,)
print(c)

zip()函数:将对象打包成元组

将元组与第一个值相减,并换行写入文件:

    with open(pts1_path, 'w'as f:
        for i in pts1:
            i = subtract(pts1[0], i)
            s = ''.join(str(i).strip()) + "\n"
            f.write(s)

zstar

2021/03/12  阅读:126  主题:科技蓝

作者介绍

zstar