除了不传递值并尝试调用dict之外,您正在计算列表完全填充之前的平均值,在代码中,当您完成附加后,在循环外计算平均值:def posNumAvg(values):

pos = []

# average = 0 don't need to declare variable

for i in values:

if i > 0:

pos.append(i)

average = sum(pos)/len(pos) # only calculate once when done

return average

在allNumAvg中,您已经有了一个值列表,然后再创建一个完全相同的值的列表,只需使用值本身:

^{pr2}$

也可以使用列表理解:def num_list():

# "-9999" is the sentinel value which will break the loop if entered

values = [int(i) for i in iter(lambda:input("Enter any amount of numbers or -9999 to quit: "),"-9999")]

return values

def all_num_avg(values):

average = sum(values) / len(values)

return average

def pos_num_avg(values):

pos = [x for x in values if x > 0]

return sum(pos) / len(pos)

def non_pos_avg(values):

non = [i for i in values if i < 1]

return sum(non) / len(non)

values = num_list()

def store():

return {'all': all_num_avg(values), 'pos': pos_num_avg(values), 'def': non_pos_avg(values)}

我还使用下划线更改了函数名,它与pep-8 style guide一致

理想情况下,在获取用户输入时,最好使用try/except来捕获来自用户的错误输入:def num_list():

values = []

while True:

try:

inp = int(input("Enter any amount of numbers or -9999 to quit: "))

if inp == -9999:

return values

values.append(int(inp)) # any input that cannot be cast will raise a ValueError which we catch and then inform the user

except ValueError:

print("Invalid input")

return values

如果用户没有输入正数或负数,那么您还将得到一个zeroDivisionError,因此您还需要通过再次使用try/except或返回默认值(如果列表为空)来处理这种情况,我们可以使用默认值,因为我们已经验证了输入以确保是一个数字:def non_pos_avg(values):

non = [i for i in values if i < 1]

return sum(non) / len(non) if non else 0

所有这些都可以在一个函数中完成,在末尾更新dict并返回它:def store():

store_dict = {}

values = []

while True:

try:

inp = int(input("Enter any amount of numbers or -9999 to quit: "))

if inp == -9999:

break

values.append(int(inp))

except ValueError:

print("Invalid input")

pos = [x for x in values if x > 0]

non = [i for i in values if i < 1]

# catch cases where user does not enter a mixture of pos and negative nums of break on the first iteration

# if values etc.. will all evaluate to False for an empty list

store_dict["all"] = sum(values) / len(values) if values else 0

store_dict["pos"] = sum(pos) / len(pos) if pos else 0

store_dict["def"] = sum(non) / len(non) if non else 0

return store_dict

print(store())

因为您使用的是python3.4,所以我们也可以让statistics module来处理平均值:from statistics import mean

def store():

store_dict = {}

values = []

while True:

try:

inp = int(input("Enter any amount of numbers or -9999 to quit: "))

if inp == -9999:

break

values.append(int(inp))

except ValueError:

print("Invalid input")

pos = [x for x in values if x > 0]

non = [i for i in values if i < 1]

store_dict["all"] = mean(values) if values else 0

store_dict["pos"] = mean(pos) if pos else 0

store_dict["def"] = mean(non) if non else 0

return store_dict

根据您的评论,如果您想返回dict和列表,您可以同时返回并解压缩:def store():

store_dict = {}

values = []

while True:

try:

inp = int(input("Enter any amount of numbers or -9999 to quit: "))

if inp == -9999:

break

values.append(int(inp))

except ValueError:

print("Invalid input")

pos = [x for x in values if x > 0]

non = [i for i in values if i < 1]

store_dict["all"] = mean(values) if values else 0

store_dict["pos"] = mean(pos) if pos else 0

store_dict["def"] = mean(non) if non else 0

return store_dict,values

d, vals = store() # unpack

print(d, vals)

