programm einfacher schreiben

Lani21

Newbie
Registriert
Juli 2019
Beiträge
6
Hallo zusammen,

ich bin dabei ein einfaches Programm zu schreiben in Python. Es soll eine Art Frage Maschine sein. zb. es existieren 1000 Schrauben. Diese sind von 1-1000 nummeriert.
Diese sollen in unterschiedliche Boxen (20 Boxen) verteilt werden. Ich habe mit einer if... Elif Schleife angefangen, aber dies ist sehr aufwendig.

Gibt es hier evtl. eine schnellere Lösung ? Oder wenigstens einen Tipp, wie ich Zahlen zb. 5-100 schneller schreiben kann anstatt alle 95 Varianten aufzuzählen ?

Hier mal ein Stück meines Codes, den ich bisher geschrieben habe:

Box = input("Bitte Schraubennummer 4stellig eingeben:")
if Schraubennummer == "0538":
print("Box 0154")
elif Schraubennummer == "0539":
print("Box 0154")
elif Schraubennummer == "0165":
print("Box 0165")
elif Schraubennummer == "0265":
print("Box 0165")
elif Schraubennummer == "0101" or ED == "0202" or ED == "0650" or ED == "0651" or ED == "0652" or ED == "0653" or ED == "0654" or ED == "0655" or ED == "0656" or ED == "0657" or ED == "0658" or ED == "0659" or ED == "0660" or ED == "0661" or ED == "0662"\
or ED == "0663" or ED == "0665" or ED == "0666" or ED == "0667" or ED == "0668": // HIER KÖNNTE MIR ZB EIN 0650-0668 HELFEN
print("Box 0101")
print(Box)

Gibt es hier nicht eine bessere Lösung?

Vielen Dank und Liebe Grüße Lani
 
Python:
if 650 <= number <= 668:
    print("Box 0101")
 
Deine Frage bzw das Problem ist immernoch relativ unklar..
Du sagst
Diese sollen in unterschiedliche Boxen (20 Boxen) verteilt werden.
Was heißt das? Der Benutzer des Programms verteilt sie? Du verteilst sie vor und der Benutzer kann erfragen, wo sie liegen? Wer entscheidet in dem Fall, dass sie dort liegen?

Wenn du uns diese Fragen beantwortest lässt sich das sicherlich sehr viel schöner lösen.
 
  • Gefällt mir
Reaktionen: tony_mont4n4
Statt
Python:
... or ED == "0202" or ED == "0650" or ED == "0651" ...
kannst du auch
Python:
 or ED in ["0202", "0650", "0651", ...]
schreiben, die Liste musst du dann natürlich noch weiter auffüllen und solltest du in eine sinnvoll benannte Variable schreiben.

@kuddlmuddl Das sollte der/die TE selbst tun. Helfen heißt nicht, es komplett zu überarbeiten und zu lösen.
 
Ich möchte die Schraubennummer eingeben (zb. 0654) und das Programm soll mir daraufhin die Box Nr ausspucken
 
Ich möchte die Schraubennummer eingeben (zb. 0654) und das Programm soll mir daraufhin die Box Nr ausspucken
Ja aber woher weiß denn dein Programm, wo die Schraube liegt? Diese Info muss ja irgendwo hinterlegt sein. Oder willst du das für jede der 1000 Schrauben selber im Quellcode angeben?
 
DaysShadow schrieb:
Statt
Python:
... or ED == "0202" or ED == "0650" or ED == "0651" ...
kannst du auch
Python:
 or ED in ["0202", "0650", "0651", ...]
schreiben, die Liste musst du dann natürlich noch weiter auffüllen und solltest du in eine sinnvoll benannte Variable schreiben.

@kuddlmuddl Das sollte der/die TE selbst tun. Helfen heißt nicht, es komplett zu überarbeiten und zu lösen.


Danke für den Tip. Ich schreibe es mal um 😊
Ergänzung ()
 
Lani21 schrieb:
:o


Hier noch eine Lösung, in der man den Computer mehr machen lässt. Das Beispiel ist in TypeScript, ich denke mit dem Umsetzen in Python verstehst du, was da passiert:

Javascript:
type ScrewRange = {
  begin: number;
  end: number;
};

type ScrewBox = {
  name: string;
  ranges: ScrewRange[];
};

const boxes: ScrewBox[] = [
  {
    name: "0165",
    ranges: [{ begin: 165, end: 165 }]
  },
  {
    name: "0165",
    ranges: [{ begin: 265, end: 265 }]
  },
  {
    name: "0154",
    ranges: [{ begin: 538, end: 539 }]
  },
  {
    name: "0101",
    ranges: [
      { begin: 101, end: 101 },
      { begin: 202, end: 202 },
      { begin: 650, end: 668 }
    ]
  }
];

function getScrewBox(screwType: number): ScrewBox | undefined {
  for (const box of boxes) {
    for (const range of box.ranges) {
      if (range.begin <= screwType && range.end >= screwType) {
        return box;
      }
    }
  }

  return undefined;
}

const input = "0655"; /* get input somehow */
const inputWithoutLeadingZero = input.replace(/^0+/, "");
const screwType = parseInt(inputWithoutLeadingZero);

const screwBox = getScrewBox(screwType);
alert(screwBox == undefined ? "screw not found" : screwBox.name);
 
kuddlmuddl schrieb:
Ja aber woher weiß denn dein Programm, wo die Schraube liegt? Diese Info muss ja irgendwo hinterlegt sein. Oder willst du das für jede der 1000 Schrauben selber im Quellcode angeben?

In welche Box welche Schraube kommt binde ich doch mit den if Schleifen ein
 
Lani21 schrieb:

Ich weiß nicht in welchem Kontext du die Aufgabe bearbeitest, aber gewöhne dir das ab. Es gibt keine if-Schleifen. Es gibt Bedingungen die du mit dem if umsetzen kannst, aber eine Schleife findet damit nicht statt ;)
 
Lani21 schrieb:
In welche Box welche Schraube kommt binde ich doch mit den if Schleifen ein

1.) Es gibt keine If-schleifen. Du meinst If-Abfrage

2.) Mach das bitte nicht hardgecoded... Ließ z.B. eine Datei ein in der das steht.

3.) Nutze Funktionen. Das macht den Code wesentlich übersichtlicher.
 
  • Gefällt mir
Reaktionen: tony_mont4n4
Ich geh mal davon aus, dass das Programm ne Übung sein soll.
Eigentlich trennt man Daten von Code (Daten in Datenbank), so dass im Idealfall der Endnutzer die Drecksarbeit mit dem Anlegen der einzelnen Kästen hat lol.
 
  • Gefällt mir
Reaktionen: kim88 und areiland
Und was machst du, wenn der Chef will, dass in die Box ab nächster Woche statt der Schraube "0265" jetzt die Schraube "0165" soll? Oder wenn beschlossen wird, dass ein zusätzliches Regal angeschafft werden soll?
Jedes mal den Quellcode entsprechend erweitern?

Mit Phyton kenn ich mich nicht aus, wird aber hier auch nicht viel anders sein als mit anderen Sprachen.
Wenn es einfach gehalten werden soll, dann Lager die Zuordnung in ein txt file aus.
z.b. als csv oder schöner als xml
csv ist sicherlich am einfachsten umzusetzen alla:
Kiste;Schraube;Schraube n...;
0235;123;124;4663;576;
0236;163;1264;46663;5476;


Lies Config File
get kisten
get user Input
for each kiste in kisten
kiste.contains input --> tu irgendwas
ende
 
Leider gibt es in python kein Switch, wobei das bei 1000 cases auch keinen Spaß macht. Evtl ist das aber etwas für dich : How to implement a switch-case statement in Python

Wirklich sinnvoll klingt die Aufgabe aber generell nicht. Die Auslagerung der Zuordnung vom Quellcode in eine Datei kann sicherlich den Code aufgeräumter gestalten, weil du keinen 1000-case Moloch - sei es mit if oder sonstwas - im Code hast.
 
