鱼C论坛

 找回密码
 立即注册
查看: 745|回复: 3

[已解决]不定长参数问题

[复制链接]
发表于 2019-7-28 14:25:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. def add(*args):
  2.         result = 0
  3.         for x in args:
  4.                 result += x
  5.         print("结果是: %d"%result)
  6. def main():
  7.         arr = []
  8.         i = 0
  9.         while True:
  10.                 num = int(input("请输入第%d个元素: "%(i+1)))
  11.                 arr.append(num)
  12.                 if i==100:
  13.                         add(int(arr))
  14.                         break
  15.                 else:
  16.                         add(int(arr))
  17.                         break

  18. if __name__ == '__main__':
  19.         main()
复制代码



这代码我不知道怎末改-->-<求助,谢谢
最佳答案
2019-7-28 15:13:02
本帖最后由 fallout.nj 于 2019-7-28 15:17 编辑

add(int(arr))这句有问题,arr本身是个列表,如果需要arr作为参数传入add的话,需要拆包!

稍微改了一下你的代码,不然100有点大
  1. def add(*args):
  2.     result = 0
  3.     if len(args) > 0:  # 加入长度判断
  4.         for i in args:
  5.             if isinstance(i, int):  # 加入非整数判断
  6.                 pass
  7.             else:
  8.                 print('参数中不能有非数字参数')
  9.                 exit()

  10.         for x in args:
  11.             result += x
  12.         print("结果是: %d" % result)

  13.     else:
  14.         print('结果是:0')


  15. def main():
  16.     arr = []
  17.     i = 0
  18.     while i < 10:  # 次数控制放在这里
  19.         num = int(input("请输入第%d个元素: " % (i+1)))
  20.         arr.append(num)

  21.         add(*arr)  # 这里将arr拆包后传入add
  22.         i += 1


  23. if __name__ == '__main__':
  24.     main()
复制代码


另外代码还有个问题就是当输入非整数的时候就退出了,你自己可以优化代码以解决这个问题哈!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-28 14:38:42 | 显示全部楼层
  1. def add(*args):
  2.     result = 0
  3.     for x in args:
  4.         result += x
  5.     print("结果是: %d" % result)
  6. def main():
  7.     arr = []
  8.     i = 0
  9.     while True:
  10.         num = int(input("请输入第%d个元素: " % (i + 1)))
  11.         arr.append(num)
  12.         if i == 100:
  13.             add(*arr)
  14.             break
  15.         else:
  16.             add(*arr)
  17.             i += 1
  18. if __name__ == '__main__':
  19.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-28 15:00:02 | 显示全部楼层
         怎么改取决于你的需求和意图,你的求助很让人莫名其妙。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-28 15:13:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 fallout.nj 于 2019-7-28 15:17 编辑

add(int(arr))这句有问题,arr本身是个列表,如果需要arr作为参数传入add的话,需要拆包!

稍微改了一下你的代码,不然100有点大
  1. def add(*args):
  2.     result = 0
  3.     if len(args) > 0:  # 加入长度判断
  4.         for i in args:
  5.             if isinstance(i, int):  # 加入非整数判断
  6.                 pass
  7.             else:
  8.                 print('参数中不能有非数字参数')
  9.                 exit()

  10.         for x in args:
  11.             result += x
  12.         print("结果是: %d" % result)

  13.     else:
  14.         print('结果是:0')


  15. def main():
  16.     arr = []
  17.     i = 0
  18.     while i < 10:  # 次数控制放在这里
  19.         num = int(input("请输入第%d个元素: " % (i+1)))
  20.         arr.append(num)

  21.         add(*arr)  # 这里将arr拆包后传入add
  22.         i += 1


  23. if __name__ == '__main__':
  24.     main()
复制代码


另外代码还有个问题就是当输入非整数的时候就退出了,你自己可以优化代码以解决这个问题哈!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 14:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表