Vinnaren i pepparkakshustävlingen!
2013-04-02, 20:13
  #805
Medlem
Kommit en lång väg, har bara ett litet problem tills jag slutar besvära er.

Det är min metod fortsatta jag har problem med. Jag vill att om nu användaren angett att den vill träna på atomnummer, så ska han ha möjligheten att fortsätta att träna på det utan att behöva gå till huvudmenyn och välja "träna på atomnummer" igen. Jag får felmeddelandet "NameError: global name 'strang' is not defined"

Hur ska jag göra för att uppnå det?

Edit: Undrar också hur jag gör för att vid val 3 där jag bara visar läxföret, att återgå till huvudmenyn igen, utan att behöva calla metoden fortsatta()
__________________
Senast redigerad av Jesstess123 2013-04-02 kl. 20:47.
Citera
2013-04-16, 22:41
  #806
Medlem
Supernoob på python - En fråga

Har precis börjat med python, jag började för 3 dagar sen. Det är kul som fan. Har dock ett problem.

Har skrivit detta i python idle och sparar. öppnar det sen som vanligt open-> F5

>>> import turtle
>>> turtle.st()
>>> turtle.write("jalla")
>>> turtle.done()

när jag kör detta med F5 eller i cmd så blir det syntax error. Förstår inte felet.

Men om jag skriver om hela manuellt i idle eller python command line så får jag upp turtle och allt kör som de ska?

Vad är fel?

Jag började programmera för 3 dagar sen så jag vill gärna inte ha avancerade formuleringar, skriv så jag förstår
Citera
2013-04-17, 15:27
  #807
Medlem
Citat:
Ursprungligen postat av mommy123
Har precis börjat med python, jag började för 3 dagar sen. Det är kul som fan. Har dock ett problem.

Har skrivit detta i python idle och sparar. öppnar det sen som vanligt open-> F5

>>> import turtle
>>> turtle.st()
>>> turtle.write("jalla")
>>> turtle.done()

när jag kör detta med F5 eller i cmd så blir det syntax error. Förstår inte felet.

Men om jag skriver om hela manuellt i idle eller python command line så får jag upp turtle och allt kör som de ska?

Vad är fel?

Jag började programmera för 3 dagar sen så jag vill gärna inte ha avancerade formuleringar, skriv så jag förstår

Någon som kan hjälpa mig?

EDIT:Tror jag löste problemet nu, det verkar som att det bara funkar att köra i cmd och i python idle(f5) om jag sparar koden, men inte om jag sparar den i python idle. Fan va random. Ingen aning varför det är så. Någon vänlig person får gärna förklara.
__________________
Senast redigerad av mommy123 2013-04-17 kl. 16:07.
Citera
2013-04-21, 21:39
  #808
Medlem
VerbalSpaceys avatar
Tjena! Jag har precis börjat programmera och har börjat med Python eftersom det sägs att Python är väldigt mångsidigt. Jag håller på att lära mig Python via en hemsida som heter Codecademy.com och jag undrar hur den är. Funkar den om man vill lära sig bra eller vad burkar funka för renodlade nybörjare. Vill främst veta vad folk som sett Codecademy.com tycker om hemsidan .
Citera
2013-04-23, 15:16
  #809
Moderator
vhes avatar
Citat:
Ursprungligen postat av Acceber
Är det nån som skulle kunna tänka sig att hjälpa bygga ihop de sista delarna till ett ganska litet och simpelt pythonprogram (ett konversationsprogram (p-uppgift 113 KTH) där indatans ord som 'jag' ska bytas ut till 'du' i utdatan)? Är nybörjare och börjar få panik. Vill gärna inte lägga ut hela koden här, med tanke på att det ska granskas och plagiatkontrolleras så kanske det inte är så smart.

Känner du dig manad att hjälpa en tjej i nöd? Kontakta mig!!! Skulle vara sjukt tacksam.

Njae, att göra folks läxor brukar inte vara så poppis, men du kanske vill kika igenom https://www.flashback.org/t1691735 för lite inspiration. Halva din klass verkar hänga här...
Citera
2013-04-30, 13:51
  #810
Medlem
Sitter med den förberedande kursen i programmering och datalogiskt tänkande, på delprov 3. Klarar alla frågor förutom: http://puu.sh/2K2iD/f4a0635e6a.png

Har suttit med den ett bra tag nu och håller på att bli tokig. Hjälp uppskattas!
Citera
2013-04-30, 15:44
  #811
