【问题标题】:How to fix TypeError: 'float' object is not subscriptable and an .append that isn't working如何修复 TypeError:'float' 对象不可下标且 .append 不起作用
【发布时间】:2016-03-27 02:21:59
【问题描述】:

该模块将输入一个包含员工姓名及其相应工资的二维数组。 这里程序只接受一个输入并继续前进,而不是添加更多输入,直到用户输入“*”。我该如何解决这个问题?

salary = []
names = []

def floatInput():
    done = False
    while not done:
        nameIn = input("Please enter the employee name or * to finish: ")
        salaryIn = input("Please enter the salary in thousands for " + nameIn + ": ")
        try:
            salaryIn = float(salaryIn)            
        except:
            print("Program was expecting a positive integer or floating point number!")
        if nameIn == "*":
           done = True
        else:
            salary.append(salaryIn)
            names.append(nameIn)
        return salary
        return names

调用浮点输入函数

floatInput()

这里我使用了一个 for 循环来打印和遍历姓名和薪水的列表。

for i in range(len(names)):
    print(names[i] + ", " + str(salary[i]))

我在这里找到工资的平均值。

def salaryMean():
    mean = sum(salary) / float(len(salary))
    print("The mean of the salaries is: " + str(mean))
    return mean

调用工资平均函数

salaryMean()

我在这里把薪水换算成千。

for i in range(len(names)):
    salary = salary[i] * 1000
print(salary)

在这里,我显示了平均收入在 5,000 美元范围内的所有员工 这是我得到的地方

"TypeError: 'float' object is not subscriptable" 

它指向线

"if salary[x] >= (mean - 5000) and salary[x] <= (mean + 500):"

....我该如何解决这个问题?

def displayNames():
    done = False
    x = 0
    while not done:
        if done:
            break
        if salary[x] >= (mean - 5000) and salary[x] <= (mean + 5000):
            print(salary[x])
        x += 1
        if x > len(salary):
            done = True

调用显示名称函数。

displayNames()

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    要解决您的.append 问题(您的第二个return 语句也永远不会执行,请参阅下文,了解如何返回两个列表):

    你的循环没有继续是因为你在循环内部返回,因此终止了函数。将您的 return 语句移到循环之外(单个取消缩进)。

    while not done:
        # do stuff
    return salary, names
    

    修复你的TypeError 我认为问题出在:

    for i in range(len(names)):
        salary = salary[i] * 1000 # Up to this point salary is a list, here it turns into the ith value of the list multiplied by 1000
    print(salary)
    

    相反,将整个 for 循环替换为:

    salary = [s*1000 for s in salary]
    for s in salary:
        print(s) # This should now print the multiplied salaries.
    

    其他一些问题 - 您有两个 return 语句,然后是另一个 - 该函数将在第一次返回后完成执行,并且永远不会执行低于该语句的返回;如果您想同时返回salarynames,请使用return names, salary(也可以将salary 重命名为salaries,这样人们就可以很容易地看出这是一堆薪水,而不仅仅是一个)。

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      相关资源
      最近更新 更多