第一题
第2章-2 计算分段函数[1] (10 分) 本题目要求计算下列分段函数f(x)的值:
代码:
x=float(input())
if x==0:
print('f(%.1f) = %.1f'%(x,x))
else:
print('f(%.1f) = %.1f' % (x, 1/x))
我学到了:
输出
print('f(%.1f) = %.1f ’ % (x, 1/x))
保留一位小数;在句子中插入值。
第二题
第2章-4 特殊a串数列求和 (20 分)
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
输入格式:
输入在一行中给出不超过9的正整数a和n。
输出格式:
在一行中按照“s = 对应的和”的格式输出。
代码:
a, n = map(int, input().split())
s = 0
num = 0
holder = 0
for i in range(n):
for x in range(0, i + 1, 1):
num = holder + a * pow(10, x)
holder = num
s += num
num = 0
holder = 0
print("s = %d" % s)
我学到了:
语法知识:
1.在一行中输入以空格为间隔的数:
a,b,c,d = map(int, input().split())
2.次方:
x的y次方 pow(x, y)
出错点:
- num 和 holder每次循环都要初始化!
- python的for和c++不一样,要注意第二个循环里为i+1.
第三题
第2章-6 求交错序列前N项和 (15 分)
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
我的代码:
s = 0
son = 0
mom = 1
flag = -1
for x in range(n):
son += 1
num = son / mom
mom += 2
flag *= -1
num *= flag
s += num
print("%0.3f" % s)
别人的代码:
a = float(input())
sum = 0
for i in range(int(a)):
sum += (-1)**i*(i+1)/(2*i+1)
print(f"{sum:.3f}")
我学到了:
算术运算符:**
a**b = a的b次方
第四题
第2章-8 转换函数使用 (30 分)
输入一个整数和进制,转换成十进制输出
输入格式:
在一行输入整数和进制
输出格式:
在一行十进制输出结果
代码:
a,b=input().split(",")#赋值完成之后,变量a和变量b都是字符串类型。
b = eval(b)#将字符串b,如果是单引号或双引号的话,则解析成int类型,三引号的话,解析成str类型。eval(string)
c=int(a,b)#int(string,number),进制转换;
print(c)
我学到了:
1.eval()函数:
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
2.进制转换:
int(a,b) (string,number)
将b进制的数a转换为十进制
第五题
第2章-9 比较大小 (10 分)
本题要求将输入的任意3个整数从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
我的代码:
ls = input().split()
ls = sorted(ls)
print("%d->%d->%d" % (int(ls[0]), int(ls[1]), int(ls[2])))
但是有两个测试点出现错误:
别人的代码:
1.
print(*sorted(map(int,input().split())),sep="->")
2.
a,b,c=input().split()
a=int(a)
b=int(b)
c=int(c)
if a>b:
a,b=b,a
if a>c:
a,c=c,a
if b>c:
b,c=c,b
print("%d->%d->%d"%(a,b,c))
第六题
第2章-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."。
代码:
lower, upper = map(int, input().split())
if lower <= upper <= 100:
print("fahr celsius")
while lower <= upper:
F = lower
C = 5 * (F - 32) / 9
print("%d%6.1f" % (F, C))
lower += 2
else:
print("Invalid.")
我学到了:
题目要求输出celsius占据六个字符宽度,而我一开始输出为%0.1f,不能满足要求,
当改为%6.1f后,格式就正确了。
知识:
%n.mf 中n为占据的字符长度,m为输出到小数点后几位。
第七题
第2章-12 输出三角形面积和周长 (15 分)
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
s(s−a)(s−b)(s−c)
,其中s=(a+b+c)/2。
输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。
输出格式:
如果输入的边能构成一个三角形,则在一行内,按照
area = 面积; perimeter = 周长
的格式输出,保留两位小数。否则,输出
These sides do not correspond to a valid triangle
代码:
import math
a, b, c = map(float, input().split())
if a + b > c > abs(a - b):
s = (a + b + c) / 2
area = math.sqrt(s*(s-a)*(s-b)*(s-c))
per = a + b + c
print("area = %0.2f; perimeter = %0.2f" % (area, per))
else:
print("These sides do not correspond to a valid triangle")
我学到了:
- 判断三条边能否组成三角形的较简单条件:a+b>c and |a-b|<c
- 如果import cmath 来调用sqrt()函数,产生的值为complex(复数),且无法转换为float。 而import math 来调用sqrt()函数,则可以产生float类型的数。
一周刷题情况: