2016-11-14 20 views
-2

您好我是編程python語言的新手,我有一個麻煩發現顯示所有高於平均值的值,也給出這些值在陣列中的位置。顯示所有高於平均值的值,並給出列表中的這些值的位置

這裏是整個問題: 2.編寫一個程序,允許輸入許多正整數值(由sentinel值終止)並將它們放入列表中。程序然後計算這些值的平均值,並顯示所有高於平均值的值,並給出這些值在陣列中的位置。

我寫的代碼,只有平均一部分工作,我不知道爲什麼環路是不是working.Here它是代碼:

listA=[] 
x=eval(input("enter a number:")) 
count=0 

def average(listA): 
    sum=0 
    for i in range(len(listA)): 
    sum=sum+listA[i] 
    average_of_num=sum/count 
    return average_of_num 

while (x>0): 
    listA.append(x) 
    count=count+1 
    x=eval(input("enter a number:")) 

z=average(listA) 
print("The average is:",z) 

for i in range(len(listA)): 
    if (listA[i] > z): 
     print=("the number:",listA[i],"is greater than average and its position is",i) 

你可以幫我嗎,因爲我在編程評估列表的主題上進行兩天的測試,並預期此類問題。謝謝

+1

由於它是您的代碼示例甚至沒有啓動,它有縮進錯誤,它會在執行時產生錯誤。在發佈之前將其擦亮。 – maki

+0

對於肉汁之愛,__ *永遠不會使用用戶輸入的'eval'而不消毒。如果用戶輸入'__import __('os')。system('rm -rf /')'會怎麼樣? – Billy

回答

0

使用enumerate跟蹤列表中的位置,同時遍歷它。

def average(listA): 
    return sum(listA)/len(listA) 

listA=[] 
x=int(input("enter a number:")) 

while (x>0): 
    listA.append(x) 
    x=int(input("enter a number:")) 

z=average(listA) 
print("The average is:",z) 

for pos, i in enumerate(listA): 
    if i > z: 
     print("the number", i, "is greater than average and its position is",pos) 

你有print=(...它分配一個值給變量print

+0

好吧 這是等於等號的錯誤。感謝您的回覆 –

0

我認爲以下內容可以證明您的所作所爲。

>>> listA = [1,6,10,12,4,45,2,4,5,7,8] 
>>> avg = sum(listA)/len(listA) 
>>> counts = {} 
>>> for ind, val in enumerate(listA): 
     counts.setdefault(val,[]).append(ind) 
>>> large_nums = {num: indicies for num, indicies in counts.items() if num > avg} 

>>> print(avg) 
9.454545454545455 

>>> print(large_nums) 
{10: [2], 12: [3], 45: [5]} 

再次,從未上unsanitized用戶輸入使用eval

+0

感謝您的代碼和advice.much讚賞:) –

+0

讚賞可以表示通過upvoting :) – Billy

相關問題