Till KTH:s startsida Till KTH:s startsida

Gruppwebben som samarbetsyta stängs 1 oktober 2026. Du som administratör behöver nu exportera gruppens innehåll och/eller radera gruppen.

Observera: Från och med den 1 oktober 2026 kommer delar av gruppwebben som inte längre används, successivt att stängas ned, exempelvis gruppwebbar som redan har flyttats eller varit inaktiva under en längre tid.

Mer information hittar du i nyheten: Gruppwebben och Social stänger den 1 oktober 2026. Stöd och instruktioner för hur du exporterar en gruppwebb finns i: Gruppwebben som samarbetsyta stängs 1 oktober 2026..

Sjuor

Som gjort för breddenförst med heltalskö.

from queue import Queue

q = Queue() 

def makesons(tal):
    if tal==100: '
       print("Hundra!")
    q.put(tal+7)
    q.put(tal-7)
    q.put(tal*7)
    if(tal%7==0): 
       q.put(tal/7)

q.put(0)             
while not q.isempty():
    makesons(q.get())



Hoppsan, det här programmet håller på länge. Vi inför en boolesk variabel funnen som blir True när vi hittat en lösning, och låter den ingå i slingans villkor.

from queue import Queue

def makesons(tal):
    if tal==100:
       print("Hundra!")
       return True

    q.put(tal+7)
    q.put(tal-7)
    q.put(tal*7)
    if(tal%7==0): 
       q.put(tal/7)
    return False

q = Queue() 
q.put(0)             
funnen = False
while not q.isEmpty() and not funnen:
    funnen = makesons(q.get())



Ett annat sätt att avbryta programmet är att definiera en egen klass Klar som ärver från Exception.

from queue import Queue

class Klar(Exception):
    pass

def makesons(tal):
    if tal==100:
       print("Hundra!")
       raise Klar

    q.put(tal+7)
    q.put(tal-7)
    q.put(tal*7)
    if(tal%7==0): 
       q.put(tal/7)

q = Queue() 
q.put(0)             
try:
    while not q.isEmpty():
        makesons(q.get())
except Klar:
    print("Lösning funnen.")



Om man ska skriva ut lösningen:

from queue import Queue
from sys import exit

class Node:
    def __init__(self, tal = 0, op = "", far = None):
        self.tal = tal
        self.op = op
        self.far = far


def insert(tal, op, far):
    nod=Node(tal, op, far)
    q.put(nod)

def makesons(far):
    tal = far.tal
    if tal == 100:
        writechain(far)
        exit()
    insert(tal+7, "+", far)
    insert(tal-7, "-", far)
    insert(tal*7, "*", far)
    if(tal%7==0): 
        insert(tal/7, "/", far)

def writechain(p):
    if p != None: 
        writechain(p.far)
        if p.far != None:
            print(p.op, "7 =",  p.tal)
        else:
            print(p.tal)

q=Queue()
q.put(Node())             
while not q.isEmpty():
    makesons(q.get())



Utskrift:

 0
 + 7 = 7
 + 7 = 14
 * 7 = 98
 * 7 = 686
 + 7 = 693
 + 7 = 700
 / 7 = 100

Fråga: Kan man snabba upp programmet ytterligare genom att slopa dumbarn? Hur många gånger kommer 0 att läggas in i kön?

Lärare Linda Kann skapade sidan 13 september 2016