评论

收藏

[办公软件] 数字统计练习

电脑办公 电脑办公 发布于:2021-12-25 18:01 | 阅读数:291 | 评论:0

本人研究生阶段,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)

实现截图
DSC0000.png



关注下面的标签,发现更多相似文章