Medlem
Citat:
Ursprungligen postat av nilssown
Sitter med den förberedande kursen i programmering och datalogiskt tänkande, på delprov 3. Klarar alla frågor förutom: http://puu.sh/2K2iD/f4a0635e6a.png

Har suttit med den ett bra tag nu och håller på att bli tokig. Hjälp uppskattas!
Kod:
n = 0
while n < 76:
    sum = namn[n]
    print(sum, end=" ")
    n += 1
Under vardera del av loopen sätts variabeln sum till det n:te ordet i listan, som sedan printas med ett mellanrum i slutet av ordet.

Problemet med exempelvis fjärde är att du får en sträng i slutet som består av alla artiklar i listan, dock utan mellanrum. Jag misstänker att de ser det som ett fel!
Citera
2013-04-30, 23:36
  #812
Medlem
Går det att "calla" ett objekts __str__ metod i ett annat av klassens metoder?

Här är ett av klassens metoder:
Kod:
def get_answer(self):
        
            # Här tar programmet emot användarens svar och printar ut en sträng beroende på om svaret var rätt eller fel
            while self.fel1 <= 3 and self.svar != self.atomnummer and self.svar != self.beteckning:
                if self.val == 1:
                    if self.fel1 == 3:
                        print ("Rätt svar var", self.atomnummer)
                        self.fel1 -= 3
                        break
                    svar = int(input("Vilket atom nummer har " +self.beteckning+"?"))
                    self.svar = svar
                    if self.svar == self.atomnummer:
                        self.strang1 += "Du har svarat rätt"
                        print (strang)
                        self.strang1 = ""
                        
                    else:
                        self.strang1 += "Du har tyvärr svarat fel"
                        self.fel1 +=1
                        print (strang)
                        self.strang1 = ""
                        
                        
                elif self.val == 2:
                    if self.fel1 == 3:
                        print ("Rätt svar var: ", self.beteckning)
                        self.fel1 -= 3
                        break
                    svar = input("Vilken beteckning har atomnummer " +str(self.atomnummer) + "?")
                    self.svar = svar
                    if self.svar == self.beteckning:
                        self.strang1 += "Du har svarat rätt"
                        print (strang)
                        self.strang1 = ""
                        
                        
                    else:
                        self.strang1 += "Du har tyvärr svarat fel"
                        self.fel1 += 1
                        print (strang)
                        self.strang1 = ""
Här är min main funktion:
Kod:
def main():
    while True:
        strang = periodiska_systemet()
        strang.meny()    
        strang.dictionary1()
        strang.get_answer()
        strang.forsatta()
        
        
    

main()

Hursomhelst, när jag försöker calla klassens __str__ metod genom att skriva "print (strang)" där strang är mitt objekt. Då får jag felmeddelandet global name "strang" is not defined.
Citera
2013-05-05, 23:13
  #813
Medlem
Du får error av print(strang)

