1. Main
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
# 遍历列表
for i in range(len(nums)):
# 计算需要找到的下一个目标数字residue
res = target - nums[i]
if res in nums[i+1:]:
return [i,nums[i+1:].index(res)+i+1]
2. Note
.index() 表示出在数列中的位置
彩蛋
与上文无关
import sys
import math
# 初始化输入列表
posAList = []
posBList = []
alphaList = []
# 读取输入
lineNum = 0
for line in sys.stdin:
if lineNum == 0:
T = int(line)
else:
a = line.split()
posA = [int(a[0]), int(a[1])]
posB = [int(a[2]), int(a[3])]
alpha = int(a[4])
posAList.append(posA)
posBList.append(posB)
alphaList.append(alpha)
lineNum += 1
# 定义计算夹角的函数(角度制)
def calAngle(posA, posB, posC):
xA, yA = posA
xB, yB = posB
xC, yC = posC
xCA = xA - xC
yCA = yA - yC
xCB = xB - xC
yCB = yB - yC
CA_dot_CB = xCA * xCB + yCA * yCB
CA_mol = math.sqrt(xCA**2 + yCA**2)
CB_mol = math.sqrt(xCB**2 + yCB**2)
beta = math.acos(CA_dot_CB / (CA_mol * CB_mol))
beta = beta / math.pi
beta = beta * 180
return beta
# 定义求解函数
def solve(posA, posB, alpha):
# 读取A和B的坐标
xA, yA = posA
xB, yB = posB
# 计算AB连线的向量
xAB = xB - xA
yAB = yB - yA
# 计算垂直于AB连线的向量
xP = -yAB
yP = xAB
# 计算AB连线的中点
xO = (xA + xB) / 2
yO = (yA + yB) / 2
# 初始化试探参数k
k = 1
# 初始化C的坐标
xC = xO + xP * k
yC = yO + yP * k
# 计算初始时期的夹角
beta = calAngle([xA, yA], [xB, yB], [xC, yC])
diff = abs(beta - alpha)
last_diff = diff
# 开始试探
while diff / alpha >= 1e-6:
# 如果夹角变大了,说明应该往反方向试探
if diff >= last_diff:
k = -0.5 * k
# 否则,加大步伐
else:
k = 1.1 * k
# 下一步的试探
xC = xC + xP * k
yC = yC + yP * k
# 计算新的夹角
last_diff = diff
beta = calAngle([xA, yA], [xB, yB], [xC, yC])
diff = abs(beta - alpha)
# 试探结束后,打印答案
print("%f %f" % (xC, yC))
# 解答
for posA, posB, alpha in zip(posAList, posBList, alphaList):
solve(posA, posB, alpha)