【问题标题】:CIE IGCSE Pre-release MaterialCIE IGCSE 预发布材料
【发布时间】:2018-03-09 15:12:45
【问题描述】:

CIE IGCSE 预发布材料已发送,它要求通常 15 岁的孩子在 1 个月内完成编程中的巨大任务,这并不总是可能的,因为有时要求的水平太高。今年的任务是:

一位农民记录了一群奶牛的产奶量。

每头奶牛都有一个唯一的 3 位数身份代码。

每头奶牛可以每周 7 天每天挤两次奶。

每次挤奶时,每头奶牛的牛奶量以升为单位记录,精确到小数点后一位(产量)。

牛群的规模固定。

在一周结束时,计算每头奶牛一周的总产量和平均产量。

农夫找出那一周产奶最多的奶牛。

农场主还会识别出在该周的四天或更多天产奶少于 12 升的奶牛。

需要一个程序来记录每头奶牛每次挤奶的产量,计算牛群每周的总产奶量以及一周内每头奶牛的平均产量。

该计划还必须确定该周产量最高的奶牛,并确定该周四天或更多天产奶量低于 12 升的奶牛。

为农民编写和测试一个或多个程序。您的程序必须包括适当的数据输入提示。

错误信息和其他输出需要清晰易懂。

所有变量、常量和其他标识符都必须有有意义的名称

您将需要完成这三个任务。每个任务都必须经过全面测试。

任务 1 – 记录产量

为任务 1 编写一个程序来记录一周的牛奶产量。每次挤奶时,程序都会记录并存储识别码和产量。

任务 2 - 计算统计数据

使用您在任务 1 中记录的数据,计算并显示牛群每周的总牛奶量,直至最近的每升。计算并显示一周内每头奶牛的平均产量,精确到整升。

任务 3 – 确定产奶量最高的奶牛和产奶量少的奶牛。 扩展任务 2 以识别和显示产奶量最多的奶牛的身份代码和每周产量。还可以识别并显示一周内连续 4 天或以上产奶量低于 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 学生都非常感谢您的帮助。

【问题讨论】:

    标签: python r python-3.x


    【解决方案1】:

    这可能为时已晚,但就在错误行之前,您有 Cow = Cow[j] 行,它将擦除您的整个 Cow 列表并用一头牛替换它。这就是下一行引发错误的原因——一头牛不是一个列表,所以你不能得到它的len。为了将来参考,让你的变量名非常清楚,这样你就不会混淆它们。例如,您可以将Cows 重命名为n_cows(表示“奶牛数量”),您可以将Cow 重命名为cows_list。祝你的 IGCSE 考试好运!

    PS:另外,保持你的问题简短有助于更快地找到答案。只需快速描述您的问题就足够了 - 您无需发布整个项目。

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多