zahl die auf 5 endet überspringe

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Leonidas hat geschrieben:Also ich habe ja erwartet, dass man die Zahl in einen String in Binär umwandelt und dann auf "101$" matcht.... :twisted:
Schreib ich, schreib ich's nicht...? Ach, verdammt: Das funktioniert natürlich nicht. Ich sage nur bin(25).

Stefan
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sma hat geschrieben:
Leonidas hat geschrieben:Also ich habe ja erwartet, dass man die Zahl in einen String in Binär umwandelt und dann auf "101$" matcht.... :twisted:
Schreib ich, schreib ich's nicht...? Ach, verdammt: Das funktioniert natürlich nicht. Ich sage nur bin(25).
Dann muss man doch einen einfacheren Ansatz wählen, nämlich eine Primfaktorzerlegung. Die Primfaktoren sammelt man in einer Liste, sortiert sie aufsteigend und wenn das dritte Element 5 ist, dann ist man schon fast fertig.
Benutzeravatar
Dobi
User
Beiträge: 31
Registriert: Mittwoch 28. September 2011, 17:04

auf ein Canvas malen, letzte Ziffer ausschneiden und in ein neuronales Netz werfen, das auf Nullen und Fünfen trainiert ist ;)
bb1898
User
Beiträge: 199
Registriert: Mittwoch 12. Juli 2006, 14:28

/me hat geschrieben: Dann muss man doch einen einfacheren Ansatz wählen, nämlich eine Primfaktorzerlegung. Die Primfaktoren sammelt man in einer Liste, sortiert sie aufsteigend und wenn das dritte Element 5 ist, dann ist man schon fast fertig.
Wenn das dritte Element 5 ist, endet die Zahl auf 0. Und wenn gleich das erste Element 5 ist? Immer vorausgesetzt, Du sammelst die _verschiedenen_ Primfaktoren in einer Liste, sonst wird's entweder unübersichtlich oder langweilig.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

/me hat geschrieben:
sma hat geschrieben:
Leonidas hat geschrieben:Also ich habe ja erwartet, dass man die Zahl in einen String in Binär umwandelt und dann auf "101$" matcht.... :twisted:
Schreib ich, schreib ich's nicht...? Ach, verdammt: Das funktioniert natürlich nicht. Ich sage nur bin(25).
Dann muss man doch einen einfacheren Ansatz wählen, nämlich eine Primfaktorzerlegung. Die Primfaktoren sammelt man in einer Liste, sortiert sie aufsteigend und wenn das dritte Element 5 ist, dann ist man schon fast fertig.
15 zerlegt sich in 3 * 5 und einen IndexError...?

Oder 135, was 3 * 3 * 3 * 5 ist und wo da an dritter Stelle eine 3 steht. Du willst ja in einer *Liste* sammeln, keinem Set. :)

Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Geben wir auf, das Problem ist zu schwer für uns.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Also mein C64 schafft das. In Forth:

Code: Alles auswählen

\ Skip numbers ending in 5            bj

: divisible? ( n m -- t/f )
  mod 0= ;

: main ( -- )
  20 1 do
    i 5 divisible? not
    i 10 divisible?
    or if i . then
  loop ;
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Jetzt wollte ich mal schnell in COMMODORE BASIC V2 punkten und nun klappt das nicht:

Code: Alles auswählen

10 for i=1 to 20:if right$(str$(i),1)<>"5" then print i:next
@BlackJack: Kannst Du mir erklären, wieso das nach den Zahlen 1-4 abbricht? Klappen String-Vergleiche in BASIC nicht?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Der Zeichenkettenvergleich ist nicht das Problem, sondern dass sich das ``THEN`` auf den Rest der Zeile bezieht. Das ``NEXT`` wird also bei 5 nicht mehr ausgeführt und es geht in der nächsten Zeile weiter. Die gibt es nicht → Programmende.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:@Hyperion: Der Zeichenkettenvergleich ist nicht das Problem, sondern dass sich das ``THEN`` auf den Rest der Zeile bezieht. Das ``NEXT`` wird also bei 5 nicht mehr ausgeführt und es geht in der nächsten Zeile weiter. Die gibt es nicht → Programmende.
Ah... danke. Früher hätte ich das gewusst.
Also hier kurz die funktionierende Version:

