问题描述:
输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。例如:输入数组1 2 4 7 11 15和数字15。由于4+11=15,因此输出4和11。
l = input('输入一个数字字符串,以空格作为间隔:\n')
# part1 start 判断是否以空格作为间隔进行了输入
try:
list1 = l.split(' ') # 以空格作为分割
list2 = []
for i in list1:
list2.append(int(i)) # 将i以int的形式,添加到list2中,生成一个数组
except:
print('输入格式错误,并不是以空格作为间隔。')
sys.exit() # try except结构中,用exit()退出
# part1 end
# 此外part1也可以用以下语句表示
# list2 = [int(i) for i in str_1.split(' ')]
# print(list2)
# part2 start 判断是否输入的是一个数字
num = input('输入一个数字。\n')
try:
n = int(num) # 明显,如果这时候输入一个不是数字的东西的话,int转化不出来,会出现异常
except:
print('输入格式错误,输入的不是数字.')
sys.exit()
# part2 end
# part3 start 构造函数,作用是寻找这两个数
def find_it_in_list():
try:
for i in range(0,len(list2)):
for j in range(i+1,len(list2)):
if list2[i]+list2[j] == n :
print('两个数分别为:',list2[i],list2[j])
raise StopIteration #通过引发异常的方法跳出嵌套循环
except StopIteration:
exit()
# part3 end
# part4 start 调用函数
find_it_in_list()
# part4 end
这个方法的函数find_it_in_list(),我的想法是遍历,即通过列表中每两个数的组和判断是否满足要求,但是我又看到论坛里有人用了另一种方法,没有通过对每个列表中的元素进行索引,而是直接针对元素进行操作
def find_it_in_list2():
for i in list2:
a = list2
list2.remove(i)
for j in a:
if i + j == n:
print(i,j)
break
它相当于将列表进行复制之后,将当前循环所进行到的元素remove掉,就可以比较简单的写出来了。