gpt4 book ai didi

Python; If 语句、For 循环、文件读取

转载 作者:行者123 更新时间:2023-12-01 08:51:29 27 4
gpt4 key购买 nike

需要明确的是,我并不是要求任何人为我做这件事。我只是提出一个问题寻求指导,以便我可以继续从事这方面的工作。

我们得到一个文件,其中给出了不同包裹的重量;

11
25
12
82
20
25
32
35
40
28
50
51
18
48
90

我必须创建一个程序来计算包裹的数量,将它们分类为小,中,大,并找到重量的平均值。我知道我必须使用 If 语句和 for 循环来累积权重计数并将其分类到每个类别中。

小、中、大的术语如下;

小号 < 10 磅

中号 >= 10 磅。和 < 30 磅

大号 >= 30 磅。

如果没有重量的包裹输入类别后,报告消息“N/A”而不是平均值(如果您尝试除以 0 你会得到一个异常)。

这是我到目前为止的代码,我不知道是否必须在 if、elif 和 else 之后包含 for 循环。或者如果我所拥有的一切都步入正轨。

infile = open("packages.txt", 'r')
count = 0
line = infile.readline()
weight = int(line)
for line in infile:
if weight < 10:
count = count + 1
weight = weight + int(line)
while weight < 10:
try:
avg = weight / count
except ValueError:
print("N/A")
elif weight >= 10:
if weight < 30:
weight = weight + int(line)
count = count + 1
avg = weight/count
else:
weight = weight + int(line)
count = count + 1
avg = weight/count

输出必须看起来像这样

Category    Count    Average
Small 0 N/A
Medium 7 19.9
Large 8 53.5

再说一遍,我并不是在找人为我做这件事。我正在寻找下一步和/或调整我目前必须能够继续前进的内容。谢谢!

最佳答案

首先,我认为在处理文件对象时最好使用 with 语句。这样做的优点是,即使在途中引发异常,文件也会在其套件完成后正确关闭。

换句话说,您不需要在文件对象上调用 close() 方法,并且您可以确定在发生异常时会关闭该方法。

所以

infile = open("packages.txt", 'r')
#operations on file
...
infile.close()

使用起来会更好

with open("packages.txt",'r') as infile:
#following operation
#on infile like reading

平均计算

对于此操作,您可以使用dictionary 。这是一个 map 数据结构,一组 key,value 对,其中 key 需要是字符串(在您的情况下为“小”,”中”,“大”)和可以是简单类型或其他数据结构,如列表、字典或对象。

在阅读文件时,您将根据 if 条件使用权重填充列表,最后您可以使用空闲列表并使用 sum() 和 len() 计算平均值。

packages = {"small": [],
"medium": [],
"large": []}

with open("packages.txt","r") as packs:
for pack in packs:
weight = int(pack)
if weight < 10:
packages["small"].append(weight)
elif weight < 30:
packages["medium"].append(weight)
else:
packages["large"].append(weight)
###Printing the the average###
table_row = "%s\t%i\t%s" # string for formatting output, not the best solution
for key,weights in packages.items():
print(table_row % (key, len(weights), averageValues(weights)))

其中 averageValues() 是以下函数,它计算平均值并将其像字符串一样返回我们想要的小数位数。

def averageValues(values,decimals=1):
float = "%." + str(decimals) + "f"
try:
avg = sum(values)/len(values)
return float % avg
except:
return "N/A"

阅读此问题的答案,了解如何拥有 ordered representation of the dictionary ,这是一个无序的数据结构。

关于Python; If 语句、For 循环、文件读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53086431/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com