Hilfe 1*1 !

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.
Blue Flare
User
Beiträge: 21
Registriert: Dienstag 7. September 2010, 18:34

Habe die Aufgabe über die Ferien ein Programm zu schreiben das mir das eins mal eins mit ein for schleife ausrechnet...

habe hier mal den Code:

Code: Alles auswählen

zahl = 1
mult = 1
for i in range(zahl * mult , 90):
    print(zahl,"*",mult,"=",i)
    mult += 1
    if mult == 10:
        mult = 1
        zahl += 1
        print("")
        print("")
        print("")

    
so weit so gut leider funktioniert nur der erste block ;(

der zweite sieht dann beispielsweiße so aus:

2 * 1 = 10
2 * 2 = 11
2 * 3 = 12
2 * 4 = 13
2 * 5 = 14
2 * 6 = 15
2 * 7 = 16
2 * 8 = 17
2 * 9 = 18



3 * 1 = 19
3 * 2 = 20
3 * 3 = 21
3 * 4 = 22
3 * 5 = 23
3 * 6 = 24
3 * 7 = 25
3 * 8 = 26
3 * 9 = 27




4 * 1 = 28
4 * 2 = 29
4 * 3 = 30
4 * 4 = 31
4 * 5 = 32
4 * 6 = 33
4 * 7 = 34
4 * 8 = 35
4 * 9 = 36


das stimmt natürlich alles iwie nicht nur frage ich mich warum ??

bitte um hilfe !

lg kevin
BlackJack

@Blue Flare: Ich weiss nicht was ich dazu sagen soll, ausser dass das *offensichtlich* nicht funktionieren kann. Überleg doch mal was `i` für Werte annimmt. Und warum das eben nicht das Ergebnis ist, was Du haben möchtest. *Berechne* das Ergebnis. Hinter dem Gleichheitszeichen soll ja das Ergebnis einer Multiplikation stehen.

Ansonsten ist die Art wir Du das machst auch nicht besonders übersichtlich. Schreib das mal einfacher. Ohne das ``if`` und ohne dass Du *drei* "Laufvariablen" benötigst.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

zB. so:

Code: Alles auswählen

einmaleins = ("{0} * {1} = {2}".format(x, y, x*y) for x in xrange(1, 11) for y in xrange(1, 11))
print("\n".join(einmaleins))
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

Ich hätt's ja so gelöst.

Code: Alles auswählen

from itertools import product

def main():
    RANGE = xrange(1, 11)
    print '\n'.join(
        '%2d x %-2d = %d%s' % (b, a, a * b, '\n' if b == 10 else '')
        for a, b in product(RANGE, RANGE)
    )

if __name__ == "__main__":
    main()
Aber wir wollen dem Blue Flare seine Hausaufgaben doch nicht lösen. ;-)
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

ups, hatte ich überlesen :D - macht aber nichts, es gibt noch andere Lösungsmöglichkeiten (zumindest anders aussehen)
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Xynon1 hat geschrieben:ups, hatte ich überlesen :D - macht aber nichts, es gibt noch andere Lösungsmöglichkeiten (zumindest anders aussehen)
Ok, fangen wir mal an mit "Bash" :-)

Code: Alles auswählen

for ((i=1; i<11; i++)); do 
    for((j=1; j<11; j++)); do 
        printf "\n%2s x %2s = %3s" $j $i  $[$j * $i]; 
    done; 
    echo; 
done
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Haskell:

Code: Alles auswählen

n = 10
r = [1..n]
x = [show b ++ " * " ++ show a ++ " = " ++ show (a * b)
        ++ (if b == n then "\n" else "")
            | a <- r, b <- r]

main = putStr $ unlines x
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ähnlich zur Bash-Löung, C:

Code: Alles auswählen

#include <stdio.h>

int main(int argc, char **argv) {
    int a, b;
    for(a=1; a<11; a++) {
        for(b=1; b<11; b++) {
            printf("%2d x %2d = %3d\n", a, b, a*b);
        }
        printf("\n");
    }
    return 0;
}
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Das ganze in Java:

Code: Alles auswählen

public class Main {

    private static final int N = 10;

    public static void main(String[] args) {
        for (int a = 1; a <= N; a++) {
            for (int b = 1; b <= N; b++) {
                System.out.format("%2d * %-2d = %d\n", b, a, a * b);
            }
            System.out.println();
        }
    }
}
lunar

