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.
解题代码:
代码语言:javascript复制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 = 应付电费值”。
解题代码:
代码语言:javascript复制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是大于序列和的最小整数。
解题代码:
代码语言:javascript复制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。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
解题代码:
代码语言:javascript复制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。
解题代码:
代码语言:javascript复制a,b = input().split(",")
a=a.strip()
b=int(b.strip())
print(int(a*b))
strip() 方法:用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
6 转换函数使用
题目:
输入一个整数和进制,转换成十进制输出。
输入格式:
在一行输入整数和进制。
输出格式:
在一行十进制输出结果。
解题代码:
代码语言:javascript复制a,b=input().split(",")
b=eval(b)
c=int(a,b)
print(c)
eval() 函数:用来执行一个字符串表达式,并返回表达式的值。
7 比较大小
题目:
输入3个不同整数,这3个整数分别对应3个字母的ASCII码值,把这3个字母按它的ASCII码值从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个字母按ASCII码值从小到大输出,其间以“<”相连。
解题代码:
代码语言:javascript复制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."
解题代码:
代码语言:javascript复制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。
输出格式:
在一行中输出对应的和。
解题代码:
代码语言:javascript复制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位。
解题代码:
代码语言:javascript复制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行的图形。
解题代码:
代码语言:javascript复制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="")取消换行
最后:记录一个实际问题
元组的相减:
代码语言:javascript复制a =(1,2)
b =(3,4)
c =()
for i,j in zip(a,b):
summ= j-i
c = c (summ,)
print(c)
zip()函数:将对象打包成元组
将元组与第一个值相减,并换行写入文件:
代码语言:javascript复制 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)