2016-09-19 6 views
0

Ich versuche, eine def-Datei innerhalb einer Py-Datei zu erstellen, die extern ist z.Python Def Erstellung innerhalb einer .py

calls.py:

def printbluewhale(): 
    whale = animalia.whale("Chordata", 
        "", 
        "Mammalia", 
        "Certariodactyla", 
        "Balaenopteridae", 
        "Balaenoptera", 
        "B. musculus", 
        "Balaenoptera musculus", 
        "Blue whale") 

    print("Phylum - " + whale.getPhylum()) 
    print("Clade - " + whale.getClade()) 
    print("Class - " + whale.getClas()) 
    print("Order - " + whale.getOrder()) 
    print("Family - " + whale.getFamily()) 
    print("Genus - " + whale.getGenus()) 
    print("Species - " + whale.getSpecies()) 
    print("Latin Name - "+ whale.getLatinName()) 
    print("Name - " + whale.getName()) 

mainwindow.py:

import calls 
import animalist 
#import defs 

keepgoing = 1 

print("Entering main window") 
while True: 
    question = input("Which animal would you like to know about?" #The question it self 
        + animalist.lst) #Animal Listing 


    if question == "1": 
     print(calls.printlion())#Calls the animal definition and prints the characteristics 

    if question == "2": 
     print(calls.printdog()) 

    if question == "3": 
     print(calls.printbluewhale()) 

    '''if question == "new": 
     def new_animal(): 
      question_2=input("Enter the name of the new animal :")''' 

Was ich versuche zu tun, dass question == new eine neue def im calls.py schaffen würde und dass ich einen Namen hinzuzufügen wäre in der Lage zu die def und die Attribute auch.

Ich hatte gehofft, dass du mich so, wie dies zu tun führen könnte, und wenn es nicht möglich ist, bitte nur sagen, und ich werde mein Projekt überdenken :)

+2

Warum denken Sie, dass Sie neue Funktionen pro Frage erstellen müssen? Jede Funktion macht dasselbe, nur mit anderen Daten; speichern * nur die Daten * und haben * eine * Funktion, die diese Daten lädt und anzeigt. –

+0

Mögliches Duplikat von [Python definieren dynamische Funktionen] (http://stackoverflow.com/questions/3687682/python-define-dynamic-functions) – iCart

Antwort

0

Was Sie versuchen, hier zu tun scheint eine Art Workaround, zumindest in der Art, wie du damit umgehen willst.

Wenn ich die Frage richtig verstanden habe, versuchst du ein Python-Skript zu erstellen, das Eingaben vom Benutzer akzeptiert, und wenn diese Eingabe gleich "neu" ist, kannst du einen neuen Tiernamen definieren.

Sie bearbeiten dies derzeit mit einer Menge manueller Arbeit, und dies wird extrem schwierig zu erweitern sein, besonders in Anbetracht der Größe des Datensatzes, mit dem Sie vermutlich arbeiten (das ganze Tierreich?) .

Sie könnten versuchen, es so Handhabung:

einen Datensatz definieren ein Wörterbuch mit:

birds = dict() 
fish = dict() 

whales = dict() 
whales["Blue Whale"] = animalia.whale("Chordata", 
        "", 
        "Mammalia", 
        "Certariodactyla", 
        "Balaenopteridae", 
        "Balaenoptera", 
        "B. musculus", 
        "Balaenoptera musculus", 
        "Blue whale") 

whales["Killer Whale"] = ... # just as an example, keep doing this to define more whale species. 

animals = {"birds": birds, "fish": fish, "whales": whales} # using a dict for this makes you independent from indices, which is much less messy. 

Dies wird Ihren Datensatz aufzubauen. jede whale Klasseninstanz vorausgesetzt (falls vorhanden) erbt Eigenschaften von einer vermutlichen Animal Klasse, die alle das Drucken ausführt, sagen:

Class Animal(): 

    # do some init 

    def print_data(self): 
     print("Phylum - " + self.getPhylum()) 
     print("Clade - " + self.getClade()) 
     print("Class - " + self.getClas()) 
     print("Order - " + self.getOrder()) 
     print("Family - " + self.getFamily()) 
     print("Genus - " + self.getGenus()) 
     print("Species - " + self.getSpecies()) 
     print("Latin Name - "+ self.getLatinName()) 
     print("Name - " + self.getName()) 

können Sie haben dann einen Wal-Klasse:

class Whale(Animal) 

die jetzt hat die print_data-Methode.

for whale in whales: 
    whales[whale].print_data() 

Mit diesem aus dem Weg, können Sie zum Hinzufügen Eingang verschieben: In Ihrem main.py:

while True: 
    question = input("Which animal would you like to know about?" #The question it self 
        + animalist.lst) #Animal Listing 

    try: 
     id = int(question) 
     # if the input can be converted to an integer, we assume the user has entered an index. 
     print(calls.animals[animals.keys[id]]) 
    except: 
     if str(question).lower() == "new": # makes this case insensitive 
      new_species = input("Please input a new species") 
      calls.animals[str(new_species)] = new_pecies 
      # here you should process the input to determine what new species you want 

Darüber hinaus erwähnenswert ist, dass, wenn Sie dicts und Arrays verwenden zu können, Sie können Dinge in eine Datenbank einfügen und Ihre Daten von dort abrufen.

Hoffen das hilft :)