These are chat archives for dbwebb-se/python

10th
Nov 2017
limy17
@limy17
Nov 10 2017 13:40

Jag har en fråga om kmom04. Gör det ngt om det blir en tom lucka efter att Marvin släppt ngt med "inv drop x"?
Om det måste ändras, hur gör jag? Har försökt med alltifrån,
if not line: (skriv inte)
if line.isspace(): (skriv inte)
if line and line[0].isalpha(): (skriv)

... men inget av dem ger önskat resultat. Jag har alltså en lucka som inte försvinner med de metoder jag testat, efter att jag slängt ett ord.

Här är koden efter att jag kollat så att variabeln finns i ryggsäcken:
    with open("inv.data", 'w') as filehandler:
        print("Marvin släppte: " + str(info3))
        data_list3 = data_list3.replace(info3, " ")
        filehandler.write(data_list3)
Anders Nygren
@litemerafrukt
Nov 10 2017 14:56
@limy17 Om jag fattar din kod rätt är data_list3 en sträng, inte en lista. Jag vet inte hur den ser ut. Är sakerna i strängen data_list3 separerade med newline (\n)? Isåfall kan du alltid splitta upp strängen i en lista, iterera över denna och kopiera till en ny lista men utelämna det som ska 'droppas'. Sedan joinar du den nya listan med newline "\n".join(new_data_list). Är sakerna i strängen separerade med något annat kan du splitta på det och göra samma manövrar.
limy17
@limy17
Nov 10 2017 15:48
Ja, data_list3 är en sträng.
Såhär typ?
        data_list4 = []
        for line in data_list3:
            if line:
                data_list4 = line
            else:
                continue
        filehandler.write(list(data_list4.split) + "\n")
Anders Nygren
@litemerafrukt
Nov 10 2017 15:59
fungerar det?
limy17
@limy17
Nov 10 2017 15:59
Näe, tydligen inte :)
Behöver jag använda funktionen split() också, ngn stans?
På listan
Anders Nygren
@litemerafrukt
Nov 10 2017 16:01
Om strängen som du skapar från listan ska separeras med newline så testa "\n".join(data_list4)
limy17
@limy17
Nov 10 2017 16:02
Har ändrat lite nu, men blankraderna är kvar...
        data_list4 = []
        for line in data_list3:
            if line:
                data_list4 = line
            else:
                continue
            data_list4 = data_list4.split()
            data_list4 = list(data_list4)
        filehandler.write("\n".join(data_list4))
Anders Nygren
@litemerafrukt
Nov 10 2017 16:05
har du gjort din datalist3 till en lista istället? så att var item är ett element i listan? du måste veta vad du itererar över. om du får var element kan du kolla mot info3från tidigare.
kom ihåg att print är din vän
limy17
@limy17
Nov 10 2017 16:14
Nu har jag lyckats göra om data_list3 till lista, enl print.
        data_list3 = data_list3.split()
        print(data_list3)
        print(type(data_list3))
        data_list4 = []
        for line in data_list3:
            if line:
                data_list4 = line
            else:
                continue
            data_list4 = data_list4.split()
        filehandler.write("\n".join(data_list4))
        print("Efter split: ")
        print(data_list4)
        print(type(data_list4))
limy17
@limy17
Nov 10 2017 16:29
Såhär ser funktionen ut som plockar upp ngt med "inv pick x":
def backpack2(info2):
    """ Marvin handles inv pick. """
    with open("inv.data", "a") as filehandler:
        filehandler.write(info2 + "\n")
        print("Marvin tog upp: ")
        print(str(info2))
limy17
@limy17
Nov 10 2017 17:07
Nu har jag en funktion som fungerar, tills man ska lägga i ngt nytt efter att ha kastat ngt. Vad som händer är att det nya objektet hamnar utanför listan, se z: [x, y] z
Såhär ser koden ut för "inv pick", och under ligger "inv drop":
def backpack2(info2):
    """ Marvin handles inv pick. """
    with open("inv.data", "a") as filehandler:
        filehandler.write(info2 + "\n")
        print("Marvin tog upp: ")
        print(str(info2))
        #Hur lägger jag ngt i backpack3-listan, istället för utanför?
        #append as list-object in data_list3?

#Start test-kod:
def backpack3(info3):
    """ Marvin handles inv pick. """
    with open("inv.data") as filehandler:
        data_list3 = filehandler.read()
        if info3 not in data_list3:
            print("Inte i ryggsäcken")
            return

    with open("inv.data", 'w') as filehandler:
        print("Marvin släppte: " + str(info3))
        data_list3 = data_list3.replace(info3, " ")
        data_list3 = data_list3.split()
        filehandler.write(str(data_list3))