Jämför med min kod nedan; Inne i myfun så finns INGET som heter b.
Kod:
def myfun(a):
 print(
a)
b="hej"
myfun(b
Tips: funktionen myfun Skall bara använda sig av indata som den får
OK den kan använda sig av Klass medlemmar (om den är en metod och har tex self) och av globala variabler.
Du bör INTE använda globala variabler om du inte kan förklarar varför.
Du bör INTE heller använda klass variabler self.XX Om du inte kan förklarar varför.
Använd "vanliga" variabler istället.

Snälla snälla försök namnge saker för vad de gör:
fel1 = Säger INGET om vad det är.
fel1 = Borde kanske heta "attempts" "num_attempts" "tries" eller "num_errors"

strang = ??? Finns inget sådant i engelska eller svenska.
Om du menar "sträng" så är det mycket dåligt val då det inte är en "sträng".
Borde nog heta något beskrivande jmf med vad det innehåller, kanske myPeriodicTable ?

strang.meny() # Borde nog heta "strang.printMeny()" ( gissning )
Samma med resten av dina metod namn.( ganska lämpligt är dock get_answer )
Resten av dem bör skrivas så man kan se vad de gör med bara namnet.
Ex printMeny askIfUserWantsToContinue

Lycka till ;/
Citera
2013-05-10, 16:55
  #814
Medlem
Använder python 2.7 (med google app engine om det har betydelse)

Tanken är att skapa ett spelarobjekt och sedan öka objektets guld med 2.

Jag får dock "TypeError: 'long' object is not callable".
Vad beror detta på? Har jag gjort rätt annars i klassen?
Aldrig kunnat greppa OOP tidigare och nyss tagit upp Python igen så kom gärna med tips.

Kommenterar jag ut self.gold = current_user.gold så får jag iställlet "AttributeError: 'Player' object has no attribute 'gold'". Även fastän jag trodde att jag gav den det attributet senare när kallar test.gold, men jag antar att jag har fel där. Mycket som är nytt för mig som ni säkert märker. Tack på förhand!

Kod:
test = player.Player(user.user_id(),user.nickname())
test.gold(2)

Kod:
from google.appengine.ext import db
import datetime
import logging

class Player(object):
    def __init__(self, user_id, nickname):
        current_user = Character.get_or_insert(user_id)
        if current_user.name:
            logging.error("CHARACTER EXISTS CHARACTER EXISTS CHARACTER EXISTS")
        else:
            logging.error("CREATING CHARACTER!CREATING CHARACTER!CREATING CHARACTER!")
            current_user = Character(key_name=user_id,
            name=nickname,
            health=40,
            birthdate=datetime.datetime.now(),
            last_adventure=datetime.datetime.now() - datetime.timedelta(seconds=3601),
            total_adventures=0,
            gold=0)
            current_user.put()
        
        self.user = user_id
        self.name = current_user.name
        self.health = current_user.health
        self.birthdate = current_user.birthdate
        self.last_adventure = current_user.last_adventure
        self.total_adventures = current_user.total_adventures
        self.gold = current_user.gold
        
        def gold(self, update):
            self.gold = self.gold + update
            return self.gold

            
        def health(self):
            return self.health
        def save(self):
            current_user = Character(self.user,
            self.name,
            self.health,
            self.birthdate,
            self.last_adventure,
            self.total_adventures,
            self.gold)
            current_user.put()
        
class Character(db.Model):
    name = db.StringProperty()
    health = db.IntegerProperty()
    birthdate = db.DateTimeProperty()
    last_adventure = db.DateTimeProperty()
    total_adventures = db.IntegerProperty()
    gold = db.IntegerProperty()
Citera
2013-05-10, 17:08
  #815
Moderator
vhes avatar
Citat:
Ursprungligen postat av raecer
Tanken är att skapa ett spelarobjekt och sedan öka objektets guld med 2.

Ditt problem är att du använder namnet 'gold' till två olika saker. Den ena är variabeln i vilken du sparar hur mycket guld spelaren har (den initieras på sista raden i __init__), den andra är en metod som adderar ett värde till variabeln. Namnkrocken gör helt enkelt att det senaste definierade vinner (i det här fallet variabeln som sätts i __init__).

Mitt förslag är att du helt enkelt döper om metoden gold() till add_gold() och anropar den istället.

Utöver det ser det ut att vara indenteringsfel där du definierar dina metoder (gold, health, save). De bör dedenteras en nivå (alltså ha en chunk spaces mindre innan).
Citera
2013-05-10, 17:32
  #816
Medlem
Citat:
Ursprungligen postat av vhe
Ditt problem är att du använder namnet 'gold' till två olika saker. Den ena är variabeln i vilken du sparar hur mycket guld spelaren har (den initieras på sista raden i __init__), den andra är en metod som adderar ett värde till variabeln. Namnkrocken gör helt enkelt att det senaste definierade vinner (i det här fallet variabeln som sätts i __init__).

Mitt förslag är att du helt enkelt döper om metoden gold() till add_gold() och anropar den istället.

Utöver det ser det ut att vara indenteringsfel där du definierar dina metoder (gold, health, save). De bör dedenteras en nivå (alltså ha en chunk spaces mindre innan).

Ah, typiskt mig. Tack, nu fungerar det!

Om någon har övriga kommentarer så tar jag gärna emot andra åsikter.

Har lite svårt att avgöra vad som hör hemma i spelar-klassen. Om den bör kunna spara sig själv till databasen exempelvis eller om en annan klass eller metod bör sköta det.

Och om den bör kolla så att användaren är inloggad eller om det ska skötas på ett annat ställe (vilket jag gör just nu).

Och även ifall varje metod såsom "add_gold", "add_health" ska kunna spara den variabeln i databasen eller om jag åberopar förändringen först som "player.add_gold" och sedan "player.save_current_stuff".

Mycket frågor Tack för hjälpen än igen!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback