проблемы с отступами в крошечном скрипте на python :: исправили код - теперь он работает как идеальный - PullRequest
0 голосов
/ 31 октября 2018

были некоторые проблемы с крошечным python-скриптом обновление: см. Новые проблемы, возникшие после того, как я переписал класс ...:

обновление: - наконец-то добрались

#!/usr/bin/env python3
"""
contacts.py
This program uses a Person class to keep track of contacts.
"""
class Person(object):
    """
    The Person class defines a person in terms of a
    name, phone number, and email address.
    """

    # Constructor
    def __init__(self, name, phone, email, padress):
        self.name = name
        self.phone = phone
        self.email = email
        self.padress = padress

    def __str__(self):
        return "Person[name={}, phone={}, email={}, padress={}]".format(self.name, self.phone,
                                                                       self.email, self.padress)
# create instance person = Person(name='John Doe', phone='123454321', email='john.doe@domain.com', adress='1600 Pennsylvania ave., Washington DC')
# access property
    # Accesser Methods (getters)
    def getName(self):
        return self.name
    def getPhone(self):
        return self.phone
    def getEmail(self):
        return self.email
    def getpadress(self):
        return self.padress

 # Mutator Methods (setters)
    def setPhone(self, newPhoneNumber):
        self.phone = newPhoneNumber
    def setEmail(self, newEmailAddress):
        self.email = newEmailAddress
    def setPadress(self, newPadress):
        self.padress = newPadress
    def __str__(self):
        return "Person[name=" + self.name + \
               ",phone=" + self.phone + \
               ",email=" + self.email + \
               ",padress=" + self.padress + \
               "]"

def enter_a_friend():
    name = input("Enter friend's name: ")
    phone = input("Enter phone number: ")
    email = input("Enter email address: ")
    padress = input("Enter friend's padress:")
    return Person(name, phone, email, padress)

def lookup_a_friend(friends):
    found = False
    name = input("Enter name to lookup: ")
    for friend in friends:
        if name in friend.getName():
            print(friend)
            found = True
    if not found:
        print("No friends match that term")

def show_all_friends(friends):
    print("Showing all contacts:")
    for friend in friends:
        print(friend)

def main():
    friends = []
    running = True
    while running:
        print("\nContacts Manager")
        print("1) new contact    2) lookup")
        print("3) show all       4) end ")
        option = input("> ")
        if option == "1":
            friends.append(enter_a_friend())
        elif option == "2":
            lookup_a_friend(friends)
        elif option == "3":
            show_all_friends(friends)
        elif option == "4":
            running = False
        else:
            print("Unrecognized input. Please try again.")
    print("Program ending.")

if __name__ == "__main__":
    main()

исправил код, теперь он работает отлично !! в следующий раз я попытаюсь добавить соединение с БД в этот код - я попытаюсь сделать это с peewee. Peewee - это простая и маленькая ORM. Он имеет несколько (но выразительных) концепций, что делает его легким в освоении и интуитивно понятным в использовании.

a small, expressive ORM
python 2.7+ and 3.4+ (developed with 3.6)
supports sqlite, mysql and postgresql
tons of extensions

Peewee автоматически выведет имя таблицы базы данных из имени класса. Вы можете переопределить имя по умолчанию, указав Атрибут table_name во внутреннем классе «Meta» (наряду с базой данных атрибуты). Чтобы узнать больше о том, как Peewee генерирует имена таблиц, см. раздел «Имена таблиц».

думаю, я попробую

1 Ответ

0 голосов
/ 31 октября 2018

Ошибка

Функции print, находящиеся на полпути через ваш класс, закрывают объявление класса, в результате чего оставшиеся после них элементы не считаются частью класса. Вам необходимо переместить ваши методы доступа к функции print, так как вы создаете экземпляр класса в середине его определения.

Код исправления

Также очень плохая практика - помещать операторы на базовом уровне в ваш файл (не в функцию), а затем следовать функции main() и if __name__ == "__main__":

Вы должны переместить эти операторы печати в вашу функцию main(), чтобы вывести их из глобального пространства, что также исправит ошибки отступа в процессе.

Ваши средства доступа могут быть упрощены с использованием некоторых синтаксисов Python. В Python нет личных переменных (похожих на Java), где компилятор не позволит вам фактически ссылаться на эти значения. Следовательно, вам действительно не нужно использовать средства доступа. Он предотвращает ненужный код, который обычно используется только для установки значения, и обеспечивает более чистый синтаксис, поскольку вы просто устанавливаете значение для свойства, а не в функции. Если вы действительно хотите иметь закрытые переменные, стандарт заключается в том, чтобы просто добавить имя переменной с подчеркиванием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...