Seite 1 von 1

Ausgaben

Verfasst: Dienstag 22. November 2016, 10:58
von Bindl
Hi zusammen,
ich soll ein Programm schreiben das mir folgendes ausgibt:
00001
00010
00100
01000
10000

und einmal
1 2 3
4 5 6
7 8 9

Ich kann mir kaum vorstellen das hier gemeint ist das ich das in die print() Funktion so ein eintippe.
Kann mir da jemand helfen?

Ich denke mal da könnte eine for Schleife in Frage kommen.

Code: Alles auswählen

for i in range(1,6)
für die erste Ausgabe bei der zweiten (1,4).
Nur wie sieht dann die print() Funktion aus?


Danke schonmal im voraus

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 11:04
von BlackJack
@Bindl: Bei der zweiten Aufgabe wohl eher 1 bis 10 bzw. 0 bis 9 (und bei der ersten könnte man auch 0 bis 5 in Betracht ziehen).

Was gibt es denn in der Aufgabenbeschreibung für Einschränkungen? Weil es hier wirklich eine Menge Möglichkeiten gibt das umzusetzen.

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 11:12
von Bindl
Hi,
keine.
Die Aufgabenstellung lautet "Schreiben Sie ein Programm, dass folgende Ausgabe liefert:".
Ich dachte vielleicht kann mir jemand den besten, bzw. geschicktesten, Weg zeigen oder mich dort hinführen.

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 11:51
von BlackJack
@Bindl: Also wenn es wirklich *keine* Einschränkungen gibt, könnte man ja auch tatsächlich zwei ``print``-Anweisungen schreiben die einfach diese Daten ausgeben. Ich bin mir aber ziemlich sicher das hier der Umgang mit Schleifen gelernt werden soll. ;-)

Und dafür kann man sich überlegen wie die äussere Schleife jeweils aussehen muss/kann. Man kann ja beispielsweise eine Schleife über die Anzahl der auszugebenden Zeilen machen, oder eine Schleife über die auszugebenden Werte. Je nach dem wofür man sich entscheidet, sieht der Schleifenkörper dann anders aus. Manchmal ist das eine günstiger, manchmal das andere. Das gleiche gilt bei Zählschleifen für Start- und Endwert für die Laufvariable. Man kann für n Durchläufe von 0 bis n-1 gehen oder von 1 bis n. Manchmal ist das eine günstiger, manchmal das andere.

Bei der ersten Aufgabe musst Du Dir über das Muster klar werden was allen Zeilen gemeinsam ist. Und dann wie man aus einer Zahl, der Laufvariablen, dieses Muster berechnen kann und damit auch erstellen kann. Um es aus diesen aus der Laufvariable berechneten Zahlen dann zu erzeugen kann man entweder wieder Schleifen verwenden, oder sich mal anschauen welche ”Rechenoperationen” in Python auf Zeichenketten implementiert sind.

Bei der zweiten Aufgabe müsstest Du erst einmal überlegen ob Du die Schleife über die Zeilenanzahl oder über die Werte machen möchtest. Oder Du löst die Aufgabe auf beide Arten und hast dabei dann doppelt so viel gelernt, weil Du ein Gefühl dafür bekommst wie man das auf verschiedene Arten löst und welche Vor- und Nachteile beziehungsweise Unterschiede es dabei gibt.

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 13:58
von Bindl
Hi,
also für das erste habe ich mal folgendes gemacht:

Code: Alles auswählen

for i in range(1,6):
    if i == 1:
        print("{0} {0} {0} {0} {1}".format(0,1))
    elif i == 2:
        print("{0} {0} {0} {1} {0}".format(0,1))
    elif i == 3:
        print("{0} {0} {1} {0} {0}".format(0,1))
    elif i == 4:
        print("{0} {1} {0} {0} {0}".format(0,1))
    else:
        print("{1} {0} {0} {0} {0}".format(0,1))
