Seite 1 von 1
Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 11:51
von Daniel123
Hallo,
ich versuche ein kleine Rechenprogramm zu schreiben bei dem man 24 Kommazahlen eingibt. Das Programm soll dann immer 3 Zahlen miteinander multiplizieren (sollte 2925 mögliche Kombinationen geben) und mir dann diejenigen Produkte( mit den einzelnen Faktoren) anzeigen die in einem bestimmten Bereich liegen.
Das Programm muss nicht "schön" aussehen ich bin nur an den Ergebnissen interessiert...
Komme da nicht wirklich weiter..
a = float(input())
b = float(input())
.
.
.
x = float(input())
i=
for i in range ()
print i
Danke im Voraus...
Re: Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 12:24
von Jankie
Verstehe das Problem leider nicht. Kannst du bitte versuchen das ein bisschen genauer zu beschreiben? Also welches Verhalten erwartest du und was passiert stattdessen tatsächlich? (Am Besten anhand eines kleines Beispiels) Und was für Code hast du schon geschrieben? Mit deinem Code da oben kann ich leider nicht viel Anfangen und so (wie er da steht) wird der Code auch nicht laufen.
Re: Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 12:31
von Sirius3
Statt 24 Zahlen einzeln Variablen zuzuweisen, benutzt man dafür Schleifen und Listen.
Dann brauchst Du noch itertools.combinations für die Dreierpäckchen.
Re: Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 13:57
von nezzcarth
Daniel123 hat geschrieben: Freitag 27. September 2019, 11:51
(sollte 2925 mögliche Kombinationen geben)
Ich komme auf 2024 (Binomialkoeffizient); das ist auch, was mit itertools.combinations herauskommt.
Re: Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 15:11
von Daniel123
Erstmal danke dass hier jemand geantwortet hat...
2024 stimmt, bin schon so verwirrt von den Erinnerungen an den Informatik Grundkurs an der Uni dass da nicht mehr viel geht im Köppes...
Es geht um optimale Teambildung und darum aus 24 Leuten die besten 3er Teams in bestimmten Bereichen zu bilden.
Das Programm sollte so laufen, dass ich 24 Zahlen eingebe, dann eine Range(bspw. 22,5-23,9) und dann alle Triples(bspw 2,5*3,1*2,9) angezeigt bekomme die in dieser Range liegen.
Kann mich noch daran erinnern das der damalige Dozent ein komplizierteres Rechenprogramm mit 7-8 Zeilen code in 2 Minuten gemacht hat und hab mir gedacht das sollte doch dann
nicht so kompliziert sein, aber denkste...
Re: Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 15:46
von nezzcarth
Daniel123 hat geschrieben: Freitag 27. September 2019, 15:11
Kann mich noch daran erinnern das der damalige Dozent ein komplizierteres Rechenprogramm mit 7-8 Zeilen code in 2 Minuten gemacht hat und hab mir gedacht das sollte doch dann
nicht so kompliziert sein, aber denkste...
Ja, 8 Zeilen kommt hin:
Code: Alles auswählen
In [1]: from itertools import combinations
In [2]: from functools import reduce
In [3]: from operator import mul
In [4]: from random import uniform
In [5]: numbers = [uniform(-20, 20) for _ in range(24)]
In [6]: triplets = ((triplet, reduce(mul, triplet)) for triplet in combinations(numbers, 3))
In [7]: for item in filter(lambda x:-50.0 < x[1] < 50.0, triplets):
...: print(item)
Allerdings ist das nicht die anfängerfreundliche Variante. 'reduce' und 'lambda' sind zudem umstritten. Mit 'itertools.combinations' lässt es sich auch komfortabel mit den Sprachelementen (Listen, Schleifen, Abfragen, ggf. List Comprehensions), die im offiziellen Tutorial erklärt werden, lösen -- wenn auch nicht in 8 Zeilen

Re: Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 19:07
von nezzcarth
nezzcarth hat geschrieben: Freitag 27. September 2019, 15:46
Mit 'itertools.combinations' lässt es sich auch komfortabel mit den Sprachelementen (Listen, Schleifen, Abfragen, ggf. List Comprehensions), die im offiziellen Tutorial erklärt werden, lösen -- wenn auch nicht in 8 Zeilen
...oder doch:
Code: Alles auswählen
In [1]: from itertools import combinations
In [2]: numbers = [float(input()) for _ in range(24)]
In [3]: for triplet in combinations(numbers, 3):
....: # Wenn es immer nur Triplets sind, könnte natürlich auch einfach die drei Zahlen in einer Zeile multiplizieren...
...: product = 1
...: for item in triplet:
...: product *= item
...: if 30.0 < product < 35.0:
...: print(triplet, product)
Wenn man daraus ein richtiges Skript machen möchte, ist es natürlich doch etwas länger. Man würde die Kernfunktion vmtl. in eine parametrisierbare Funktion kapseln und die Eingabe etwas fehlertoleranter gestalten.
Re: Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 19:19
von Sirius3
Ab Python 3.8 kann man auch einfach math.prod benutzen.
Re: Recht simples Rechenprogramm...
Verfasst: Freitag 27. September 2019, 20:01
von nezzcarth
Sirius3 hat geschrieben: Freitag 27. September 2019, 19:19
Ab Python 3.8 kann man auch einfach math.prod benutzen.
Das wusste ich nicht. Dauert ja nicht mehr so lange, bis es heraus kommt

