individuelle Zahl x mal erneut um 1 erhöhen
Erstmal einen "guten Morgen",
nachdem ich mich mittlerweile die halbe Nacht durch's Internet gewühlt habe, bitte ich euch um die Lösung für ein, für euch sicherlich triviales, Problem.
Der Benutzer soll in meinem Skript 2 Eingaben tätigen, Zahl und Anzahl der Erhöhungen.
Beispiel:
Zahl = 150
Anzahl der Erhöhungen = 4
Python soll nun folgende Berechnung durchführen (und genau da hapert es bei mir):
150 + 151 + 152 + 153
oder
(150) + (150 + 1) + (150 + 2) + (150 + 3)
Allerdings fehlt mir dazu jeglicher Ansatz um dies zu erreichen. Das "Problem" ist ja auch, dass anstatt der 150 und der 4 auch jede beliebige andere Zahl genommen werden kann / soll.
Bei der Eingabe von 327 und 9 sollte dann
327 + 328 + 329 + 330 + 331 + 332 + 333 + 334 + 335
oder
(327) + (327 + 1) + (327 +2) + (327 + 3) + (327+ 4) + (327 + 5) + (327 + 6) + (327 + 7) + (327 + 8)
berechnet werden.
Ich hoffe ich konnte erklären woran es bei mir hapert und was ich erreichen möchte.
Es wäre schön, wenn ihr mir sagen könntet wie das Skript an dieser Stelle zu schreiben ist oder ihr mir auch nur einen Link gibt, wo im Idealfall genau dieses behandelt wird.
PS: Das bei der Anzahl der Erhöhung 4 und 9 eigentlich nur 3 bzw. 8 mal erhöht wird ist mir bewusst und passt auch so. ;-)
LG
zypral
nachdem ich mich mittlerweile die halbe Nacht durch's Internet gewühlt habe, bitte ich euch um die Lösung für ein, für euch sicherlich triviales, Problem.
Der Benutzer soll in meinem Skript 2 Eingaben tätigen, Zahl und Anzahl der Erhöhungen.
Beispiel:
Zahl = 150
Anzahl der Erhöhungen = 4
Python soll nun folgende Berechnung durchführen (und genau da hapert es bei mir):
150 + 151 + 152 + 153
oder
(150) + (150 + 1) + (150 + 2) + (150 + 3)
Allerdings fehlt mir dazu jeglicher Ansatz um dies zu erreichen. Das "Problem" ist ja auch, dass anstatt der 150 und der 4 auch jede beliebige andere Zahl genommen werden kann / soll.
Bei der Eingabe von 327 und 9 sollte dann
327 + 328 + 329 + 330 + 331 + 332 + 333 + 334 + 335
oder
(327) + (327 + 1) + (327 +2) + (327 + 3) + (327+ 4) + (327 + 5) + (327 + 6) + (327 + 7) + (327 + 8)
berechnet werden.
Ich hoffe ich konnte erklären woran es bei mir hapert und was ich erreichen möchte.
Es wäre schön, wenn ihr mir sagen könntet wie das Skript an dieser Stelle zu schreiben ist oder ihr mir auch nur einen Link gibt, wo im Idealfall genau dieses behandelt wird.
PS: Das bei der Anzahl der Erhöhung 4 und 9 eigentlich nur 3 bzw. 8 mal erhöht wird ist mir bewusst und passt auch so. ;-)
LG
zypral
Hallo, willkommen im Forum!
Es gibt eine ganz einfache, kurze Lösung, ein einziger Ausdruck, fertig.
Aber den verrate ich dir nicht, denn vermutlich möchte dein Lehrer, dass ihr euch Gedanken über einen Algorithmus macht und deine Schwierigkeiten damit zeigen, dass das auch nötig ist.
Lösungsidee:
Du beginnst mit einer Zahl a (z.B.150) und erhöhst sie n-mal (z.B. 4). Dazu verwendest du sinnvollerweise eine Schleife. Als Zwischenschritt zur endgültigen Lösung könntest du zunächst ein Miniprogramm schreiben, dass den Anwender zur Eingabe von a und n auffordert und dann die Zahlen a, a+1, a+2 etc. einfach nur ausgibt. Wenn du das geschafft hast, dann könntest du dir Gedanken machen - und evtl. nochmal nachfragen - wie man diese Zahlen dann addieren kann.
Ja, ist trivial und du hättest es einfach haben können: Lesen im Tutorial, ein paar Seiten, dann verstehen und Problem selbst lösen.zypral hat geschrieben:nachdem ich mich mittlerweile die halbe Nacht durch's Internet gewühlt habe, bitte ich euch um die Lösung für ein, für euch sicherlich triviales, Problem.
Es gibt eine ganz einfache, kurze Lösung, ein einziger Ausdruck, fertig.
Aber den verrate ich dir nicht, denn vermutlich möchte dein Lehrer, dass ihr euch Gedanken über einen Algorithmus macht und deine Schwierigkeiten damit zeigen, dass das auch nötig ist.
Lösungsidee:
Du beginnst mit einer Zahl a (z.B.150) und erhöhst sie n-mal (z.B. 4). Dazu verwendest du sinnvollerweise eine Schleife. Als Zwischenschritt zur endgültigen Lösung könntest du zunächst ein Miniprogramm schreiben, dass den Anwender zur Eingabe von a und n auffordert und dann die Zahlen a, a+1, a+2 etc. einfach nur ausgibt. Wenn du das geschafft hast, dann könntest du dir Gedanken machen - und evtl. nochmal nachfragen - wie man diese Zahlen dann addieren kann.
Code: Alles auswählen
from itertools import count, izip, repeat
from operator import add
def main():
print reduce(add,
(a + b
for a, b in izip(repeat(input('Zahl: '),
input('Wiederholungen: ')), count())),
0)
Code: Alles auswählen
from itertools import chain, izip, repeat, count
from functional import compose
import operator as op
ask_int = compose(int, raw_input)
print sum(chain(
*izip(
repeat(ask_int('Zahl: '), ask_int('Wiederholungen: ')), count())))
http://audaxxx.de/functional-0.2.tar.gz
Zuletzt geändert von audax am Samstag 30. August 2008, 09:46, insgesamt 1-mal geändert.
Na mit raw_input funktioniert BlackJack Ausdruck nicht, denn er braucht ja int-Objekte und keine Strings. Das input() war sicherlich schon mit Bedacht gewählt.
Stefan
PS: Die Summer von X bis X + N zu berechnen ist wie die Summe von 0 bis N-1 plus N * X zu berechnen und der gute Gauß wusste schon, wie man diese Summe in einer geschlossenen Formel angeben kann.
Stefan
PS: Die Summer von X bis X + N zu berechnen ist wie die Summe von 0 bis N-1 plus N * X zu berechnen und der gute Gauß wusste schon, wie man diese Summe in einer geschlossenen Formel angeben kann.
Das glaube ich nicht, Tim.sma hat geschrieben:Na mit raw_input funktioniert BlackJack Ausdruck nicht, denn er braucht ja int-Objekte und keine Strings. Das input() war sicherlich schon mit Bedacht gewählt.
int(raw_input("Foo")) ist, was man nutzen sollte, niemals raw_input.
Zahl: __import__("os").remove(__import__("sys").argv[0])
Ich danke euch. Zwar verstehe ich das meiste von eurem Code noch nicht, aber ich werde mich da schon reinfuchsen. Aber ich weiss jetzt wenigstens wo ich ansetzen muss.
@ numerix
Bei mir gibt es keinen Lehrer, diese Zeiten sind bei mir schon einige Jahre her.
Ich bringe mir Python in meiner Freizeit aus reinem Interesse selbst bei (bisherige Programmiererfahrung = 0). Deshalb habe ich auch keinen Ansatz dafür gefunden, da es meine aktuellen Kenntnisse doch noch ein ganzes Stück übersteigt.
@ numerix
Bei mir gibt es keinen Lehrer, diese Zeiten sind bei mir schon einige Jahre her.
Ich bringe mir Python in meiner Freizeit aus reinem Interesse selbst bei (bisherige Programmiererfahrung = 0). Deshalb habe ich auch keinen Ansatz dafür gefunden, da es meine aktuellen Kenntnisse doch noch ein ganzes Stück übersteigt.
So klappt es, aber gibt es dabei noch etwas zu verbessern?
Um auf meinen Eingangspost zurückzukommen:
Als "Vorhanden" wird z.B. 150 und als "Benoetigt" z.B. 4 eingetragen.
Code: Alles auswählen
exist = input("Vorhanden: ")
needed = input("Benoetigt: ")
a = 0
list = []
for i in range (needed):
a1 = exist + a
exist, a = a1, 1
list.append(a1)
print sum(list)
Als "Vorhanden" wird z.B. 150 und als "Benoetigt" z.B. 4 eingetragen.
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
hallo!
man kann das ganze auch so machen:
such dir aus, was dir am besten gefaellt.
mfg
roschi
PS: Es wurde hier schon so oft gesagt: Nimm kein 'input()' wenn es nicht unbedingt notwendig ist! das kann eine grosse sicherheitsluecke im programm sein, weil das, was du da reinschreibst, ausgefuehrt wird. 'int(raw_input())' konvertiert dir die eingaben genau so in integer.
man kann das ganze auch so machen:
Code: Alles auswählen
# eine endlosschleife starten
while True:
try:
x = int(raw_input("Zahl: "))
n = int(raw_input("Wie oft? "))
except ValueError: continue # wenn keine zahlen eingegeben wurden, schleife neu starten -> neu fragen
break # wenn man bis hier hin gekommen ist (eingaben sind gueltige zahlen), schleife abbrechen
y = x # eine kopie von x erzeugen
# jetzt eine schleife starten, die n mal ablaeuft
# dazu eine liste mit n zahlen erzeugen, bei der bei jedem schleifendurchlauf
# ein eintrag aus der zahlen-liste in i gespeichert wird
for i in xrange(1, n):
y += x+i # y mit x+i addieren
print y # das endergebnis ausgeben
mfg
roschi
PS: Es wurde hier schon so oft gesagt: Nimm kein 'input()' wenn es nicht unbedingt notwendig ist! das kann eine grosse sicherheitsluecke im programm sein, weil das, was du da reinschreibst, ausgefuehrt wird. 'int(raw_input())' konvertiert dir die eingaben genau so in integer.
Zuletzt geändert von roschi am Samstag 30. August 2008, 15:11, insgesamt 1-mal geändert.
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Außer dem schon erwähnten raw_input ist es ein bisschen kompliziert. Wozu hast du denn i, wenn du es nicht benutzt?
@roschi
Erzeugt keine Kopie von x.
Code: Alles auswählen
exist = int(raw_input("Vorhanden: "))
needed = int(raw_input("Benoetigt: "))
liste = [] # Du solltest es vermeiden vorgegebenen Namen wie list zu überschreiben
for i in range (needed):
liste.append( exist + i )
print sum(liste)
Code: Alles auswählen
y = x
Code: Alles auswählen
In [18]: x = 23
In [19]: y = x
In [20]: y is x
Out[20]: True
Code: Alles auswählen
a= int(raw_input("Vorhanden: "))
b= int(raw_input("Benoetigt: "))
print sum(range(a, a+b))
Zuletzt geändert von EyDu am Samstag 30. August 2008, 15:15, insgesamt 1-mal geändert.
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
@Darii:
ja, sorry, das war etwas falsch ausgedrueckt.
ich meinte, dass 'y = x' den wert aus x in y schreibt.
mfg
roschi
ja, sorry, das war etwas falsch ausgedrueckt.
ich meinte, dass 'y = x' den wert aus x in y schreibt.
mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
OEHM, ja!
so gehts natuerlich auch ^^
mfg
roschi
so gehts natuerlich auch ^^
mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Vergiss dass es input gibt, list ist ein Built-in dass du nicht überschreiben willst/solltest.
Statt range nimm doch gleich xrange welches einen Iterator zurückliefert, dass ist schneller und solange du die Liste nicht brauchst imho die bessere Lösung.
Desweiteren ist `a` und Zeile 8 völlig überflüssig.
EDIT: Mist zu spät
Statt range nimm doch gleich xrange welches einen Iterator zurückliefert, dass ist schneller und solange du die Liste nicht brauchst imho die bessere Lösung.
Desweiteren ist `a` und Zeile 8 völlig überflüssig.
EDIT: Mist zu spät
Ach mist, da habe ich wieder die offensichtliche Lösung vergessen:
Code: Alles auswählen
(lambda f, b, x: f(f,b,x))(lambda f, b, x: x and b+x+f(f, b, x-1)-1, int(raw_input("base:")), int(raw_input("x:")))
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Und noch eine..
Code: Alles auswählen
a = int(raw_input())
b = int(raw_input())
c = b-1
print a*b+ (c+1)*(c/2)+(c%2*((c/2)+1))
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Hab' auch noch einen...
yipyip
Code: Alles auswählen
def adder(a, i, acc=()):
if i >= 0:
return adder(a, i-1, acc=((a, i),) + acc)
else:
return acc
a = int(raw_input('a? '))
i = int(raw_input('i? '))
print sum(a + i for a, i in adder(a, i-1))
yipyip
Warum benutzt eigentlich niemand einen Generator?
Code: Alles auswählen
def calc(x, y):
while y:
y -= 1
yield x + y
x = int(raw_input('x := '))
y = int(raw_input('y := '))
print sum(calc(x, y))