Einfacher geht's mit einem dictionary


Python:
def findbox (boxes,screwnumber ):
  for box,screws in boxes.items() :
    if screwnumber in screws:
      return box
  return None

myboxes = {
  'box1' : [100,101,65,107],
  'box2' : [99,102,110,20,21,27]     }

box = findbox(myboxes,10002)
print (box)
 
  • Gefällt mir
Reaktionen: new Account()
@cloudman
Das Dictionary würde man eher umgekehrt implementieren, da man es aufgrund der Schraubennummer durchsucht. Dein Dictionary ist gut, wenn du wissen willst welche Schrauben in welche box gehören, aber nicht um die Zufällige Schrauben zu verteilen.
Ansonsten hast du den ganzen Vorteil eines Dictionary's gegenüber einer Liste nicht mehr.
Das kann man dann auch ganz einfach als .ini Datei Bearbeiten und laden.

so rum:
Python:
myboxes = {
  1: 'box1',
2 'box7',
3: 'box13',
4: 'box1',
5: 'box7',
6: 'box13',
7: 'box1',
8: 'box7',
9: 'box13',
   };

//und so abfragen:
var tmpBox= myboxes[713];
 
  • Gefällt mir
Reaktionen: new Account()
@Multithread stimmt deine Variante ist deutlich schneller

Hier noch eine Variante die "mein" Dictonary in "deins" umwandelt :)
Je nachdem wie man die Ausgangsdaten haben möchte

Python:
myboxes = {
  'box1' : [100,101,65,107],
  'box2' : [99,102,110,20,21,27] }

### aus myboxes ein dict mit screwnumber als index und boxnumber als Wert  erstellen
myscrews = {}
for box,screws in myboxes.items() :
  for screw in screws:
      myscrews[screw] = box
print("myscrews:" , myscrews)

print (myscrews[101])
print (myscrews[110])
## fails with key error - make sure to catch it
print (myscrews[1])
 
Ehrlich, Leute.

Was sind denn das für Antworten ;)

"Programmieren" soll doch dazu dienen, das Leben zu erleichtern und nicht möglichst komplizierte zusätzliche Probleme aufzuwerfen ...

Naja, immerhin haben @Florian und @Raijin (die zwar auch noch nicht so lange hier im Forum sind) bereits die imho richtige Lösung entworfen. Wir haben 20 Boxen und XYZ schrauben pro Box, also so ein Text-File
[schrauben.txt]
; Kiste Schrauben
1 1, 4-80, 110-112
2 2, 3
3 15-339, 400-449
...
...
18 600-799
19 800-889
20 890-1000
Dann liest man das Ding ein und packt es in ein dictionary. Der Rest ist relativ leicht zu machen, insbesondere mit den hier bereits vorgestellten Lösungen. Vermutlich in 5-6 Zeilen Python.

my € 0,02
 
  • Gefällt mir
Reaktionen: BeBur
Hallo nochmal und Danke für Eure Hilfe.

Ich habe nun eine csv Datei erstellt: ein kleiner Teil davon:
Depot 154;154, 254, 538, 539
Depot 165;165, 265
Depot 101;101, 202, 650-668
Depot 176;176, 276, 1151-1169
Depot 178;178, 606, 609-619
Depot 147;147, 247

Der Versuch diese in Python einzubinden funktioniert nicht. Ich hatte es so versucht:

dateihandler = open('verladewege.csv')

inhalt = dateihandler.read()

Und so:

import csv file = open("verladewege.csv", "r") csv_reader = csv.reader(file, delimiter=",")

Ich bekomme folgenden Fehler angezeigt:

Error 2 No such file or Directory: ‚verladewege.csv


Dann könnte ich noch Tipps gebrauchen wie ich in Python weiter vorgehe.

Der User soll eine Zahl eingeben, z.B. 650
(ED = input(„Bitte Zahl eingeben“) als Print Ausgabe:
print(„wird im“, Depot x, „gelagert“)

Ich danke Euch sehr für die bisherige Hilfe
 

Ähnliche Themen

Zurück
Oben