(aber leider dann doch, bis die Version so abgehangen ist, dass man das Feature bedenkenlos verwenden kann).
Re: Recht simples Rechenprogramm...
Verfasst: Samstag 28. September 2019, 08:18
von Daniel123
Vielen Dank für die Mühe, so weit wäre ich im Leben nicht gekommen.
Wenn ich versuche das Programm laufen zu lassen bekomme ich die Fehlermeldung from (vor itertools) invalid syntax,
ich habe die aktuellste Python version muss ich da noch etwas importieren oder am code ergänzen?
Re: Recht simples Rechenprogramm...
Verfasst: Samstag 28. September 2019, 08:34
von __blackjack__
@Daniel123: Du musst da noch was am Code ”ergänzen”. Einfach mal das Tutorial in der Python-Dokumentation durcharbeiten um zu sehen wie Python-Quelltext aussieht und dann ein ganz kleines bisschen überlegen was denn an dem gezeigten Quelltext anders ist.

Re: Recht simples Rechenprogramm...
Verfasst: Sonntag 29. September 2019, 05:38
von Daniel123
Das Programm läuft jetzt, zumindest ohne Fehlermeldung. Weiß allerdings nicht wie ich die Werte und den Zielbereich eingeben soll.Ich werd mein Bestes geben und mich nochmal melden falls ich nicht weiterkomm... Kaum zu glauben aber ich hab damals das Python Modul mit 2,3 bestanden...
@nezzcarth für die Mühe die du dir da gemacht hast würde ich mich gern erkenntlich zeigen, wenn du einen Verein oder eine Organisation etc. unterstützt würde ich dir zu Ehren da ein paar Euronen spenden...
Re: Recht simples Rechenprogramm...
Verfasst: Sonntag 29. September 2019, 15:51
von nezzcarth
Daniel123 hat geschrieben: Sonntag 29. September 2019, 05:38
Weiß allerdings nicht wie ich die Werte und den Zielbereich eingeben soll.
Im zweiten Beispiel habe ich ja einen Hinweis gegeben, wie man das machen kann. Mit 'input()' kann man Eingaben erfragen und diese müssen dann in den passenden Datentyp (float) konvertiert werden. Die Frage wäre halt auch, welches Interface du dir vorstellst. Wäre das Skript für mich, würde ich vermutlich den Wertbereich als Kommandozeilen Parameter abfragen und die Zahlen aus einer Textdatei einlesen.
Hier mal ein simples funktionsfähiges Beispiel, das sich auf grundlegende Sprachbestandteile beschränkt. Das kann man noch deutlich schöner schreiben:
Code: Alles auswählen
#!/usr/bin/env python
from itertools import combinations
N = 24
def read_number(message=''):
while True:
content = input(message)
try:
return float(content)
except ValueError:
print('Invalid input.')
def main():
lower = read_number('Lower limit: ')
upper = read_number('Upper limit: ')
if lower >= upper:
raise ValueError
numbers = []
print('Numbers:')
for i in range(N):
number = read_number('{}. '.format(i + 1))
numbers.append(number)
print('=' * 79)
for triplet in combinations(numbers, 3):
product = 1
for item in triplet:
product *= item
if lower < product < upper:
print('{} * {} * {} = {}'.format(*triplet, product))
if __name__ == '__main__':
main()
Daniel123 hat geschrieben: Sonntag 29. September 2019, 05:38
@nezzcarth für die Mühe die du dir da gemacht hast würde ich mich gern erkenntlich zeigen, wenn du einen Verein oder eine Organisation etc. unterstützt würde ich dir zu Ehren da ein paar Euronen spenden...
Das ist eine nette Geste, aber kostenlose Hilfe ist ja der Zweck des Forums.

Re: Recht simples Rechenprogramm...
Verfasst: Sonntag 29. September 2019, 15:54
von __blackjack__
Wobei Textdatei ja auch `sys.stdin` sein kann, dann kann man sich überlegen ob man die Zahlen eingeben möchte oder aus einer Datei in das Programm ”reinpipen” möchte.
Re: Recht simples Rechenprogramm...
Verfasst: Montag 30. September 2019, 11:29
von Daniel123
Ich war schon kurz davor aufzugeben und muss auch ehrlich gestehn dass hätte ich so nie hinbekommen...
Nochmals Vielen Dank an alle die hier aktiv waren und @nezzcarth bei mir in der Nähe ist so eine Art buddhistischer Schrein da hab ich ein paar Räucherstäbchen für dich entzündet, wenn dich also in nächster Zeit
plötzlich ein wohlig wärmeliges Gefühl überkommt nicht wundern, dass ist der positive Karma-Regen der auf dich niedergeht ich hoffe das geht klar und fällt noch unter die Rubrik kostenlos
