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

Dienstag 8. Februar 2011, 12:44

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

Dienstag 8. Februar 2011, 12:52

@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

Dienstag 8. Februar 2011, 13:09

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

Dienstag 8. Februar 2011, 13:15

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

Dienstag 8. Februar 2011, 13:21

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: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 8. Februar 2011, 13:49

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

Dienstag 8. Februar 2011, 14:07

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: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 8. Februar 2011, 14:16

Ä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

Dienstag 8. Februar 2011, 14:31

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

Dienstag 8. Februar 2011, 14:47

@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

Dienstag 8. Februar 2011, 15:08

@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)

Dienstag 8. Februar 2011, 15:12

@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:

Dienstag 8. Februar 2011, 15:45

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

Dienstag 8. Februar 2011, 16:38

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:

Dienstag 8. Februar 2011, 16:43

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
Antworten