Python基础习题
给出一个整数数组,请在数组中找出两个加起来等于目标函数的数。
给出函数twoSum需要返回这两个数字的下标(index1,index2),需要满足index1小于index2.
注意:下标从1开始,并且假设给出的数组中只存在唯一解
例如:
给出的数组为[20,70,110,150],目标值为90
输出index1=1,index2=2
解题思路:
1,先内部给定一组数组及需要求和的目标值,根据题目,我们可以循环相加,方法为从第一个数开始循环,每个数分别加这个数后面的所有的数
其中最后一个数后面没有数,第一个数不需要与本身相加
利用for循环,进行如下操作,检查i 及各个相加结果:
num_list = [20,70,110,150]
num_target = 90
for i in num_list[:-1]:
result = [i+j for j in num_list[i+1:]]
print(i)
print(result)
运行结果:
20
[]
70
[]
110
[]
2,i值没有问题,输出结果为空,分析原因为j 不能用i+1循环,而应该用i的索引值+1循环,
由于for循环推导式只能输出列表,因此改为for循环嵌套
修改后如下:
num_list = [20,70,110,150]
num_target = 90
for i in num_list[:-1]:
for j in num_list[num_list.index(i)+1:]:
result = i + j
print(i)
print(j)
print(result)
运行结果:
20
70
90
20
110
130
20
150
170
70
110
180
70
150
220
110
150
260
3,结果没有问题,加入判断条件及输出结果:
num_list = [20,70,110,150]
num_target = 90
for i in num_list[:-1]:
for j in num_list[num_list.index(i)+1:]:
result = i + j
# print(i)
# print(j)
# print(result)
if result == num_target:
print(num_list.index(i)+1,num_list.index(j)+1)
break
运行结果:
1 2
4,功能实现,加入人机交互:
inset_list = list(input('请给定一个以,隔开数组:').split(','))
# num_list = [20,70,110,150]
num_target = int(input('请给一个结果:'))
# num_target = 90
num_list = [int(item) for item in inset_list]
for i in num_list[:-1]:
for j in num_list[num_list.index(i)+1:]:
result = i + j
# print(i)
# print(j)
# print(result)
if result == num_target:
print([num_list.index(i)+1,num_list.index(j)+1])
break
运行结果:
请给定一个以,隔开数组:20,70,110,150
请给一个结果:90
[1, 2]