无聊的Python笔记Ⅰ

无聊的大计基Python

之所以说无聊,是因为——不符合我在Project中学技能的习惯

╥﹏╥...

所以记录一些错误,以此警醒自己。

寒假预习题*4

[TOC]

一、平面距离

时间限制:1000ms 内存限制:65536kb

问题描述:

在数学上,平面中两点A(x1,y1)与点B(x2, y2)的欧几里得距离为: \[ d_{AB} = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2} \] 请你设计一个程序,在输入两点坐标后,可以计算出两点间的欧几里得距离并输出。结果保留三位小数

输入格式:

输入数据共四行,分别表示一点的横、纵坐标与另一点的横、纵坐标,每个数据占一行,可能包含小数

输出格式:

输出共一行,表示两点间的距离,保留三位小数

1
2
3
4
5
6
a = input()
b = input()
c = input()
d = input()
distance = ((eval(a) - eval(c))**2 + (eval(b) - eval(d))**2)**(1/2)
print("%.3f" % distance)

二、单词积分

时间限制:1000ms 内存限制:65536kb

题目描述:

一些鸡汤文定义了如下的规则,来给单词赋分:字母a计1分,字母b计2分,字母c计3分,以此类推,字母z计26分。每个单词的分数即为各个字母的总分。这样计算,单词hardwork的分数即为98分,这些文章便可以籍此强行说明努力的意义。在本题中,你将使用这样的规则,为一个单词计算分数。

输入格式:

一个长度不超过100的单词,由大小写字母组成,不包含其他字符。

输出格式:

一个整数,为单词的总分。

1
2
3
4
5
c = str.lower(input())
s = 0
for i in c:
s = s + (ord(i) - 96)
print(s)

三、简单序列求和

时间限制:1000ms 内存限制:65536kb

题目描述:

计算 \[ s=a+aa+aaa+aaaa+\underbrace{ aa⋯a}_{n\_digits} \] ,其中 a是一个数字,如2+22+222+2222+22222(此时a=2,n=5)。

输入格式:

输入数据包含一行,共两个整数,依次为an,以空格隔开,含义见题目描述。其中0≤a≤9,0≤n≤15。

输出格式:

输出数据包含一行,为所求的和s的值

1
2
3
4
5
6
7
a,n = input().split()
s = ''
d = 0
for i in range(1,eval(n)+1):
s = s + a
d = d + eval(s)
print(d)

四、计算相对分子质量

时间限制:1000ms 内存限制:65536kb

题目描述:

小北在学习化学的过程中,常要计算相对分子质量。但是有些分子式比较复杂,所以计算起来比较麻烦,因此小北苦闷不堪。请你用编程的方法帮助小北计算相对分子质量。

本题中的分子式只包含4种原子, C,H,O,N,相对原子质量 分别为 12.01, 1.008, 16.00, 14.01。

请编写程序,计算包含这四种中一种或多原子( 数量不限)的分子的相对质量,例如 N2, C60, CH4, N2H6, C2H4O2, C2H6O, C6H12O6, C5H12O。

输入格式:

输入数据包含一行,为所求的分子式

输出格式:

输出数据为一个小数,为该分子的相对分子质量,保留两位小数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
C = 12.01
H = 1.008
O = 16.00
N = 14.01

a = input()
A = []
B = []
s = 0
i = 0

if (isinstance(eval(a[-1]),float) == True):
a = a + '1'

while True:
if i + 1 != len(a):
if (a[i].isalpha() == True) and (a[i+1].isalpha() == True):
a = a[:i+1] + '1' + a[i+1:]
else:
break
i += 1

for i in range(len(a)):
if (isinstance(eval(a[i]),float) == True):
A.append(i)
B.append(a[i])

A.append(len(a)+1)
for i in range(len(B)):
s = s + eval(B[i]) * eval(a[A[i]+1:A[i+1]])

print("{:.2f}".format(s))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!!!
IN = input()
def calc(X, Y):
if X in IN:
if X not in IN[-1] and IN[IN.find(X) + 1].isdigit():
p = ''
for i in range(IN.find(X) + 1, len(IN)):
if IN[i].isdigit():
p = p + IN[i]
else:
break
s = Y * eval(p)
else:
s = Y
else:
s = 0
return s
c = calc('C', 12.01)
h = calc('H', 1.008)
o = calc('O', 16.00)
n = calc('N', 14.01)
OUT = c + h + o + n
print("{:.2f}".format(OUT))

自己的不足

print()控制格式输出:

  • print("%.3f" % distance)

(" % [][m].[n][格式化符号]" % [变量])m:字段宽度,默认右对齐,补空格;n:小数精度

符号 作用
%c 字符及其ASCⅡ码
%d 整数
%f 浮点数
%e(E) 科学记数法
%g(G) 浮点数的科学记数法
%o 八进制
%x(X) 十六进制
操作符 作用
[]m.n []里为占位符,m 是显示的最小总宽度,n 是小数点后的位数
- 左对齐
<sp> 空格占位
# 在八进制数前面显示'0',在十六进制前面显示'0x'或者'0X‘
0 显示的数字前面填充'0'(默认空格)
  • 【推荐】print("{:.3f}".format(distance))

format函数:

print()会自动在行末加上回车, 如果不需回车,只需在 print 语句的结尾添加一个,