缩进错误Python初学者

缩进错误Python初学者,python,syntax,Python,Syntax,我在课堂幻灯片上自学python,但我正在努力让代码正常工作,我看不出我做错了什么!另外,我如何实现address,使其位于不同的类中?我不确定这样做最好。这是我迄今为止的尝试 出现的错误: self.phone=电话 缩进错误:意外缩进 简单Python电话簿 将输入扫描更改为原始输入 x = raw_input('Select an option -> ')` 为我工作 raw\u input提供您所期望的字符串 还要确保没有用于缩进的选项卡。将所有选项卡替换为4个空格。将输入扫描

我在课堂幻灯片上自学python,但我正在努力让代码正常工作,我看不出我做错了什么!另外,我如何实现address,使其位于不同的类中?我不确定这样做最好。这是我迄今为止的尝试

出现的错误:

self.phone=电话

缩进错误:意外缩进

简单Python电话簿
将输入扫描更改为原始输入

x = raw_input('Select an option -> ')` 
为我工作

raw\u input
提供您所期望的字符串


还要确保没有用于缩进的选项卡。将所有选项卡替换为4个空格。

将输入扫描更改为原始输入

x = raw_input('Select an option -> ')` 
为我工作

raw\u input
提供您所期望的字符串


还要确保没有用于缩进的选项卡。将所有制表符替换为4个空格。

首先,有一些打字错误妨碍了代码的正常运行。例如,这一行:
Address=input(“| Address:”)
应该用
Address
来写(注意双D)

要将Address添加为新类,只需像处理
Person
一样进行即可。在同一文件中,可以有任意多个类:

class Address:
    def __init__(self, address='No address defined'):
        # You could create separate fields for each part of the address, 
        # for better results in a bigger system
        self.address = address

    def __str__(self):
        return str(self.address)
您还需要更改
Person
对象的构建方式:

class Person:
    def __init__(self, name, age, phone, address):
        # instance variables, unique to each Person
        self.name = name
        self.age = age
        self.phone = phone
        self.address = Address(address)

    def __str__(self):
        # instance variables, unique to each Person
        return "Name: {}\nAge: {}\nPhone: {}\nAddress: {}".format(self.name, self.age, self.phone, self.address)

def createPerson():
    print("\nNew person")
    name = input('  | Name : ')
    age  = input('  | Age  : ')
    phone = input('  | Phone  : ')
    address = input('  | Address  : ')
    print("Creating person...\n")
    person = Person(name, age, phone, address)
    persons.append(person)
请注意,在重写
Person
\uuu str\uu
方法时,应使用
格式
,而不是使用
+
运算符连接字符串和值。例如,如果您处理多个值,并且不需要担心数字与字符串的连接问题,那么性能会有所提高

我还建议您使用不同的方法搜索用户。我认为检查用户名是否包含密钥比检查用户名是否包含密钥更好,因为它搜索整个字符串,而不仅仅是字符串:

match = [p for p in persons if key in p.name]
最后,我对您的入口点做了一些更改,以使其对用户更直观,并防止不必要的输入:

def exit():
    print("Shutting down.")

if __name__ == '__main__':
    choices = { "1" : createPerson , "2" : searchPerson, "3": exit  }
    x = '1'
    while x != "3":        
        print(' (1) Create new person')
        print(' (2) Search for a person')    
        print(' (3) Quit')        
        x = input('Select an option -> ')

        if x not in ['1', '2', '3']:
            print('Please choose one of the available options.')
            continue

        choices[x]()

当然,这些更改大部分都是建议,您可以接受也可以不接受。我确信还有一些其他的修改可以将代码变成更“pythonic”的东西,但是如果需要的话,可以在其他地方由其他人来解决。唯一真正的答案是将Address转换为一个单独的类。希望有帮助:)

首先,有一些打字错误妨碍了代码的正常运行。例如,这一行:
Address=input(“| Address:”)
应该用
Address
来写(注意双D)

要将Address添加为新类,只需像处理
Person
一样进行即可。在同一文件中,可以有任意多个类:

class Address:
    def __init__(self, address='No address defined'):
        # You could create separate fields for each part of the address, 
        # for better results in a bigger system
        self.address = address

    def __str__(self):
        return str(self.address)
您还需要更改
Person
对象的构建方式:

class Person:
    def __init__(self, name, age, phone, address):
        # instance variables, unique to each Person
        self.name = name
        self.age = age
        self.phone = phone
        self.address = Address(address)

    def __str__(self):
        # instance variables, unique to each Person
        return "Name: {}\nAge: {}\nPhone: {}\nAddress: {}".format(self.name, self.age, self.phone, self.address)

def createPerson():
    print("\nNew person")
    name = input('  | Name : ')
    age  = input('  | Age  : ')
    phone = input('  | Phone  : ')
    address = input('  | Address  : ')
    print("Creating person...\n")
    person = Person(name, age, phone, address)
    persons.append(person)
请注意,在重写
Person
\uuu str\uu
方法时,应使用
格式
,而不是使用
+
运算符连接字符串和值。例如,如果您处理多个值,并且不需要担心数字与字符串的连接问题,那么性能会有所提高

我还建议您使用不同的方法搜索用户。我认为检查用户名是否包含密钥比检查用户名是否包含密钥更好,因为它搜索整个字符串,而不仅仅是字符串:

match = [p for p in persons if key in p.name]
最后,我对您的入口点做了一些更改,以使其对用户更直观,并防止不必要的输入:

def exit():
    print("Shutting down.")

if __name__ == '__main__':
    choices = { "1" : createPerson , "2" : searchPerson, "3": exit  }
    x = '1'
    while x != "3":        
        print(' (1) Create new person')
        print(' (2) Search for a person')    
        print(' (3) Quit')        
        x = input('Select an option -> ')

        if x not in ['1', '2', '3']:
            print('Please choose one of the available options.')
            continue

        choices[x]()

当然,这些更改大部分都是建议,您可以接受也可以不接受。我确信还有一些其他的修改可以将代码变成更“pythonic”的东西,但是如果需要的话,可以在其他地方由其他人来解决。唯一真正的答案是将Address转换为一个单独的类。希望有帮助:)

如果您希望人们帮助您,您需要发布错误消息。或者,如果没有错误,请解释您希望代码执行的操作,以及您得到的结果。您在缩进中混合了制表符和空格,这会混淆Python。只使用其中一个。最好是空间。(我将此作为注释而不是答案发布,因为我不理解您问题中的“实现地址,以便它位于不同的类中”部分)至少有一个输入错误:您将一个名为
address
的变量赋值为一个'd',但希望用两个'd'作为
address
访问它。你的标题说你有一个错误。缩进在代码的StackOverflow呈现中看起来是正常的,但如果是错误,请验证缩进在整个过程中是一致的,并且您没有混合空格和制表符。如果希望人们帮助您,则需要发布错误消息。或者,如果没有错误,请解释您希望代码执行的操作,以及您得到的结果。您在缩进中混合了制表符和空格,这会混淆Python。只使用其中一个。最好是空间。(我将此作为注释而不是答案发布,因为我不理解您问题中的“实现地址,以便它位于不同的类中”部分)至少有一个输入错误:您将一个名为
address
的变量赋值为一个'd',但希望用两个'd'作为
address
访问它。你的标题说你有一个错误。缩进在代码的StackOverflow呈现中看起来不错,但如果是错误,请验证缩进在整个过程中是一致的,并且没有混合空格和制表符。如果OP使用3.X,并且他可能是因为他将
print
视为一个函数,那么
raw\u input
就不是一个内置的乐趣