Python-101 und Math-Logik - Liste Quadratwurzel zahlen kleiner als n
Bin ich stecken auf einem Python-101 Typ problem mit Schleifen. Hier sind die Anweisungen:
Den Platz zahlen sind die ganzen zahlen der form K × K, z.B. 9 ist eine quadratische Zahl, da 3 × 3 = 9. Schreiben Sie ein Programm, das liest eine ganze Zahl n von der input-und Ausgänge alle positiven Quadratzahlen kleiner als n, eine pro Zeile, in aufsteigender Reihenfolge. Zum Beispiel, wenn der Eingang 16, dann die richtige Ausgabe wäre
1
4
9
Dies ist, was ich habe, so weit, aber es irgendwie funktioniert, aber läuft ewig. Mein code erreicht nie die if-Anweisung, damit es nicht bricht, (bricht ab), bevor es auf 17.
Angenommen, n = 17.
n=int(input())
counter = 1
while counter * counter < n:
for counter in range(1,n):
a = counter*counter
print(a)
if a < n:
break
Ergebnisse:
1
4
9
16
25
36
49
64
81
Was ist
17. Ich glaube, ich erwähnte es. "Angenommen, n = 17."
Ah, sorry, habe ich übersehen.
Hier ist ein Tipp: Sie brauchen nur eine Schleife, aber hier haben Sie zwei. Hier ist eine andere:
Ich denke, es könnte sein, denn du brichst aus der for-Schleife, aber Sie werden nicht die änderung
n
im jeweiligen Schleife?17. Ich glaube, ich erwähnte es. "Angenommen, n = 17."
Ah, sorry, habe ich übersehen.
Hier ist ein Tipp: Sie brauchen nur eine Schleife, aber hier haben Sie zwei. Hier ist eine andere:
a
endet als counter*counter
. warum sollte man nur brechen, wenn a < n
, das ist, wenn counter*counter < n
? würden Sie nicht wollen, zu brechen, wenn Sie counter*counter > n
?Ich denke, es könnte sein, denn du brichst aus der for-Schleife, aber Sie werden nicht die änderung
counter
so dass die while-Schleife wird kontinuierlich ausgeführt
InformationsquelleAutor StacyM | 2013-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Korrektur des Codes.
Gab es drei Dinge falsch mit Ihrem code. Erste, die Bedingung, die Sie wollen, zu brechen ist
a >= n
nichta < n
. Zweite Bedingung getestet werden muss, bevor Sie drucken die Anzahl. So ist dieif
- Anweisung muss innerhalb derfor
Schleife und bevor Ihrprint
Anweisung. Dritte, die äußerewhile
Schleife ist nicht wirklich notwendig 🙂 Aber Sie können es hinzufügen, aber eine einfache innerefor
Schleife genügt.InformationsquelleAutor Shashank
if a < n:
wird nie gelingen, es sei dennn = 2
; weil innerhalb der Schleifea
ist immer(n-1)*(n-1)
die größer ist alsn
fürn > 2
; das ist, warum die Endlosschleife. Versuchen Sie dies:Oder ändern Sie einfach Ihrig man durch entfernen der äußeren Schleife, und die Platzierung der bedingten innen die for-Schleife wie:
Tolle Antwort, aber ich denke, Shashank, die Antwort war ein wenig gründlicher und verwendet den code Richtung, die ich geleitet wurde.
InformationsquelleAutor mshsayem
Ihre code-loops könnte der Fall in Sie Semantik Fehler versuchen Sie, das Licht auf dem Speicher und einfache
def Anzahl(n):
Anzahl(144)
InformationsquelleAutor rage mon
Du hast drei Probleme hier, aber, wie Sie sagen können, du bist auf dem richtigen Weg.
First off, bist du mit zwei Schleifen an, wenn Sie nur brauchen, um mit, und ich denke, es ist weil Sie sind ein wenig unklar, wie die
while
- Schleife funktioniert. Diewhile
- Schleife überprüft, ob die Bedingung true ist, bevor jedes mal, es läuft. Wenn die Bedingung false ausgewertet wird beim Durchlaufen der Schleife wird noch fertig - es will einfach nicht starten, ein anderes. Zum Beispiel:Drucke:
In Ihrem Fall, jeder iteration durch die
while
Schleife erstellt einefor
Schleife. Um für eine einzige iteration derwhile
Platz zu nehmen, hat Ihr computer durch zu gehen, für jede Zahl von1
zun
, was bedeutet, dass es dann drucken Sie alle diejenigen, die extra zahlen, bevor Sie Ihre while-Schleife hat sogar eine zweite chance, um seine check. Der einfachste Weg, um dies zu beheben, entfernen Sie diewhile
Schleife und strukturieren Sie Ihren code ein wenig anders. Wie zeige ich Ihnen in ein paar Zeilen, die Sie nicht wirklich brauchen es.Wenn Sie sagen
if a < n:
Sie haben Ihre Zeichen nach hinten, und Sie müssen ein Gleichheitszeichen. Das problem fragt, Sie geben alle Werte weniger alsn
, aber ohne die=
, das Programm wird nicht aufhören, bis es größer alsn
. Es sollteif a >= n:
.Schließlich die Reihenfolge der Operationen ist nicht das, was Sie wollen, es zu sein. Sie möchten, es zu überprüfen, dass
a
ist weniger alsn
vor dem drucken, sondern Sie drucken, bevor Sie tun, dass überprüfen. Wenn Sie schalten Sie Sie um, erhalten Sie so etwas wie dieses:sollte den trick tun.
InformationsquelleAutor Tutleman
Was über
?
Sehr guter Punkt. Links
n
's Schrittweite aus.InformationsquelleAutor Mario Rossi