@BlackJack: Ich hätte ja "Text.Printf" verwendet:

Code: Alles auswählen

import Text.Printf (printf)
main = sequence [printf "%2d * %2d = %2d\n" x y (x*y) |
                 y <- ([1..10]::[Int]), x <- [1..10]::[Int]]
Ist kürzer, die nötigen Typsignaturen allerdings nehmen dem Ganzen etwas Charme ...
BlackJack

@lunar: Ja die Typsignaturen sind in der Tat unschön.

Und noch eine Lösung in Io:

Code: Alles auswählen

#!/usr/bin/env io
Range
range := 1 to(10)
range foreach(a,
    range foreach(b, "#{b} * #{a} = #{a * b}" interpolate println)
    "" println
)
ntrunk
User
Beiträge: 83
Registriert: Sonntag 7. September 2008, 23:09
Wohnort: Buchen (Odenwald)

@Blue Flare:
Überleg mal: mit welchem Sprachkonstrukt kannt man eine Anweisung mehrmals wiederholen?

...

...

...

Richtig, mit einer Schleife, soweit bist du ja schon. Was brauchst du also, wenn du die Schleife selbst mehrmals ausführen willst?

...

...

...

Achtung, erst nachdenken, dann weiterlesen...

...

...

...

Eine Schleife in einer Schleife. Hilft dir das jetzt weiter? Ich hoffe, ich habe noch nicht zuviel verraten, richtig Spass macht das Programmieren ja erst, wenn man selbst auf die Lösungen kommt.

Gruß
Norbert
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Ruby:

Code: Alles auswählen

(1..10).each do |j|
  (1..10).each { |i| puts "%s * %s = %s" % [i, j, i*j] }
  puts
end
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BlackJack

CoffeeScript:

Code: Alles auswählen

#!/usr/bin/env coffee
for a in [1..10]
    for b in [1..10]
        console.log "#{b} * #{a} = #{a * b}"
    console.log()
Womit im Grunde die Lösung für den OP verraten ist. Man hätte es auch ein wenig ruby'esquer ausdrücken können:

Code: Alles auswählen

#!/usr/bin/env coffee
range = [1..10]
range.forEach (a) ->
    range.forEach (b) ->
        console.log "#{b} * #{a} = #{a * b}"
    console.log()
Das ist aber nicht ganz so effizient, weil hier tatsächlich eine Liste mit Zahlen angelegt wird.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

BlackJack hat geschrieben:"#{b} * #{a} = #{a * b}"
Ach, das haette ich in Ruby ja auch machen koennen. Das vergesse ich immer...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BlackJack

JavaScript bring irgendwie nicht viel neues in den Thread:

Code: Alles auswählen

var a, b;
for (a = 1; a <= 10; a++) {
  for (b = 1; b <= 10; b++) {
    console.log("" + b + " * " + a + " = " + (a * b));
  }
  console.log();
}
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Fortran sieht etwas anders aus:

Code: Alles auswählen

PROGRAM einmaleins

    DO i=1,10
        DO j=1,10
            WRITE(*,1001), i, j, i*j
        ENDDO
    ENDDO

    1001 FORMAT (I2, ' x ', I2, ' = ', I3)

END PROGRAM
Grüße
Gerrit
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich kenne Fortran nicht wirklich und kann das Programm mangels Lochkarten leider nicht testen, aber müsste die untenstehende Formatierungszeile nicht mit einem I1 beginnen? Wäre für mich jetzt logischer, sofern sich das auf abgespeicherte Integer-Werte/-Register beziehen soll bzw halt für die mitgegebenen Argumente steht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

snafu hat geschrieben:Ich kenne Fortran nicht wirklich und kann das Programm mangels Lochkarten leider nicht testen, aber müsste die untenstehende Formatierungszeile nicht mit einem I1 beginnen? Wäre für mich jetzt logischer, sofern sich das auf abgespeicherte Integer-Werte/-Register beziehen soll bzw halt für die mitgegebenen Argumente steht.
Ich denke eher das steht für Integer und die Länge der Stellen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das wäre natürlich auch eine Erklärung und ist hinsichtlich dem, was man vom String-Formatting her kennt, auch recht naheliegend. So weit hatte ich in dem Moment nicht gedacht.
Antworten