String erstellen und speichern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Python-Nichtskönner
User
Beiträge: 15
Registriert: Donnerstag 30. April 2020, 10:14

Hallo Leute,

ich möchte einen zufallsgenerierten String erzeugen der

1. 100000 Kombinationen aus den Buchstaben A,B,C,D erstellt, allerdings immer nur 4 Buchstaben nebeneinander stehen
2. Ich möchte die Kombination dauerhaft speichern

z.B. sowas: AABC ACDA BBBB CBDA ...

3. Zusätzlich möchte ich in einem 2. Programm auf der Basis des ersten Programms eine Kombination speichern, bei der drei gleiche Kombinationen nebeneinander stehen

also z.B.: ..., ABCD , ABCD , ABCD , .... , CCDA , CCDA , CCDA , ....


Könnt ihr mir helfen wie ich das anstelle. Keine Sonderzeichen!
Danke schonmal im voraus
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Also möchtest du einfach 100.000x irgendeine Kombination aus ABCD haben? Das würde ich mit random.sample machen. Oder random.shuffle funktioniert auch. Den Rest der Aufgabe verstehe ich nicht.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Und wo hast Du dabei in konkretes Problem? Zufallszeichen kann man sich mit dem random-Modul würfeln lassen, alles andere ist schon in der Grundausstattung dabei: for-Schleifen, Stringmanipulation, Ausgabe in eine Datei. Wenn Dir eines der Stichworte nichts sagt, dann lies das Kapitel in den Materialien nach, die Du zum Lernen von Python benutzt.
Python-Nichtskönner
User
Beiträge: 15
Registriert: Donnerstag 30. April 2020, 10:14

Also ich erkläre die Aufgabe nochmal:

Ich möchte einen Python einen String mit 100000 Kombinationen die aus einer zufälligen Kombination der Buchstaben A, B, C, D bestehen!
Bsp. ABDC ACDD AAAA

Wie erzeugt man den Code?
Wie kann ich diese Kombinationen dauerhaft speichern?

Zusätzlich will ich in einem zweiten Programm nur einen bestimmten Code speichern, bei dem mindestens einmal drei gleiche Kombinationen nebeneinander stehen. Also ...,ABBA, ABBA, ABBA, ...
Python-Nichtskönner
User
Beiträge: 15
Registriert: Donnerstag 30. April 2020, 10:14

Sirius3 hat geschrieben: Donnerstag 30. April 2020, 10:56 Und wo hast Du dabei in konkretes Problem? Zufallszeichen kann man sich mit dem random-Modul würfeln lassen, alles andere ist schon in der Grundausstattung dabei: for-Schleifen, Stringmanipulation, Ausgabe in eine Datei. Wenn Dir eines der Stichworte nichts sagt, dann lies das Kapitel in den Materialien nach, die Du zum Lernen von Python benutzt.
Ich weiß nicht wie ich das alles zusammen machen soll. Könntest du mir vielleicht ein Beispiel schicken?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Zeig uns was du hast, und wir erklaeren dir Fehler und geben Hinweise. Einfach auf fertigen Code hoffen wird eher nicht passieren.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Python-Nichtskönner: Zerlege Dein Problem in kleinere Teilprobleme. Und die wieder in Teilprobleme, solange bis Du Teilprobleme hast die man mit einer Funktion mit wenigen Zeilen Code lösen kann. Das machst Du dann und testet die jeweilige Teillösung. Wenn sie funktioniert, gehe zur nächsten Teillösung über. Am Ende hast Du dann das Gesamtproblem gelöst.

Ein Teilproblem ist offensichtlich eine Zeichenkette mit vier Zeichen aus der Zeichenmenge "A", "B", "C", "D" zu bilden. Wenn Du das mit einer Funktion gelöst hast, kannst Du die 100.000 mal aufrufen und die Ergebnisse in einer Liste sammeln. Und hast damit das zweite, etwas grössere Teilproblem gelöst 100.000 solcher Zeichenketten zu erzeugen. Dann kommt das dritte Teilproblem die Zeichenketten in der Liste in eine Textdatei zu speichern. Und schon ist das Gesamtproblem gelöst.

An Modulen aus der Standardbibliothek sind hier das `random`-Modul und `pathlib` hilfreich, und man muss sich ein bisschen mit Zeichenketten und Listen auseinandersetzen.

Edit: Spasseshalber mal in JavaScript:

Code: Alles auswählen

#!/usr/bin/env node
'use strict';
let fs = require('fs');


function createRandomString(alphabet, length) {
  let result = [];
  for (let i = 0; i < length; i++) {
    result.push(alphabet[Math.floor(Math.random() * alphabet.length)]);
  }
  return result.join('');
}


function createRandomStrings(alphabet, length, count) {
  let result = [];
  for (let i = 0; i < count; i++) {
    result.push(createRandomString(alphabet, length));
  }
  return result;
}


function save(filename, strings) {
  fs.writeFileSync(filename, strings.join(' ') + '\n');
}


function main() {
  save('test.txt', createRandomStrings('ABCD', 4, 100000));
}


if (require.main === module) main();
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Die einfachste Möglichkeit wäre meiner Meinung nach erstmal die Buchstaben A, B, C und D in eine Liste zu packen. Wenn du die dann in einer Liste hast, dann kannst du die Liste zufällig durchmischen. Am Ende musst du eigentlich nur noch aus der durchgemischten Liste wieder einen String erstellen und das ganze dann halt 100000x machen.

Um die Kombinationen zu erstellen brauchst du:

Eine for Schleife (um die gewünschten Aktionen 100000x auszuführen)
random.shuffle() (um die Liste zu durchmischen)
string.join() (um aus der Liste wieder einen String zu machen)
list() (Um aus dem String eine Liste zu machen)

Den Rest solltest du mit ein bisschen Eigeninitiative und einer Suchmaschine deiner Wahl schon schaffen.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@Jankie: da Buchstaben mehrfach vorkommen dürfen (ABBA) reicht shuffle nicht. Das Erzeugen der Buchstabenkombinationen hat der TE in einem anderen Beitrag ja auch schon hinbekommen.
LeSchakal
User
Beiträge: 25
Registriert: Dienstag 5. Februar 2019, 23:40

Geh das Problem doch einfach schrittweise an!

Als erstes könntest du versuchen, eine einzelne zufällige Kombinationen aus den Buchstaben A,B,C,D zu erzeugen.
Antworten