Matroids Matheplanet Forum Index
Moderiert von Bilbo matph
Matroids Matheplanet Forum Index » Informatik » ungerade Zahlen in Python zählen
Druckversion
Druckversion
Antworten
Antworten
Autor
Schule ungerade Zahlen in Python zählen
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2379
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2021-05-14


Hallo,

ich habe zwei float-variablen, z. b. 40,7560 und 35,22222

Ich brauchen jetzt eine Funktion, die mir als Ganzzahl ausgibt, wieviel unger. Zahlen in dem Bereich liegen.  Also wenn der Bereich von 35,3777 bis 36,5768 ginge, müßte sie 0 ausgeben.


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Nuramon
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2008
Mitteilungen: 2866
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2021-05-14

\(\begingroup\)\(\renewcommand{\Re}{\operatorname{Re}} \renewcommand{\Im}{\operatorname{Im}} \newcommand{\End}{\operatorname{End}} \newcommand{\id}{\operatorname{id}} \newcommand{\GL}{\operatorname{GL}} \newcommand{\im}{\operatorname{im}} \newcommand{\sgn}{\operatorname{sgn}} \newcommand{\d}{{\rm d}} \newcommand{\rg}{\operatorname{rg}} \newcommand{\spur}{\operatorname{spur}} \newcommand{\Hom}{\operatorname{Hom}} \newcommand{\tr}{\operatorname{tr}} \newcommand{\opn}{\operatorname}\)
Hallo,

hier ist eine Möglichkeit:
- Finde eine Funktion $f:\IR^2\to \IN$, so dass $f(x,y)$ die Anzahl der ganzen Zahlen im Intervall $[x,y]$ ist.
- Versuche deine gesuchte Funktion mit $f$ auszudrücken.
\(\endgroup\)


Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2296
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2021-05-14


Du rundest die Grenzen auf die passende nächste ganze Zahl und machst dann eine Fallunterscheidung abhängig davon, ob die gerundeten Grenzen gerade oder ungerade sind:
python
import math
 
def odd_diff(x, y):
  a = math.ceil(x)
  b = math.floor(y)
  return (b - a + a % 2 + b % 2) // 2



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2379
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2021-05-14


2021-05-14 13:59 - zippy in Beitrag No. 2 schreibt:
Du rundest die Grenzen auf die passende nächste ganze Zahl und machst dann eine Fallunterscheidung abhängig davon, ob die gerundeten Grenzen gerade oder ungerade sind:
python
import math
 
def odd_diff(x, y):
  a = math.ceil(x)
  b = math.floor(y)
  return (b - a + a % 2 + b % 2) // 2
o

Hallo Zippy, ich will die nicht nur als Summe haben, sondern in einen Kontainer gepackt, weil ich noch was untersuchen muss.... Du bringst nur eine Summe...



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2296
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2021-05-14


2021-05-14 21:24 - Bekell in Beitrag No. 3 schreibt:
ich will die nicht nur als Summe haben, sondern in einen Kontainer gepackt, weil ich noch was untersuchen muss.... Du bringst nur eine Summe...

Du hast oben explizit nach wieviel gefragt. Und auch noch betont, dass die Funktion eine Zahl liefern soll:

2021-05-14 13:00 - Bekell im Themenstart schreibt:
Ich brauchen jetzt eine Funktion, die mir als Ganzzahl ausgibt, wieviel unger. Zahlen in dem Bereich liegen.  Also wenn der Bereich von 35,3777 bis 36,5768 ginge, müßte sie 0 ausgeben.

Trotz deines Mottos...

2021-05-14 13:00 - Bekell im Themenstart schreibt:
Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!

...solltest du dir beim Formulieren von Fragen etwas mehr Mühe geben.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2379
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, vom Themenstarter, eingetragen 2021-05-14


2021-05-14 21:38 - zippy in Beitrag No. 4 schreibt:
2021-05-14 21:24 - Bekell in Beitrag No. 3 schreibt:
ich will die nicht nur als Summe haben, sondern in einen Kontainer gepackt, weil ich noch was untersuchen muss.... Du bringst nur eine Summe...