Es funktioniert, aber so wirklich gefällt es mir nicht.
Das Muster ist mir schon klar, nur wie geben ich an das die 1 immer eins weiter nach links rücken soll?

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 14:06
von Sirius3
@Bindl: hier kannst Du die Schleife und alle if einfach weglassen, weil in jedem Schleifendurchgang genau in if-Zweig durchlaufen wird. Du kannst Dir ja mal überlegen, wie viele "0" für jedes i vor und hinter der "1" stehen.

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 14:12
von Bindl
Sirius3 hat geschrieben:@Bindl: hier kannst Du die Schleife und alle if einfach weglassen, weil in jedem Schleifendurchgang genau in if-Zweig durchlaufen wird. Du kannst Dir ja mal überlegen, wie viele "0" für jedes i vor und hinter der "1" stehen.
Ich kann die Schleife und die alle if`s weglassen?

Mir ist klar das es pro Zeile oder Spalte vier mal 0 und einmal eine 1 steht.
Trotzdem ist mir nicht klar was ich zu tun habe.

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 14:29
von Sirius3
@Bindl: dieser Code macht genau das selbe:

Code: Alles auswählen

print("{0} {0} {0} {0} {1}".format(0,1))
print("{0} {0} {0} {1} {0}".format(0,1))
print("{0} {0} {1} {0} {0}".format(0,1))
print("{0} {1} {0} {0} {0}".format(0,1))
print("{1} {0} {0} {0} {0}".format(0,1))
Und nun zu der Frage, die ich gestellt habe: wieviele "0" sind für jedes i vor der "1"?

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 14:50
von Bindl
Stimmt, sorry.

Also zunächst 4 Nullen und zum Ende sind keine Nullen vor der 1.
Nur weiß ich immer noch nicht wie ich das nun schreiben soll.

Irgendwie muss ich wohl schreiben können das immer 5 Zeichen sind. 4x0 und 1x1 und das die 1 die Position je nach Zeile ändert.
Ich weiß aber nicht wie.

Re: Ausgaben

Verfasst: Dienstag 22. November 2016, 15:14
von BlackJack
@Bindl: Wie gesagt, entweder mit Schleifen, die verwendet man nämlich um x mal etwas zu machen, oder in dem Du schaust was für ”Rechenoperationen” auf Zeichenketten in Python definiert sind. Auch wichtig können bei diesen beiden Aufgaben die Schlüsselwortargumente sein, welche die `print()`-Funktion kennt, um mehr Kontrolle über die Ausgabe zu bekommen. Also zum Beispiel wodurch einzelne, auszugebende Argumente getrennt werden, oder was nach den Werten ausgegeben wird, oder eben auch nicht.

Edit: Und das sich die Position der 1 ändert hängt ja davon ab wie viele 0en davor (und danach) ausgegeben werden. Das ändert sich in jeder Zeile. Das `i` ändert sich auch in jeder Zeile. Und aus diesem `i` kann man die anderen Werte für die jeweilige Zeile berechnen.

Re: Ausgaben

Verfasst: Mittwoch 23. November 2016, 16:42
von BlackJack
Meine Lösung für die erste Aufgabe wäre (sofern die Aufgabe Bitschieben und `format()` nicht verbietet :-)):

Code: Alles auswählen

length = 5
for i in range(length):
    print('{0:0{1}b}'.format(1 << i, length))

Re: Ausgaben

Verfasst: Mittwoch 23. November 2016, 17:25
von Sirius3
Ich würde mir ja gar nicht erst überlegen, wieviele Schleifendurchgänge ich brauche, sondern nur, wann ich wieder von vorne anfangen würde:

Code: Alles auswählen

from collections import deque
from copy import copy

pattern = deque("00001")
stop_pattern = copy(pattern)
while True:
    print(''.join(pattern))
    pattern.rotate(-1)
    if pattern == stop_pattern:
        break

Re: Ausgaben

Verfasst: Donnerstag 24. November 2016, 16:08
von sebastian0202
Ich reiche das hier ein.

Code: Alles auswählen

laenge = 5
for i in range(laenge):
    text = [ '1' if x*-1 == i else '0' for x in range(-4,1)]
    print "".join(text)

text = '00001'
for i in text:
    print text
    text = text[1:5] +'0'

begin = 1
for _ in range(4,0,-1):
    print "0"*_ + "{0:b}".format(begin)[::-1]
    begin *= 2


zahl = 100001
for _ in range(5):
    print str(zahl)[-5:]
    zahl *= 10


Re: Ausgaben

Verfasst: Freitag 25. November 2016, 01:33
von bords0
Ich schwanke noch zwischen

Code: Alles auswählen

for i in range(5):
    print("000010000"[i:][:5])
und

Code: Alles auswählen

s = "00001"
for i in range(5):
    print(s[i:] + s[:i])
Aber

Code: Alles auswählen

print(*sorted(map("".join,set(itertools.permutations("00001")))), sep="\n")
scheidet völlig aus.
:wink:

Re: Ausgaben

Verfasst: Sonntag 27. November 2016, 00:13
von BlackJack
In QBasic; Aufgabe 2 in drei Varianten:
[codebox=qbasic file=Unbenannt.txt]Const N = 5
Dim i As Integer, j As Integer

For i=0 To N-1
For j=1 To N-i-1
Print "0";
Next
Print "1";
For j=1 To i
Print "0";
Next
Print
Next

Print "Variante A"
For i=1 To 9
Print i;
If i Mod 3 = 0 Then Print
Next

Print "Variante B"
For i=0 To 2
For j=0 To 2
Print i*3+j+1;
Next
Print
Next

Print "Variante C"
For i=1 To 9 Step 3
For j=0 To 2
Print i+j;
Next
Print
Next[/code]