【问题标题】:min() and max() give error: TypeError: 'float' object is not iterablemin() 和 max() 给出错误:TypeError: 'float' object is not iterable
【发布时间】:2013-11-03 11:46:43
【问题描述】:
markList=[]
Lmark=0
Hmark=0
while True:
    mark=float(input("Enter your marks here(Click -1 to exit)"))
    if mark == -1:  break
    markList.append(mark)

    markList.sort()
    mid = len(markList)//2
    if len(markList)%2==0:
        median=(markList[mid]+ markList[mid-1])/2
        print("Median:", median)

    else:
        print("Median:" , markList[mid])

    Lmark==(min(mark))
    print("The lowest mark is", Lmark)

    Hmark==(max(mark))
    print("The highest mark is", Hmark)

我的程序是一个使用列表的基本成绩计算器。我的程序要求用户将他们的成绩输入到一个列表中,然后在列表中计算你的平均分并找到你的最低和最高分。我找到了平均值,但我似乎无法弄清楚如何找到最低和最高等级。你能告诉我公关告诉我该怎么做吗?

【问题讨论】:

  • 这是一个非常糟糕的问题标题。此外,您似乎几乎在那里。 lowest_mark = min(markList) 会起作用,您在最后一个附加值上调用 min()
  • Lmark==(min(mark))Hmark==(max(mark)) 中,== 不是赋值而是比较。尝试改用=
  • 我认为每次在列表中执行minmax 以获得@millimoose 建议的相应值是不必要的。在您的算法中,您在分配最小值和最大值之前已经对列表进行了排序,因此您只需获取排序列表的第一个和最后一个元素。
  • 它说'float'对象不可迭代的原因是你调用min(mark)而不是@millimoose建议的min(markList)。更改它以查找整个列表的最小值,同样更改max() 语句以查找整个列表的最大值。 mark 是单个标记,min() 不知道如何处理单个 float 值,因此您会遇到异常。
  • 是的,一旦您对列表进行了排序,markList[0] == min(markList) 将为真,markList[-1] == max(markList) 将为真。顺便说一句,按照你写这个的方式,它会为输入的每个标记重新计算所有内容。这对于调试来说很好,但是一旦你让它工作,我想你会想要在输入循环下面取消缩进代码。

标签: python-3.x


【解决方案1】:

您的代码有两个问题:

  • == 是比较运算符,而不是赋值
  • 标记是您的最后一个成绩,而不是成绩列表

那些最小/最大行应该是:

Lmark = min(markList)
Hmark = max(markList)

或者,因为您的列表已经排序:

Lmark = markList[0]
Hmark = markList[-1]

【讨论】:

    猜你喜欢
    • 2021-08-08
    • 2018-07-28
    • 2022-08-18
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2022-12-15
    • 2016-03-25
    相关资源
    最近更新 更多