Du hast oben explizit nach wieviel gefragt. Und auch noch betont, dass die Funktion eine Zahl liefern soll:

2021-05-14 13:00 - Bekell im Themenstart schreibt:
Ich brauchen jetzt eine Funktion, die mir als Ganzzahl ausgibt, wieviel unger. Zahlen in dem Bereich liegen.  Also wenn der Bereich von 35,3777 bis 36,5768 ginge, müßte sie 0 ausgeben.

Trotz deines Mottos...

2021-05-14 13:00 - Bekell im Themenstart schreibt:
Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!

...solltest du dir beim Formulieren von Fragen etwas mehr Mühe geben.

Ja, Du hast recht, das hatte ich math. aber selber hingekriegt, ich dachte ich kann die abs. Zahl dann über len(list) abgreifen.... es wäre gut, wenn die Funktion odd_math die Zahlen in einem Container übergibt.. ide ich dann unten aneinanderschalten kann.


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2296
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2021-05-14


2021-05-14 21:50 - Bekell in Beitrag No. 5 schreibt:
es wäre gut, wenn die Funktion odd_math die Zahlen in einem Container übergibt..

Dann ersetze einfach die Differenz durch einen range:
python
import math
 
def odd_range(x, y):
  a = math.ceil(x)
  b = math.floor(y)
  return range(a + 1 - a % 2, b + 1, 2)

Dann erhältst du z.B.:
>>> list(odd_range(10.5, 18.5))
[11, 13, 15, 17]

Wenn du andere Vorstellungen davon hast, ob die Grenzen inklusive oder exklusive verstanden werden sollen, kannst du die notwendigen Anpassungen sicher selbst vornehmen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Asrael
Junior Letzter Besuch: im letzten Monat
Dabei seit: 04.07.2020
Mitteilungen: 12
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2021-05-15


Es ist auch nicht verkehrt, einfach das Programmieren zu lernen...



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Nuramon
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 23.01.2008
Mitteilungen: 2866
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2021-05-15

\(\begingroup\)\(\renewcommand{\Re}{\operatorname{Re}} \renewcommand{\Im}{\operatorname{Im}} \newcommand{\End}{\operatorname{End}} \newcommand{\id}{\operatorname{id}} \newcommand{\GL}{\operatorname{GL}} \newcommand{\im}{\operatorname{im}} \newcommand{\sgn}{\operatorname{sgn}} \newcommand{\d}{{\rm d}} \newcommand{\rg}{\operatorname{rg}} \newcommand{\spur}{\operatorname{spur}} \newcommand{\Hom}{\operatorname{Hom}} \newcommand{\tr}{\operatorname{tr}} \newcommand{\opn}{\operatorname}\)
Mein Ansatz aus No.1 ist mittlerweile zwar hinfällig, aber ich finde es ganz interessant, dass man damit eine Formel erhält, die auf den ersten Blick anders aussieht als die von zippy in No.2:

Sei
$$f(x,y):=\begin{cases}
\lfloor y \rfloor - \lceil x\rceil +1, &\text{ falls } x \leq y\\
0, &\text{sonst.}
\end{cases}$$ Dann ist $f(x,y)$ die Anzahl der ganzen Zahlen im Intervall $[x,y]$.

Die Anzahl der ungeraden Zahlen im Intervall $[x,y]$ ist folglich
$$\begin{align*}
|[x,y]\cap (2\IZ+1)| &= |[x+1,y+1]\cap 2\IZ| \\
&= |[\frac{x+1}2, \frac{y+1}2]\cap \IZ| \\
&= f(\frac{x+1}2, \frac{y+1}2).
\end{align*}$$
\(\endgroup\)


Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2379
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2021-05-15


Ich halte den Ansatz, die Differenz zwischen x und y einfach durch 2 zu teilen, für  verkehrt, denn es kann ja sein, da x= 14,7 und y 13,2, das ist zwar über eins aber es ist keine uZ enthalten, und analog bei 15,3 und 14, 1 wäre eine enthalten. Bei beiden kommt ungefähr 0,5 raus. Da viele solcher Schnipsel zu addieren sind, kann die illusion entstehen, ich hätte viele ung. Zahlen gefangen, was aber nicht zwingend ist, wenn es alles solche über 1 Längen sind um gerade Zahlen herum.


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2379
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, vom Themenstarter, eingetragen 2021-05-15


