5 svar
77 visningar
nilson99 är nöjd med hjälpen!
nilson99 294
Postad: 22 jan 2020

räkna ut antalet specifika element i listor?

inte riktigt hela koden men int(M) är i allafall något heltal som först var menat att bygga en NxN matris. Dvs en int(M) x int(M) matris. Nu har jag ju en annan matris som vi ser i funktionen build_matrix(), frågan är att hur ska jag anpassa funktionen number_of_neighbours() till den matrisen som är i build_matrix()-funktionen?. 

Vad number_of_neighbours funktionen försöker göra är att räkna hur många ettor varje plats i matrisen har bredvid sig. Dvs den ska räkna sina grannar. Funktionen funkar heller inte och vet inte hur jag ska göra för att datorn ska gå igenom alla element i listorna i build_matrix() och räkna varje elements  "grannar", dvs alla ettor som ligger bredvid sig? 

Laguna Online 7704
Postad: 22 jan 2020

Du har i som parameter till number_of_neighbours och sedan har du i som lokal variabel innan du använder parametern. Det ser inte rätt ut.

Du skriver inte vad som inte funkar. Vilka felmeddelanden får du?

Koden innehåller ett antal variabler som inte definierats eller definierats globala vilket är illa.

Låt matrisen bli ett argument till number_of_neighbours istället. Då kan du anropa number_of_neighbours med den matris du får från build_matrix.

gridSize används inte så den kan tas bort.

Varför försöka sätta alla celler i matrisen till 1? (jag skriver försöka eftersom x och y inte är definierade eller definierats globala vilket är illa).

for-looparna i number_of_neighbours kan ge IndexError beroende på hur stor Matrix är och vilka värden på i och j som anges vid anrop av number_of_neighbours.

Laguna har rätt, for-looparna skriver över argumenten i och j.

Användningen av 'self.' är vanligt förekommande i objektorienterad Python-kod och de kan tas bort om detta program inte är objektorienterat (vilket det inte ser ut att vara).

nilson99 294
Postad: 2 feb 2020
Lindehaven skrev:

Du skriver inte vad som inte funkar. Vilka felmeddelanden får du?

Koden innehåller ett antal variabler som inte definierats eller definierats globala vilket är illa.

Låt matrisen bli ett argument till number_of_neighbours istället. Då kan du anropa number_of_neighbours med den matris du får från build_matrix.

gridSize används inte så den kan tas bort.

Varför försöka sätta alla celler i matrisen till 1? (jag skriver försöka eftersom x och y inte är definierade eller definierats globala vilket är illa).

for-looparna i number_of_neighbours kan ge IndexError beroende på hur stor Matrix är och vilka värden på i och j som anges vid anrop av number_of_neighbours.

Laguna har rätt, for-looparna skriver över argumenten i och j.

Användningen av 'self.' är vanligt förekommande i objektorienterad Python-kod och de kan tas bort om detta program inte är objektorienterat (vilket det inte ser ut att vara).

frågan var dåligt ställd av mig. Det jag inte vet är att hur ska jag skriva en funktion som räknar ut antalet grannar (horisontellt, vertikalt, diagonalt) hos varje element i en 2-dimensionell lista? försökte också undersöka varje enstaka plats i listan och kolla alla värden något i den här stilen:

[i-1][j]
[i][j-1]
[i-1][j-1]
[i+1][j]
[i][j+1]
[i+1][j+1]
[i+1][j-1]
[i-1][j+1]

där i,j är rad, kolumn.

men vet inte alls hur jag ska liksom uttrycka detta och få datorn räkna varje elements grannar? 

Jag förstod uppgiften men din kod innehåller många fel så du behöver läsa felmeddelanden, tänka igenom koden och testa den.

Utgående från din kod, så kan du uttrycka och få datorn att räkna varje elements grannar ungefär så här:

neighbours = 0

for x in [i-1, i, i+1]:

    for y in [j-1, j, j+1]:

        if x == 1 and y == 1:

            continue

        else:

            neighbours += matrix[y][x]

Men for-looparna kan ge IndexError beroende på hur stor matrix är och vilka värden på i och j som anges vid anrop av number_of_neighbours, så detta behöver hanteras i koden.

Laguna Online 7704
Postad: 3 feb 2020

Det är lite lurigt med Python att index som -1 inte ger fel, utan betyder sista elementet. Det är mycket praktiskt, men det betyder att man inte får nån hjälp av felhantering när det inte är det man menar.

Svara Avbryt
Close