2012-08-14 96 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公约将使用四个空格。