@ zippy
Vielen Dank für Deine Funktion
Python
  1. obgrenze=((x+1)*(x+1))/teiler
  2. ungrenze=(x*x)/teiler
  3. schnipsel = schnipsel + odd_diff(ungrenze,obgrenze)
  4. list(odd_diff(ungrenze,obgrenze))

wenn ich so mach, erhalte ich immer:

 'int' object is not iterable

Was mich wundert, denn obgrenze und ungrenze müssten floats sein, da ich ja nicht mit zwei // Slash geteilt habe, da sind also Kommazahlen drin....

Der Ausdruck sieht jetzt so aus:
Ungrenze  33.333333333333336 obgrenze: 40.333333333333336
10 3 3 3 Z: [0, 1, 2, 3, 4, 5]
Ungrenze  20.0 obgrenze: 24.2
10 5 5 2 Z: [0, 1, 2, 3]
Ungrenze  14.285714285714286 obgrenze: 17.285714285714285
10 7 7 2 Z: [0, 1, 2, 3]
10 [3, 5, 7] 7

In der Klammer nach Z müßte Z: [35,37,39] stehen, es steht aber 0,1,2,3,4,5 da



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2296
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, eingetragen 2021-05-15


2021-05-15 07:51 - Bekell in Beitrag No. 10 schreibt:
wenn ich so mach, erhalte ich immer:

 'int' object is not iterable

Du hast die Funktionen odd_diff (aus Beitrag Nr. 2, liefert eine Zahl) und odd_range (aus Beitrag Nr. 6, liefert einen Iterator) durcheinandergeworfen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2379
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, vom Themenstarter, eingetragen 2021-05-15


2021-05-15 08:52 - zippy in Beitrag No. 11 schreibt:
2021-05-15 07:51 - Bekell in Beitrag No. 10 schreibt:
wenn ich so mach, erhalte ich immer:

 'int' object is not iterable

Du hast die Funktionen odd_diff (aus Beitrag Nr. 2, liefert eine Zahl) und odd_range (aus Beitrag Nr. 6, liefert einen Iterator) durcheinandergeworfen.

Ds hab ich bemerkt:
Python
  1. Summeschnipsel=0
  2. teiler=0
  3. schnipsel=0
  4. pzsammler=[]
  5. obgrenze=0
  6. ungrenze=0
  7. zahlen=[222]
  8.  
  9. def pz_feststeller(z):
  10. pzkleinerx=[]
  11. for z in range(z-1,2,-1):
  12. if isprime(z):
  13. pzkleinerx.append(z)
  14. return pzkleinerx
  15.  
  16. def odd_diff(x, y):
  17. a = math.ceil(x)
  18. b = math.floor(y)
  19. return (b - a + a % 2 + b % 2)//2
  20.  
  21. def odd_range(x, y):
  22. a = math.ceil(x)
  23. b = math.floor(y)
  24. return range(b - a + a % 2 + b % 2)
  25.  
  26.  
  27. for x in range (10,20,1):
  28.  
  29. pzsammler=pz_feststeller(x)
  30. pzsammler.reverse()
  31. for teiler in pzsammler:
  32. obgrenze=((x+1)*(x+1))/teiler
  33. ungrenze=(x*x)/teiler
  34. print("Ungrenze ",ungrenze,"obgrenze:",obgrenze)
  35. schnipsel = schnipsel + odd_diff(ungrenze,obgrenze)
  36. zahlen=list(odd_range(ungrenze,obgrenze))
  37.  
  38. print(x,teiler, schnipsel, odd_diff(ungrenze,obgrenze),"Z:",zahlen)
  39.  
  40. print(x, pzsammler, schnipsel)
  41. schnipsel=0
  42. print()
Aber das Gewünschte kommt nicht:

