Hallo zusammen,
ich bin dabei ein einfaches Programm zu schreiben. 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)
Das ist nur ein kleiner Teil der Liste.. ich muss jetzt aber zb. die Schrauben 401-499 auflisten und das würde ja ewig dauern... gibt es hier eine schnellere Lösung ?
vielen Dank.
Gibt es eine schnellere Lösung (if.. Elif...)
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Lani: Das würde ich nicht als ``if``/``elif``-Kaskade schreiben, sondern als Datenstruktur beschreiben oder als Zeichenkette die in eine Datenstruktur geparst wird. Zum Beispiel in ein Wörterbuch das Schraubennummern auf Boxnummern abbildet. Dafür liesse sich der Code beispielsweise mit folgender Zeichenkette beschreiben: '0154: 0538, 0539; 0165: 0165, 0265; 0101: 0101, 0202, 0650-0668'.
Dafür kann man Code schreiben der das zu einem entsprechenden Wörterbuch verarbeitet.
Dafür kann man Code schreiben der das zu einem entsprechenden Wörterbuch verarbeitet.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Würde auch so funktionierenLani hat geschrieben: ↑Samstag 6. Juli 2019, 17:48Code: Alles auswählen
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)
Code: Alles auswählen
elif Schraubennummer == "0101" or ED == "0202" or int(ED) in range(650, 668):
print("Box 0101")
print(Box)
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Kebap: Wobei man da dann darauf vertrauen müsste ob/dass `range()` hier effizient prüft und nicht linear durch die Elemente geht. Dann vielleicht doch eher:
Code: Alles auswählen
elif Schraubennummer == "0101" or ED == "0202" or '0650' <= ED <= '0668':
print("Box 0101")
print(Box)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Das mit dem Wörterbuch mal als Code:
Code: Alles auswählen
#!/usr/bin/env python3
NUMBER_FORMAT = '04d'
BOX_TO_SCREW_NUMBERS_SOURCE = (
'0154: 0538, 0539; 0165: 0165, 0265; 0101: 0101, 0202, 0650-0668'
)
def iterparse_range(source):
if '-' in source:
start, _, end = source.partition('-')
yield from (
format(number, NUMBER_FORMAT)
for number in range(int(start), int(end) + 1)
)
else:
yield source.strip()
def parse_screw2box_mapping(source):
screw_number2box_number = dict()
for box_source in source.split(';'):
box_number, colon, screws_source = box_source.partition(':')
if not colon:
raise ValueError(f'missing colon in {box_source!r}')
box_number = box_number.strip()
for part in screws_source.split(','):
for screw_number in iterparse_range(part):
if screw_number in screw_number2box_number:
raise ValueError(
f'screw number {screw_number!r} already mapped'
)
screw_number2box_number[screw_number] = box_number
return screw_number2box_number
def main():
screw_number2box_number = parse_screw2box_mapping(
BOX_TO_SCREW_NUMBERS_SOURCE
)
screw_number = input('Bitte Schraubennummer 4stellig eingeben: ').strip()
print(f'Box {screw_number2box_number.get(screw_number, "----")}')
if __name__ == '__main__':
main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman