2017-10-17 25 views
-1

我正在編寫一些計算個人總薪酬的python代碼。從列表中查找薪水信息名稱

我可以通過讓用戶輸入他們的薪水來做到這一點,但我希望他們只是爲了能夠輸入他們的名字,然後名稱在列表的位置0(例如0,1 0,2 0,2等)。

我已經嘗試過使用元組,但它不可調用,字典和列表也不適用於我。

counter = 0 
valid = 0 
employeelist = [["thomas","2","500"], ["jake","1","750"]] 
while True: 
    while True: 
    try: 
     name = str(input("Name:")) 
    except ValueError: 
     print("Error") 
     continue 
    else: 
     break 
    while True: 
    if name == employeelist[counter,0]: 
     print(employeelist[counter]) 
     break 
     valid = 1 
    elif counter = 3: 
     print("invalid name") 
     break 
    else: 
     counter = counter + 1 
    if valid == 1: 
    break 
months = employeelist[counter,1] 
pay = employeelist[counter,1] 
totalpay = int(months) * int(pay) 

編輯:

我不再有字典的代碼,但是我剛纔編輯從代碼[計數器,1]和[0,1]到[窗口] [1]做工精緻謝謝:d

+2

你應該讀作[問],並相應修改了你的問題。 – pvg

+1

試試'if name == employeelist [counter] [0]:'而不是'如果name == employeelist [counter,0]:'。但我同意下面的評論,詞典方法將是完成這種任務的最佳起點。 – roganjosh

+2

_「字典和列表也不適合我。」_字典幾乎肯定是這裏的正確方法。請分享您嘗試使用字典的代碼。 – Kevin

回答

0

下面的代碼是你的內環

employeelist = [["thomas","2","500"], ["jake","1","750"]] 
name = "" 
while True: 
    try: 
     name = input("Name:") 
     break 
    except: 
     print "Error" 
position = -1 
for i, element in enumerate(employeelist): 
    if element[0] == name: 
     position = i 
     break 
if position == -1: 
    print "Invalid Name" 
else: 
    totalpay = int(employeelist[position][1]) * int(employeelist[position][2]) 
+0

你的答案是拋出語法錯誤。 – MooingRawr

+0

我用'enumerate'行做了一個錯字。你遇到了什麼錯誤? –

+1

你不會在'name = input(「Name:)行上關閉引號 – asongtoruin

0

你的代碼有多個錯誤。首先,valid=1,是打破循環 - 意思是valid=1,從未設置。您還正在檢查elif counter = 3這樣,你倒是應該使用兩個平等的跡象,就像這樣:elif counter == 3

你所得到的錯誤,該列表索引必須是不是元組,你有,因爲你正在訪問一個整數或切片多維數組錯誤的方式。它應該是name == employeelist[counter][0]而不是name == employeelist[counter, 0]

您可能會重複遍歷數組,但使用for循環會更簡單。

試試這個方法。

for employees in employeelist: 
    if name == employees[0]: 
      print(employee) 
      valid = 1 
      break 

如果通過孔EmployeeList的迭代,而不if - 阻塞運行,valid = 1,永遠不會被設置。

工作代碼:

counter = 0 
valid = 0 
employeelist = [["thomas","2","500"], ["jake","1","750"]] 

while True: 
    while True: 
    try: 
     name = str(input("Name: ")) 
    except ValueError: 
     print("Error") 
     continue 
    else: 
     break 

    for employees in employeelist: 
    if name == employees[0]: 
     print(employees) 
     valid = 1 
     break 

    if valid == 1: 
    break 

months = employeelist[counter][1] 
pay = employeelist[counter][2] 
totalpay = int(months) * int(pay) 
print(totalpay) 
+0

很好的答案。我最小的問題是我用'employee'重命名'employees'(單數),因爲複數使我認爲你正在訪問一個內部列表 – roganjosh

+0

好吧,如果你願意,可以改變它我同意你對員工而不是員工更有意義,因爲我們通過每個員工迭代一個一。 – Markus