2016-03-27 20 views
0

Bu, çalışan adları ve bunlara karşılık gelen maaşları içeren iki boyutlu bir diziyi girecek olan modüldür. Burada program sadece bir giriş alıyor ve kullanıcı "*" yazana kadar daha fazla giriş eklemek yerine devam ediyor. Bunu nasıl düzeltirim?Nasıl yapılır: TypeError: 'float' nesnesi abonelik değildir ve çalışmayan bir .append

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 

şamandıra Girdi işlevi burada

floatInput() 

çağrılması yazdırırım ve isim ve maaş listesi arasında yineleme için döngü için kullanırlar.

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

Burada maaşların ortalamasını buluyorum.

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

maaş buraya

salaryMean() 

Ben binlerce maaş dönüştürmek İşlev anlamına çağrılıyor. İşte

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

Ben ortalama dan 5.000 $ aralığında kazanmak bütün emplpyees ben

"TypeError: 'float' object is not subscriptable" 

alıyorum burada olduğunu göstermek ve hat

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

işaret .... Bunu nasıl düzeltirim?

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 

Görünen adın çağrılması İşlev.

displayNames() 

cevap

0

sizin .append sorunu gidermek için (aynı zamanda ikinci return beyanı asla yürütmek iki listeyi iade etme konusunda aşağıya bakınız gidiyor): Eğer dönen çünkü döngü devam edilmez

olduğunu

döngü içinde, böylece işlev sonlandırılıyor. Döngünün dışındaki return ifadenizi taşıyın (tek geçişsiz).

while not done: 
    # do stuff 
return salary, names 

düzeltmek için senin TypeError Buradaki sorunun olduğunu düşünüyorum: Yerine

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) 

ile döngü söz konusu bütününü değiştirin:

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

Diğer bazı sorunlar - İki return ifadeler var birbiri ardına geliyor - işlev ilk dönüşten sonra yürütmeyi bitirecek ve geri dönüşü bunun altında gerçekleştirmeyecek; Hem salary hem de names ve return names, salary öğelerini kullanmak isterseniz (ve salaries numaralı telefona salary numarayı yeniden adlandırabiliriz), böylece insanlar kolayca yalnızca bir değil, yalnızca bir grup maaş olduğunu söyleyebilirler.

İlgili konular