Gå til innhold

forandre antall iterasjoner i en loop


Anbefalte innlegg

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         
       

Lenke til kommentar
Videoannonse
Annonse

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.

Lenke til kommentar

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	

Lenke til kommentar
  zeitgeist skrev:
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.

Lenke til kommentar
  zeitgeist skrev:
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
Lenke til kommentar
  dabear skrev:
  zeitgeist skrev:
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
Lenke til kommentar

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