Ausgaben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

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
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.
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

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.
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.
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

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?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

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.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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"?
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

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.
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.
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))
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

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

bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

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:
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]
Antworten