Code: Alles auswählen

10 for i=1 to 20:if right$(str$(i),1)<>"5" then print i
20 next
(Welcher Basic-Dialekt klappte hier ganz gut für das Syntax-Highlighting? Vergesse ich immer wieder)
Zuletzt geändert von Hyperion am Sonntag 8. Januar 2012, 14:49, insgesamt 1-mal geändert.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Hyperion hat geschrieben:(Welcher Basic-Dialekt klappte hier ganz gut für das Syntax-Highlighting? Vergesse ich immer wieder)
BlitzBasic und FreeBasic, denke ich. Das Forum benutzt doch GeSHi?

Edit: Und QBasic/QuickBasic und sdlBasic.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

nomnom hat geschrieben:BlitzBasic und FreeBasic, denke ich. Das Forum benutzt doch GeSHi?

Edit: Und QBasic/QuickBasic und sdlBasic.
"locobasic" wars :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Ich nehme immer ``locobasic`` bei GeSHi, denn das ist auch so ein „altes” BASIC aus der 8-Bit-Ära; Locomotive BASIC vom Amstrad CPC. Die Syntaxhervorhebung für moderne BASICs funkioniert bei diesen alten Dialekten nicht immer so gut.

Edit: Mist, zu langsam. :-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben: Edit: Mist, zu langsam. :-)
Hehe... hatte nen alten Beitrag von Dir gesucht, gefunden und per "Edit" reingeguckt. War auch in so nem "problemthread" :-D (Artikel 5 GG wird da aufgeführt... herrlich!)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Ich glaube einen Ansatz, der nur mit einer Modulo-Operation aus kommt, hatten wir noch nicht (in Pascal dieses mal):

Code: Alles auswählen

Program Skip5;
Var i : Byte;
Begin
    For i := 1 To 19 Do If i MOD 10 <> 5 Then WriteLn(i);
End.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich hätte da auch noch was:

Code: Alles auswählen

In [12]: from itertools import cycle

In [38]: cycler = cycle((1, 1, 1, 1, 2, 1, 1, 1, 1))

In [39]: c = 0

In [40]: while c < 20:
    c += cycler.next()
    print c,
   ....:     
   ....:     
1 2 3 4 6 7 8 9 10 11 12 13 14 16 17 18 19 20
:mrgreen:
Zuletzt geändert von Hyperion am Sonntag 8. Januar 2012, 16:27, insgesamt 1-mal geändert.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

BlackJack hat geschrieben:Ich glaube einen Ansatz, der nur mit einer Modulo-Operation aus kommt, hatten wir noch nicht
nomnom hat geschrieben:

Code: Alles auswählen

>>> for i in range(1, 21):
...     if i % 10 != 5:
...             print i
...
:P
BlackJack

@nomnom: Ach verdammt, da hatte ich nicht aufgepasst. :oops:
korkak
User
Beiträge: 29
Registriert: Freitag 30. Dezember 2011, 19:44

nur um das mal als programmierneuling zu verstehen, die beste lösung(oder am verständlichsten für einen anfänger :wink: ) kam doch jetzt von /me mit "endswith" oder?
wenn ich das so laufen lasse wird doch alles mit einer 5 am ende ausgelassen so wie der TE es wollte:

Code: Alles auswählen

for i in range(1, 31):
    if not str(i).endswith('5'):
        print i
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@korkak: Die meisten würden wohl nomnoms Lösung bevorzugen, da sie sehr intuitiv ist und ohne unnötige Konvertierungen auskommt:

Code: Alles auswählen

for i in range(1, 21):
    if i % 10 != 5:
        print i
Das Leben ist wie ein Tennisball.
Antworten