分配是让用户输入4个数字,然后将它们存储在文本文件中,打开该文本文件,在不同的行上显示4个数字,然后获取这些数字的平均值并将其显示给用户。 到目前为止,这是我的代码:
struct CompositeKey {
typealias CompositeHashable = (Hashable, Hashable) // error: protocol 'Hashable' can only be used as a generic constraint because it has Self or associated type requirements
}
问题是从文本文件中加载数字,然后将每个数字存储为变量,以便我可以得到它们的平均值。 我似乎找不到专门定位每个数字的方法,只是每个字节都不是我想要的。
答案 0 :(得分:3)
您的列表(my_list)只有1个项目 - 包含您想要的项目的列表。
如果你尝试print(len(my_list)),你可以看到这个,所以你的print(my_list [1])超出了范围,因为index = 1的项目不存在。
当您创建一个空列表并附加输出时,您将向列表中添加一个项目,这是变量输出为值保存的内容。
获得你想要的东西
my_list = list(output)
答案 1 :(得分:2)
你有两个主要问题。
首先,.append()
用于将单个项添加到列表中,而不是将一个列表添加到另一个列表。因为您使用了.append()
,所以您最终会得到一个包含一个项目的列表,该项目本身就是一个列表...不是您想要的,以及您的错误消息的说明。将一个列表连接到另一个列表.extend()
或+=
会起作用,但您应该问问自己,在您的情况下是否有必要。
其次,您的列表元素是字符串,您希望将它们作为数字使用。 float()
会为您转换它们。
一般来说,你应该调查" list comprehensions"的概念。他们使这样的操作非常方便。以下示例创建一个新列表,其成员分别是float()
输出的.readlines()
版本:
my_list = [float(x) for x in output]
将条件添加到列表解析中的能力也是一种真正的复杂性保护程序。例如,如果您想跳过任何悄悄进入文件的空白/空白行:
my_list = [float(x) for x in output if len(x.strip())]
答案 2 :(得分:1)
您可以稍微更改程序的结尾,它会起作用:
output = numbers.readlines()
# this line uses a list comprehension to make
# a new list without new lines
output = [i.strip() for i in output]
for num in output:
print(num)
1.0
2.0
3.0
4.0
print sum(float(i) for i in output)
10