Vielleicht lese ich die falschen Bücher.
Bei Klassennamen sollte der Anfangsbuchstabe jedes Wortes Groß und aneinander gereiht sein, richtig?
Bei Methoden und Funktionen sollten die Wörter dann kleingeschrieben und mit Unterstrich verbunden sein, richtig?
https://www.python.org/dev/peps/pep-000 ... tion-names
Bei der Formatierung hätte ich ja "%4d" verwenden können, aber was ist, wenn ich anstelle von 4 auf 6 Zahlen auffüllen möchte?
Abhängig von der Anzahl der Stellen des Codes eben. Es wird ja kein %ANZAHL_STELLENd geben.
Deshalb ('0'*anzahl_stellen+str(zahl))[anzahl_stellen*-1:], aber das liest sich ja katastrophal.
Sorted() konnte ich nicht nehmen, da er die Zahlen als Strings sortiert. Und so kommt 57 vor 571 etc.
Habe die Zahlen vor zum string konvertiert um sie als dict Key zu nutzen
Es sieht schon wirr aus was ich da geschrieben habe
Da bekomme ich glatt Angst, wenn ich darüber nachdenke wie ich auf Arbeit programmiere.
Dabei habe ich mehrfach über den Code geschaut.
Ich habe mir any und all angeschaut. Keine Ahnung wie ich die Funktionen nutzen soll,
um über mehrere Listen zu iterieren um darin ein Element an beliebiger Stelle zu suchen. Zumal ich dann ja den Index der Gruppe brauche.
@Sirius3
Wie meinst du das mit den Sets?
Wie kann ich denn 99% Rechenzeit sparen?
Ich habe mich eben an einem zweiten Versuch gewagt
Code: Alles auswählen
class Code(object):
def __init__(self, laenge, zahl = -1):
self._generation = 0
self.laenge = laenge
if zahl >= 0:
self.ziffern = list(map(int, str(zahl)))
else:
self.ziffern = [random.randint(0,9) for x in laenge]
self.codes = [self.get_code()]
def next_code(self, generations = 1):
while generations > 0:
zahl = sum(self.ziffern) % 10
self.ziffern.append(zahl)
self.ziffern = self.ziffern[self.laenge*-1:]
self._generation += 1
self.codes.append(self.get_code())
generations -= 1
return self.get_code()
def get_code(self):
return int(''.join(map(str, self.ziffern)))
def get_codes(self):
return self.codes
def get_generation(self):
return self._generation
def show_generations(self, von=0, bis=None):
text = ''
if not bis: bis = self._generation
for generation in range(von, bis + 1):
text += "Gen: %s - %i\n" % (generation, self.codes[generation])
return text
def __str__(self):
return "Code: %4d - Generation: %i" % (self.get_code(), self._generation)
class CodeGruppe(object):
def __init__(self):
self.gruppen = []
self._codes = []
def add_group(self, codes):
if not self.number_exists(codes[0]):
self.gruppen.append(codes)
self._codes.extend(codes)
def number_exists(self, code):
if code in self._codes:
return True
return False
def get_group(self, number):
return self.gruppen[number]
def get_group_number(self, code):
if not code in self._codes:
return False
for nr in self.get_group_numbers():
if code in self.gruppen[nr]:
return nr
def get_group_numbers(self):
return [nr for nr, liste in enumerate(self.gruppen)]
def get_group_info(self, *arg):
text = ''
if not arg:
arg = self.get_group_numbers()
for nr in arg:
text += "Gruppe: %i laenge: %i\n" % (nr, len(self.gruppen[nr]))
return text
def main():
codegruppe = CodeGruppe()
for i in range(0, 1000):
if not codegruppe.number_exists(i):
code = Code(4, i)
anfang = code.get_code()
while code.get_generation() < 4800:
if anfang == code.next_code():
break
codegruppe.add_group(code.get_codes())
print(codegruppe.get_group_info())
number = codegruppe.get_group_number(1986)
print(codegruppe.get_group_info(number))
print(codegruppe.get_group(number))
if __name__ == '__main__':
main()