python创建函数如何调用字典对象_我不知道如何用Python创建一个调用我函数的字典...相关推荐

  1. python中字典的value可以为任意对象_手把手教你学Python之字典

    字典是一种无序可变的容器,字典中的元素都是"键(key):值(value)"对, "键"和"值"之间用冒号隔开,所有"键值对&qu ...

  2. python数据符号函数等一切皆对象_第一章:Python高级编程-Python一切皆对象

    第一章:Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 "" ...

  3. c++全局类对象_史上最全 Python 面向对象编程

    面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5 ...

  4. python字典从头到尾_从头到尾开发并销售python API

    python字典从头到尾 I recently read a blog post about setting up your own API and selling it. 我最近阅读了一篇有关设置和 ...

  5. python函数能否增强代码可读性_总结的几个Python函数方法设计原则

    在任何编程语言中,函数的应用主要出于以下两种情况: 1.代码块重复,这时候必须考虑用到函数,降低程序的冗余度 2.代码块复杂,这时候可以考虑用到函数,增强程序的可读性 当流程足够繁杂时,就要考虑函数, ...

  6. python iterable对象_一篇文章看懂 Python iterable,

    Python 中的 iterable, iterator 以及 generator,一直是非常亲密但是难以区分的概念.nvie 有一个很好的 帖子阐述了它们之间的关系,但是内容偏向于概括和总结,对于新 ...

  7. python爬虫需要调用什么模块_适合新手练习的Python项目有哪些?Python爬虫用什么框架比较好?...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. Python爬虫一般用什么框架比较好?一般来讲,只有在遇到比较大型的需求时 ...

  8. python英语字典程序修改_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  9. r语言lm函数找不到对象_错误:在R中找不到函数....

    在存在NAMESPACE的情况下,另一个问题是你试图从包foo运行一个未导出的函数. 例如(人为,我知道,但是):> mod  plot.prcomp(mod)Error: could not  ...

最新文章

  1. 如何找到自己的优势并坚定信念执行下去
  2. Dalvik与JVM区别
  3. [数据库]简单SQL语句总结
  4. CentOS 安装 VMware Tools 详细方法
  5. leetcode 593. Valid Square | 593. 有效的正方形(Java)
  6. endnote x9中科大版_文献管理软件Endnote的一些使用经验
  7. 用Python分析了20万场吃鸡数据,有不少有趣的发现
  8. 替换 Nginx 使用 Caddy 作为博客静态服务器
  9. php 数组重复最多,PHP获取数组中重复最多元素的简单示例
  10. ajax java base64 图片储存
  11. 3D Slicer Programmatically Set Slice Offset and Intersections 用代码修改Slicer中的切片偏移和交叉点显示...
  12. FIR滤波器——Matlab实现
  13. 电脑罗盘时钟html怎么设置成桌面,抖音网红款Word Clock罗盘时钟电脑桌面屏保设置教程-完整版...
  14. 程序员为什么要转行项目经理
  15. 人民币兑换菲律宾比索去哪些银行?
  16. short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
  17. 陕西副市长猝死,其“豪宅”爆光震惊国人
  18. 一个软件公司需要多少前端_建一个微商城需要多少钱?
  19. ccsa安学网小程序_CCSA安学网题库及答案
  20. 年货来咯:精选年度最受欢迎干货,覆盖客户端、服务端、前端、数据、算法……...

热门文章

  1. 计算机上怎么带源地址ping,怎么带源地址去ping服务器
  2. linux mysql 修改root密码_MySQL忘了root密码,如何修改?
  3. Linux性能分析工具汇总
  4. SURF 与 SIFT的共同点与区别
  5. opencv基础:罗德里格斯旋转公式(Rodrigues' rotation formula)推导 rodrigues()函数原理
  6. 空格 路径_python处理Windows平台上路径有空格
  7. ie 出现 append无效
  8. ACdream区域赛指导赛之手速赛系列(7)
  9. 如何在EJB3中JNDI调用SessionBean(二)
  10. HDU2030 汉字统计【文本处理】