本人研究生阶段,Python程序设计与科学计算的大作业
基本要求
以列表形式输入一组数字(整数),统计其中的正数个数、负数个数、零个数、奇数个数(正负总共的)、偶数个数(正负总共的,也包括零),并打印这些统计结果;
高级要求
在上述输入的一组数字中,以加‘+’和减‘-’进行组合运算,找出所得运算结果中绝对值最小的一种组合方式,并将这组数字连同加减运算符号、以及加减运算结果一同打印出来。
实例
例如,输入列表 [2, -3, 5, 6], 使这些数绝对值最小的一个组合方式是:+,-,+, 组合结果是:0,则程序将打印出: 2 + -3 – 5 + 6 = 0
Python实现
import itertools # 进行数字统计的函数 def number_count(user_input): # 统计正数 positive_num = 0 # 统计负数 negative_num = 0 # 统计零的个数 zero_num = 0 # 奇数个数 odd_num = 0 # 偶数个数 even_num = 0 for i in user_input: if i > 0: positive_num = positive_num + 1 if i < 0: negative_num = negative_num + 1 if i == 0: zero_num = zero_num + 1 if i % 2 == 0: even_num = even_num + 1 if i % 2 != 0: odd_num = odd_num + 1 print("正数的个数是{},负数的个数是{},零的个数是{},奇数的个数是{},偶数的个数是{}.".format( positive_num, negative_num, zero_num, odd_num, even_num)) return True def calc(user_input): # 列表长度 list_len = len(user_input) # 计算正负号的长度 symbol_len = list_len - 1 # 列出正负号的所有可能性 flag = 0 result_list = [] j = 0 i_flag = 0 flag_dic = {} # xxx = itertools.product('+-', repeat=symbol_len) for i in itertools.product('+-', repeat=symbol_len): # print(i) flag_dic[i_flag] = i i_flag = i_flag + 1 # for k in i: # for j in range(len(user_input)): for k in i: if j == (len(user_input) - 1): break if (k == '+') & (j == 0): flag = user_input[j] + user_input[j+1] if (k == '-') & (j == 0): flag = user_input[j] - user_input[j+1] if (k == '+') & (j != 0): flag = flag + user_input[j+1] if (k == '-') & (j != 0): flag = flag - user_input[j+1] j = j + 1 result_list.append(flag) flag = 0 j = 0 # result_list.append(flag) # print(flag) # print(result_list) # print(flag_dic) for x in range(len(result_list)): result_list[x] = abs(result_list[x]) print("绝对值最小的组合结果是{}".format(min(result_list))) # 用来存储最小绝对值的下标 flag2 = 0 for x in range(len(result_list)): if result_list[x] == min(result_list): flag2 = x for q in flag_dic.keys(): if q == flag2: stry = '' flag3 = 0 for t in range(len(user_input)): if t == len(user_input) - 1: stry = stry + ' ' +str(user_input[t]) else: stry = stry + ' ' + str(user_input[t]) + ' ' + str(flag_dic[q][flag3]) flag3 = flag3 + 1 stry = stry + ' = ' + str(min(result_list)) print("运算公式可以表示为:{}".format(stry)) # print("运算公式可以表示为:{}".format()) return True if __name__ == "__main__": user_input = eval('['+input("请输入一组数字以逗号隔开:")+']') number_count(user_input) calc(user_input)
实现截图