pythonIf语句、For循环、文件读取
说清楚一点,我不是要求任何人为我做这件事。我只是问一个问题寻求指导,这样我就可以继续这方面的工作 我们得到了一个文件,其中给出了不同重量的包裹pythonIf语句、For循环、文件读取,python,python-3.x,for-loop,if-statement,control-structure,Python,Python 3.x,For Loop,If Statement,Control Structure,说清楚一点,我不是要求任何人为我做这件事。我只是问一个问题寻求指导,这样我就可以继续这方面的工作 我们得到了一个文件,其中给出了不同重量的包裹 11 25 12 82 20 25 32 35 40 28 50 51 18 48 90 我必须创建一个程序来计算包裹的数量,将它们分为小包裹、中包裹和大包裹,并找到重量的平均值。 我知道我必须使用If语句和for循环来累积权重计数,并在每个类别中对它们进行分类 小、中、大的术语如下: 小型=10磅和=30磅 如果没有重量的包裹 类,报告消息“N/A”
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
再说一遍,我不是在找人帮我做这件事。我正在寻找下一步和/或调整,我目前必须能够继续前进。谢谢大家! 保持3个变量以计算3个范围,如
weight1Sum、weight2Sum、weight3Sum
并在第一次将其初始化为零,如weight1Sum=0
您的计数
变量正常。当重量在范围内时,您需要为其添加值。然后,u可以将相关权重和从计数中除以,以显示相关值
通常,您需要根据范围维护3个权重并进行更新。首先,您需要三个weight
和count
变量:每个类别一个
那么你对文件的读取有点缺陷。不要从读一行开始,而是让循环开始,并在循环中指定你要做的第一件事weight
也许是这样的:
total_small = 0
total_medium = 0
total_large = 0
count_small = 0
count_medium = 0
count_large = 0
for line in infile:
weight = int(line)
if weight < 10:
total_small += weight
count_small += 1
# And the same for medium and large as well...
total_small=0
总数=0
总数=0
count\u small=0
中位数=0
计数\u大=0
对于填充中的线:
重量=整数(直线)
如果重量<10:
总重量_小+=重量
计数\u小+=1
#中型和大型也一样。。。
然后在循环之后,您可以在打印时轻松计算每个类别的平均值
哦,您不需要检查中间包的上限,这是您需要做的。我认为在处理文件对象时,最好使用
with
语句。这样做的好处是,即使在执行过程中引发异常,文件也会在其套件完成后正确关闭
换句话说,您不需要调用file对象上的close()
方法,并且您可以确保在出现异常时关闭raise
所以
使用起来会更好
with open("packages.txt",'r') as infile:
#following operation
#on infile like reading
平均计算
对于此操作,可以使用。这是一种地图数据结构,一组键、值
对,其中键需要是字符串(在本例中为“小”、“中”、“大”),而值可以是简单类型或其他数据结构,如列表、字典或对象
读取文件时,您将使用基于if条件的权重填充列表,最后您可以使用自由列表并使用sum()和len()计算平均值
阅读此问题的答案,了解如何拥有一个无序的数据结构。如何检查上限?是否必须在我的控制结构的ELIF部分执行此操作?@H.Raydon条件应为“如果重量大于等于10且重量小于30”。任何一本书或教程都应该告诉您如何在这种情况下进行操作。
infile = open("packages.txt", 'r')
#operations on file
...
infile.close()
with open("packages.txt",'r') as infile:
#following operation
#on infile like reading
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)))
def averageValues(values,decimals=1):
float = "%." + str(decimals) + "f"
try:
avg = sum(values)/len(values)
return float % avg
except:
return "N/A"