Gå til innhold

forandre antall iterasjoner i en loop


Anbefalte innlegg

Skrevet

Jeg holder på en «primefinder» sak, og i den forbindelse må jeg kjøre en loop et uvisst antall ganger. Hvordan forandrer jeg antall loops? Jeg prøvde noe liknende som den følgende koden, men den viste seg bare å printe ut 10 gang. Jeg prøvde i tillegg å bruke global iterateNumber, men ingen forandringer

#! /usr/bin/python
# -*- encoding: iso-8859-1 -*-
#iterate 10+1 times
iterateNumber = 10
for x in range(iterateNumber):
   if x == 2:
       iterateNumber +=1
       print '\tLa til én iterasjon, eller?'
   print 'iterasjonsnummer ',x+1         
       

Videoannonse
Annonse
Skrevet

Når du bruker range slik, så har du allerede definert en mengde. Det spiller ingen rolle hva du gjør med iterateNumber etterpå.

 

Du kunne f.eks si

iterateNumber = 10
IN = range(iterateNumber)
for x in IN:
   if x == 2:
       IN.append(IN[-1] + 1) # append største/siste tall + 1
  ...

Men jeg tror jeg ville ha brukt en annen måte.

Skrevet

Nå har jeg prøvd i flere timer, men får det ikke til. I php gjør jeg det lett med en for loop, hvordan gjør jeg dette i python?

function isPrime($p){
   for($i = 2; $i < $p; $i++)
   {
       if($p % $i == 0) return false;
   }
   return true;
}

Her er pythonfunksjonen som jeg ikke får til:



def isPrime(p):

i = 2

if p < 0:  p *= -1

#as long i is less than p, return i and increment i by one

#for($i = 2; $i < $p; $i++){
while True:
   if i < p:
       i += 1
       if p % i == 0: return False
   return True




#end-def	

Skrevet
Noe slikt, kanskje?

 

def isPrime(p, i= 2):
while i < p:
 if p % i == 0:
 	return False
 i += 1
return True

Slik mener du?

def isPrime(p, i= 2):
   while i < p:
       if p % i == 0:
           return False
   i += 1
   return True




#end-def

Denne koden står bare og laster konstant.

Skrevet (endret)
Sorry, jeg bruket TAB som indent.

 

Rykk inn  i += 1, og legg til sjekken til for neg. tall øverst.

beklager, du kunne ikke skrive det med kode? Jeg forstod nemlig ikke helt hva du mente

 

edit: var det slik du mente?

def isPrime(p, i= 2):
       if p < 0:  p *= -1

       while i < p:
           if p % i == 0:
               return False
               i += 1
       return True

#end-def

Den står fortsatt og laster uten å gi meg noe svar når jeg prøver

    if isPrime(5):
       print  '!!!is prime:', 5

 

edit2:

Rykka inn return True, og da fikk jeg denne tilbake:

3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

Endret av dabear
Skrevet (endret)
Sorry, jeg bruket TAB som indent.

 

Rykk inn  i += 1, og legg til sjekken til for neg. tall øverst.

beklager, du kunne ikke skrive det med kode? Jeg forstod nemlig ikke helt hva du mente

 

edit: var det slik du mente?

def isPrime(p, i= 2):
       if p < 0:  p *= -1

       while i < p:
           if p % i == 0:
               return False
               i += 1
       return True

#end-def

Den står fortsatt og laster uten å gi meg noe svar når jeg prøver

    if isPrime(5):
       print  '!is prime:', 5

 

edit2:

Rykka inn return True, og da fikk jeg denne tilbake:

3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

 

 

Ren logikk tilsier at det ikke er noe poeng å ha 'i += 1' etter en return. Den vil aldri bli utført. Derfor skal den en tab tilbake. return True skal heller ikke rykkes ett hakk inn fordi de da alltid vil utføres, eller i de fleste tilfellene returnere True.

 

For at denne skal fungere skal den se slik ut, noe det er fullt mulig å lese utifra første gangen det ble vist. Hvis du ser etter så ser du tab innrykkene. :)

 

def isPrime(p, i= 2):
  while i < p:
     if p % i == 0:
        return False
     i += 1
  return True

#end-def

Endret av Orjanp

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...