2012-08-14 97 views
2

我修復了間距問題,並糾正了其他錯誤。現在它正在做我想做的事情,但是我選擇了選擇2,它將打印出員工4次的記錄。如果我輸入另一個員工,它只會打印第二個員工,而不是第一個員工。循環中的Python錯誤

class EmployeeClass: 
def Employee(name, lastName, age, salary): 
    name = name 
    lastName = lastName 
    age = age 
    salary = salary 
def displayEmployee(x): 
    print("Name: " + name + ", " + lastName) 
    print("Age: " + age) 
    print("Salary: " + salary) 

EmployeeArray = [] 

Continue = True 
print ("Employee Information V2.0") 

while Continue == True: 
print ("Welcome to Employee Information") 
print ("1: Add New Record") 
print ("2: List Records") 
print ("3: Quit") 

choice = input() 

if choice == "1": 
    name = input ("Enter First Name: ") 
    EmployeeArray.append(name) 
    if name == "": 
     Continue = False 
     print ("Goodbye!") 
     break 
    lastName = input ("Enter Last Name: ") 
    EmployeeArray.append(lastName) 
    age = input ("Enter Age: ") 
    EmployeeArray.append(age) 
    salary = input ("Enter Salary: ") 
    EmployeeArray.append(salary) 
elif choice == "2": 
    for Employee in EmployeeArray: 
     EmployeeClass.displayEmployee(Employee) 
     Continue = False 
elif choice == "3": 
    print ("Bye!") 
    break 
else: 
    print ("Please choose a valid option") 
    print ("\n") 

回答

0

問題是,您正在使用製表符('\ t')縮進一些行,並使用四個空格('')來縮進其他行。

這可能是一個問題,因爲選項卡並不一定意味着給定數量的空間 - 不同的編輯可能會將其解釋爲相當於2個,4個或8個空格(或者真的是任意數量的空間,但這些是最常見的選擇)。如果縮進只使用空格,或者只使用製表符,那麼這是明確的,而Python很快樂。如果你使用混合,你的代碼的含義將會不同,這取決於製表符等於多少個空格 - 所以不用猜測,可能導致奇怪的錯誤,Python停止並顯示警告消息。

直接的解決方案是使用搜索和替換來替換每個製表符4個空格。較長期的解決方案是使用一個文本編輯器,每當你點擊Tab鍵時它將自動插入4個空格。 (在Windows上,我喜歡Notepad ++,但也有很多其他好的)。

+0

我從你的建議切換到Notepad ++。我更喜歡它。謝謝。 – NineTail 2012-08-14 15:46:51

5

你的錯誤信息會給你一個關於發生這個問題的行號的指示。基本上,你正在混合標籤和空白,所以你只需要使用其中的一個一致的縮進。

PEP8 - The Style Guide for Python建議使用spaces也指出:

當與-t選項調用了Python命令行解釋, 它發出有關非法混合製表符和空格的代碼警告。 使用-tt時,這些警告會變成錯誤。這些選項是高度推薦的 !

從簡單地檢查你的源似乎有在print語句前面的標籤 - 代替那些空白(這也是他們沒有在上面的帖子正確呈現的原因)

while Continue == True: 
    print ("Welcome to Employee Information") 
    print ("1: Add New Record") 
    print ("2: List Records") 
    print ("3: Quit") 

可能還有其他地方,你必須仔細檢查。事實上,我懷疑你的代碼在你的文章中沒有正確縮進的地方可能值得一看。

爲了避免這樣的問題,最好使用一個編輯器或IDE,它將始終使用相同的字符縮進。

+0

謝謝。我無法相信我看不到這一點。 – NineTail 2012-08-14 15:45:53

1

看起來你需要在第一行之後縮進所有東西。

I.E.

class Employee: 
    empCount = 0 
    def _init_(self, name, lastName, age, salary): 
    ... 
0

在Python絕不使用製表符,你可以但它不是常規的。 PEP8公約將使用四個空格。