Ungrenze  33.333333333333336 obgrenze: 40.333333333333336
10 3 3 3 [0, 1, 2, 3, 4, 5]
Ungrenze  20.0 obgrenze: 24.2
10 5 5 2 [0, 1, 2, 3]
Ungrenze  14.285714285714286 obgrenze: 17.285714285714285
10 7 7 2 [0, 1, 2, 3]
10 [3, 5, 7] 7
Wenn ich das list rausnehme und odd_range direkt im Print zitiere, kommt:
Python
  1. print(x,teiler, schnipsel, odd_diff(ungrenze,obgrenze),odd_range(ungrenze,obgrenze))


Ungrenze  33.333333333333336 obgrenze: 40.333333333333336
10 3 3 3 range(0, 6)
Ungrenze  20.0 obgrenze: 24.2
10 5 5 2 range(0, 4)
Ungrenze  14.285714285714286 obgrenze: 17.285714285714285
10 7 7 2 range(0, 4)
10 [3, 5, 7] 7

Das ist nicht, was ich möchte!



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2296
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, eingetragen 2021-05-15


Ich verstehe nicht, was du tun willst, aber dieses Fragment hier tut, was es soll:
>>> ungrenze = 33.333333333333336; obgrenze = 40.333333333333336
>>> zahlen = list(odd_range(ungrenze, obgrenze))
>>> print("Z:", zahlen)
Z: [35, 37, 39]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2379
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, vom Themenstarter, eingetragen 2021-05-15


Ja, Deines macht es, so wie ich es möchte...
Python
  1. obgrenze=((x+1)*(x+1))/teiler
  2. ungrenze=(x*x)/teiler
  3. print("ungrenze ",ungrenze,"obgrenze:",obgrenze)
  4. schnipsel = schnipsel + odd_diff(ungrenze,obgrenze) # in Zahlen /2 Version
  5. zahlen=list(odd_range(ungrenze,obgrenze)) # in Ziffern alle werden beziffert
  6.  
  7. print(x,teiler, schnipsel, odd_diff(ungrenze,obgrenze),"Z:", zahlen)

Bei mir tuts das nicht:
ungrenze  33.333333333333336 obgrenze: 40.333333333333336
10 3 3 3 Z: [0, 1, 2, 3, 4, 5]



Den einzigen Unterschied, den ich sehe, du gibst die Zahlen per Hand in die Variable un- und obgrenze und ich hab Formeln drin... Sollte es daran liegen? Ich arbeite auf Spyder... hab sogar den Kernel neu gestartet



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2296
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, eingetragen 2021-05-15


2021-05-15 09:36 - Bekell in Beitrag No. 14 schreibt:
du gibst die Zahlen per Hand in die Variable un- und obgrenze und ich hab Formeln drin... Sollte es daran liegen?

Nein:
>>> x = 10
>>> teiler = 3
>>> schnipsel = 0
>>> obgrenze = ((x+1)*(x+1))/teiler
>>> ungrenze = (x*x)/teiler
>>> print("ungrenze ", ungrenze, "obgrenze:", obgrenze)
ungrenze  33.333333333333336 obgrenze: 40.333333333333336
>>> schnipsel = schnipsel + odd_diff(ungrenze, obgrenze) 
>>> zahlen = list(odd_range(ungrenze, obgrenze)) 
>>> print(x, teiler, schnipsel, odd_diff(ungrenze, obgrenze), "Z:", zahlen)
10 3 3 3 Z: [35, 37, 39]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2296
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.16, eingetragen 2021-05-15


Du hast aber die odd_range-Funktion anders als ich definiert:

2021-05-15 08:55 - Bekell in Beitrag No. 12 schreibt:
python
def odd_range(x, y):
  a = math.ceil(x)
  b = math.floor(y)
  return range(b - a + a % 2 + b % 2)


2021-05-14 22:53 - zippy in Beitrag No. 6 schreibt:
python
import math
 
def odd_range(x, y):
  a = math.ceil(x)
  b = math.floor(y)
  return range(a + 1 - a % 2, b + 1, 2)




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2379
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.17, vom Themenstarter, eingetragen 2021-05-15


Das war's danke bis soweit....


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]