Antworte auf:  ungerade Zahlen in Python zählen von Bekell
Forum:  Informatik, moderiert von: Bilbo matph

[Zur Forum-Gliederung] [Wie man Fragen beantwortet] [Themenstart einblenden]

  Alle registrierten Mitglieder können Mitteilungen schreiben.
Benutzername:
Passwort:
Nachricht-Icon:                   
                  
              
Nachricht:


 
 


Input assistance tools (JavaScript): [Link extern intern] [MathML?] [$$?]
[fed-area] [LaTeX-inline] [LaTeX-display] [Tikz] [hide-area][show-area] [Source code [num.]][?]
 Show Preview      Write using fedgeo formula editor or Latex.

Smilies for your message:
😃 😄 😁 🙂 🙃 😉 🤗 🤫 🤔 🙄 😴 🤒 😎 😮 😲 😂
🙁 😖 😒 😐 😡 👌 👍 👎 🤢 🤧 🥵 🥶 😵 🤯 😛 😷
Optionen: Deaktiviere HTML in dieser Nachricht
Deaktiviere MATHML in dieser Nachricht. Wenn Dein Text $-Zeichen enthält, die nicht LaTeX-Formeln begrenzen.
Deaktiviere Smilies in dieser Nachricht
Zeige die Signatur (Kann in 'Mein Profil' editiert werden.)
    [Abbrechen]
 
Beachte bitte die [Forumregeln]


Themenübersicht
Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2450
 Beitrag No.17, eingetragen 2021-05-15 10:06    [Diesen Beitrag zitieren]

Das war's danke bis soweit....


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2446
 Beitrag No.16, eingetragen 2021-05-15 10:03    [Diesen Beitrag zitieren]

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)



zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2446
 Beitrag No.15, eingetragen 2021-05-15 09:59    [Diesen Beitrag zitieren]

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]


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2450
 Beitrag No.14, eingetragen 2021-05-15 09:36    [Diesen Beitrag zitieren]

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


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2446
 Beitrag No.13, eingetragen 2021-05-15 09:31    [Diesen Beitrag zitieren]

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]


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2450
 Beitrag No.12, eingetragen 2021-05-15 08:55    [Diesen Beitrag zitieren]

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!


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2446
 Beitrag No.11, eingetragen 2021-05-15 08:52    [Diesen Beitrag zitieren]

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.


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2450
 Beitrag No.10, eingetragen 2021-05-15 07:51    [Diesen Beitrag zitieren]

@ 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


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2450
 Beitrag No.9, eingetragen 2021-05-15 07:37    [Diesen Beitrag zitieren]

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.


Nuramon
Senior
Dabei seit: 23.01.2008
Mitteilungen: 2985
 Beitrag No.8, eingetragen 2021-05-15 00:46    [Diesen Beitrag zitieren]
\(\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\)

Asrael
Junior
Dabei seit: 04.07.2020
Mitteilungen: 12
 Beitrag No.7, eingetragen 2021-05-15 00:27    [Diesen Beitrag zitieren]

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


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2446
 Beitrag No.6, eingetragen 2021-05-14 22:53    [Diesen Beitrag zitieren]

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.


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2450
 Beitrag No.5, eingetragen 2021-05-14 21:50    [Diesen Beitrag zitieren]

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.


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2446
 Beitrag No.4, eingetragen 2021-05-14 21:38    [Diesen Beitrag zitieren]

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.


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2450
 Beitrag No.3, eingetragen 2021-05-14 21:24    [Diesen Beitrag zitieren]

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...


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2446
 Beitrag No.2, eingetragen 2021-05-14 13:59    [Diesen Beitrag zitieren]

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


Nuramon
Senior
Dabei seit: 23.01.2008
Mitteilungen: 2985
 Beitrag No.1, eingetragen 2021-05-14 13:49    [Diesen Beitrag zitieren]
\(\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\)

Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2450
 Themenstart: 2021-05-14 13:00    [Diesen Beitrag zitieren]

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.


 
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]