CIE IGCSE预发布材料已经发送,它要求通常年满15岁的儿童在1个月内完成编程中的巨大任务,这并不总是可行的,因为所需的水平有时太高。今年的任务是:
一位农民记录了一群奶牛的产奶量。
每头奶牛都有唯一的 3位数身份代码。
每头牛每天可以挤奶两次,每周七天。
每次奶牛的奶量都以每小时奶牛正确的小数点(产量)记录。
牛群的大小已固定。
在本周末,计算每周奶牛的总产量和平均产量。
农民确定那周产奶量最多的奶牛。
农民还会发现当周四天或更多天产奶量低于12升的奶牛。
需要一个程序来记录每头奶牛每次挤奶时的产量,计算每头奶牛的每周总奶量和一周内每头奶牛的平均产量
该计划还必须确定当周产量最高的奶牛,并确定任何一周产奶量少于12升的奶牛。
为农民编写和测试一个或多个程序。您的程序程序必须包含适当的数据输入提示。
错误消息和其他输出需要清楚明确地理解。
所有变量,常量和其他标识符必须具有有意义的名称
您需要完成这三项任务。每项任务都必须经过全面测试。
任务1 - 记录产量
为TASK 1编写一个程序,记录一周的牛奶产量。每次奶牛挤奶时,程序都会记录并存储识别码编号和产量。
任务2 - 计算统计数据
使用您在TASK 1中记录的数据,计算并显示每周牛奶的每周总牛奶量。计算并显示一周内每头奶牛的平均产量,精确到最接近的整升。
任务3 - 确定生产少量牛奶的最高产和奶牛。 扩展任务2以识别和显示产生最多牛奶的奶牛的身份代码编号和每周产量。同时识别并显示任何奶牛的身份代码编号,一周内产量低于12升牛奶,持续四天或更长时间。
我尝试使用Python来解决它,这就是我所达到的目标
# Recording the yield
Cow = []
Yield = []
Cows = int(input("How many cows are in the herd? "))
Day = 0 #to configure the milking
for i in range(14):
if i%2 == 1:
Milking = "Second"
else:
Milking = "First"
Day += 1
print("Day ", Day, "; ", Milking, " milking")
for i in range(Cows):
while True:
try:
Code = int(input("Enter code: "))
if Code > 999 or Code < 100:
raise ValueError
except ValueError:
print("Enter a 3-digit code please")
else:
Cow.append(Code)
while True:
try:
Y = float(input("Enter volume of milk in litres: ")) #A range check for yield can be added
except ValueError:
print("Please enter a positive number")
else :
Yield.append(Y)
break
print(Yield)
print(Cow)
break
Total = 0 #Finding the Total and Average
for i in range(len(Yield)):
Total += Yield[i]
Average = Total/Cows
round(Total, 0)
round(Average, 0)
print("Total weekly volume of milk: ", int(Total), " litres")
print("Average yield per cow: ", int(Average), " litres")
print(len(Cow))
#Identifying most productive and low producing cows
Total = []
LessMilk = ""
YieldOnDay = 0
Milking = 0
for j in range(Cows):
T = 0
Days = 0
Cow = Cow[j] #A cow chosen
for i in range(len(Cow)):
if Cow[i] == Cow:
T += Yield[i] #Incrementing the total for each cow
YieldOnDay += Yield[i]
Milking += 1
if Milking == 2: # 2 since checking for days, not `milkings
if YieldOnDay < 12: #Checking if yield is less than 12 Days += 1 Milking = 0 YieldOnDay = 0 if Days > 3: #Low yield for 4 or more days
LessMilk = LessMilk + str(Cow[j]) + ", "
Total.append(T)
print(Total)
for i in range(Cows):
if Total[i] == max(Total):
print("Cow ", Cow[i], " has the highest yield of ", Total[i], " litres")
print("Cows which produced less than 12 litres of milk: " , LessMilk)
正如您所看到的,我无法解决唯一的代码问题和每头奶牛的平均值(上面以粗体显示)。我最后一部分的代码不起作用。它显示在我到达交互式shell的中途
之后Traceback (most recent call last):
File "C:\*****\******\*******\********************\*********************", line 52, in <module>
for i in range(len(Cow)):
TypeError: 'int' object is not subscriptable
我不知道为什么。我尝试了它仍然无法工作的一切。
我想根据牛群中的奶牛数量制作清单。我的第一个输入并不知道如何。 如果我使用数组而不是列表,它会更好吗?Python是否适合这项任务?
非常感谢您阅读并保留全世界所有IGCSE学生的最佳考虑因素。我和全世界所有IGCSE学生都非常感谢您的帮助。
答案 0 :(得分:0)
这可能为时已晚,但在错误行之前,您有一行Cow = Cow[j]
,它会擦除您的整个Cow
列表并将其替换为一头奶牛。这就是下一行引发错误的原因 - 单个牛不是一个列表,所以你不能得到它的len
。为了将来参考,请使您的变量名称非常清晰,这样您就不会混淆它们。例如,您可以将Cows
重命名为n_cows
(对于&#34;奶牛数量&#34;),您可以将Cow
重命名为cows_list
。祝你的IGCSE好运!
PS:此外,保持简短的问题将有助于更快地找到答案。只需快速描述您的问题就足够了 - 您不需要发布整个项目。