Vinnaren i pepparkakshustävlingen!
2014-07-04, 10:24
  #985
Moderator
vhes avatar
Citat:
Ursprungligen postat av SilverHermansson
Min fråga är ju då hur jag får programmet att ta det talet det får av "ditt_tal = large - small" och räkna samma sak i nästa while loop men med det nya talet?

1. Läs https://www.flashback.org/announcement.php?f=307
2. Flytta satsen n = ditt_tal in i loopen.
Citera
2014-07-04, 10:33
  #986
Medlem
Citat:
Ursprungligen postat av SilverHermansson
Nu har jag kommit lite lite längre. Programmet räknar bara ut det stora minus det lilla talet en gång men den proceduren upprepas oändligt antal ggr.
Såhär ser programmet ut nu.

Kod:
ditt_tal=str(input("vilket ar ditt fyrsiffriga tal?"))

kaprekar=6174

antal_varv=0

n =ditt_tal

while ditt_tal != kaprekar:
    

    if ditt_tal != kaprekar:
        
        sorted(n)
    
        sorted(n, reverse=True)

        large = int("".join(sorted(n, reverse=True)))


        small = int("".join(sorted(n)))
        
    
        ditt_tal = large - small

       
    else:
        print("det tog", antal_varv, "iterationer innan det blev kaprekars tal")

    antal_varv += 1


Min fråga är ju då hur jag får programmet att ta det talet det får av "ditt_tal = large - small" och räkna samma sak i nästa while loop men med det nya talet?

Tack!!
Och nu ser man också att ökningen av antal_varv är på rätt ställe.

Däremot ska, som påpekats tidigare, tilldelningen av n flyttas in i loopen. Annars räknar du ju med samma n hela tiden.
Citera
2014-07-04, 11:12
  #987
Medlem
Tack! Nu löste det sig!
Citera
2014-07-04, 11:45
  #988
Medlem
Såhär löste jag uppgiften, ifall du är nyfiken att ta en titt på koden.

Kod:
def gen(number):
    nr = sorted(number)
    return "".join(nr) + "-" + "".join(reversed(nr))

def calc(number):
    total = 1
    while True:
        nr = number.split("-")
        smal = nr[0]
        large = nr[1]
        summ = str(int(large)-int(smal))
        print(large + " - " + smal + " = " + summ)

        if summ == "6174":
            print("\n" + "Total: " + str(total))
            break
        else:
            total += 1
            number = gen(summ)

if __name__ == "__main__":
    while True:
        try:
            n = int(input("Skriv ett fyrsiffrigt tal: "))
            if not len(str(n)) == 4:
                continue
            break
        except:
            continue
    print()

    calc(gen(str(n)))
Citera
2014-07-05, 11:07
  #989
Medlem
Den rekursiva lösningen på en rad (för nördar):
Kod:
def f(x): return 0 if x == 6174 else 1 + (lambda s: f(int(s[::-1]) - int(s)))("".join(sorted(str(x))))

print(f(3712))
Citera
2014-07-07, 12:57
  #990
Medlem
HEj!
Jag ska skriva ett program som ett nöjesfält. Det ska vara 3 attraktioner och de ska kunna haverera. Jag har skrivit såhär mycket nu men kan inte komma vidare riktigt. Ska skriva en main funktion också men vet inte riktigt hur.

Är det någon som har tips hade det varit väldigt snällt! Alla tips är bra, vill verkligen lära mig men tycker fortfarande att det är svårt. .

Tack Tack!!

Kod:
import random

attraktioner 
= ["uppskjutet","bergodalbana","skräcktunneln"]


class 
Nojesfalt:
    
def __init__(selfattraktion):
        
self.val attraktion
        self
.langd 0
        self
.alder 0


#längdgräns för uppskjutet
    
def langdgrans(self):
        print(
"")
        
self.langd int(input("Hur många centimeter lång är du? "))
        if 
self.langd 140:
            print(
"tyvärr, du är inte lång nog, kom tillbaka nästa år.")
            return 
0
        
else:
            print(
"Håll i dig, nu åker vi.")
            print(
" ")
            return 
1

#åldersgräns för skräcktunneln
    
def aldersgrans(self):
        print(
"")
        
self.alder int(input("Hur gammal är du? "))
        if 
self.alder 10:
            print(
"tyvärr, du är inte gammal nog, kom tillbaka nästa år")
            return 
0

        
else:
            print(
"Är du säker på att du vågar? Då åker vi!!")
            print(
" ")
            return 
1


#åker attraktion uppskjutet eller bergochdalbana
        
def aka(self):
        print(
"")
        print(
self.val)
        
tal random.randint(0,100)
            if 
tal 20:
                print(
"Nej!" ,self.val"har havererat!")            
            else:
                
tal >= 20:
                print(
"Yiiiiihoooooo")
                return 
1

#går in i skräcktunneln
        
def aka1(self):
            print(
"")
        print(
self.val)
        
tal random.randint(0,100)
            if 
tal 20:
            print(
"Nej, något är trasigt, dörren är låst")            return 0
            elif tal 
>= 20:
            print(
"wwwaaaahhhhh")
                return 
1

#programkod
def main():

    print(
"Välkommen till detta nojesfalt!!!")
    print(
" ")
    
    
ValjaAttraktion int(input("Vilken attraktion vill du åka? \n 1. uppskjutet \n 2. Berg och Dalbanan \n 3. Skräcktunneln"
Citera
2014-07-09, 16:17
  #991
Medlem
Citat:
Ursprungligen postat av SilverHermansson
HEj!
Jag ska skriva ett program som ett nöjesfält. Det ska vara 3 attraktioner och de ska kunna haverera. Jag har skrivit såhär mycket nu men kan inte komma vidare riktigt. Ska skriva en main funktion också men vet inte riktigt hur.

Vad är det exakt du vill att programmet ska göra?
Citera
2014-07-09, 17:18
  #992
Medlem
Kod:
class App():

    def __init__(self, age, length):
        self.age = int(age)
        self.length = int(length)
        self.minLength = 140

    def RollerCoaster(self):

        if self.length < self.minLength:
            print("Du får inte åka.")
        else:
            print("Yeah")


# Main funktionen
if __name__ == "__main__":
    park = App(input("Ålder: "), input("Längd: "))
    park.RollerCoaster()

Python har ingen main funktoin, eller operator. Istället skriver man "main funktionen" som en if-satts. Där deklarerar du och initierar en variabel med med namnet på din klass (om det är en klass med flera funktioner. Du behöver inte göra det).

Inne i klassen sen så skapar du en funktion med namnet __init__. Vilket är pythons motsvarighet till en operator. Och deklarerar globala variabler med self.. Med den biten verkar du ha koll på.

När du vill anropa dom olika funktionerna i din klass. Så kan du göra det genom att anropa namnen på objektet och sen namnet på funktionen. park.RollerCoaster()
Citera
2014-07-10, 08:41
  #993
Medlem
Citat:
Ursprungligen postat av Boroshlawa
Kod:
class App():

    def __init__(self, age, length):
        self.age = int(age)
        self.length = int(length)
        self.minLength = 140

    def RollerCoaster(self):

        if self.length < self.minLength:
            print("Du får inte åka.")
        else:
            print("Yeah")


# Main funktionen
if __name__ == "__main__":
    park = App(input("Ålder: "), input("Längd: "))
    park.RollerCoaster()

Python har ingen main funktoin, eller operator. Istället skriver man "main funktionen" som en if-satts. Där deklarerar du och initierar en variabel med med namnet på din klass (om det är en klass med flera funktioner. Du behöver inte göra det).

Inne i klassen sen så skapar du en funktion med namnet __init__. Vilket är pythons motsvarighet till en operator. Och deklarerar globala variabler med self.. Med den biten verkar du ha koll på.

När du vill anropa dom olika funktionerna i din klass. Så kan du göra det genom att anropa namnen på objektet och sen namnet på funktionen. park.RollerCoaster()

Tack för tips! Jag har skrivit om det lite nu så det ser ut såhär:

Kod:
import random 

attraktion = ["uppskjutet","bergodalbana","skräcktunneln"] 


class Nojesfalt: 
    def __init__(self, attraktion): 
        self.val = attraktion 
        self.langd = 0 
        self.alder = 0 


#längdgräns för uppskjutet 
    def langdgrans(self): 
        print("") 
        self.langd = int(input("Hur många centimeter lång är du? ")) 
        if self.langd < 140: 
            print("tyvärr, du är inte lång nog, kom tillbaka nästa år.") 
            return 0 
        else: 
            print("Håll i dig, nu åker vi.") 
            print(" ") 
            return 1 

#åldersgräns för skräcktunneln 
    def aldersgrans(self): 
        print("") 
        self.alder = int(input("Hur gammal är du? ")) 
        if self.alder < 10: 
            print("tyvärr, du är inte gammal nog, kom tillbaka nästa år") 
            return 0 

        else: 
            print("Är du säker på att du vågar? Då åker vi!!") 
            print(" ") 
            return 1 


#åker attraktion uppskjutet eller bergochdalbana 
        def aka(self): 
            print("") 
            print(self.val) 
            tal = random.randint(0,100) 
            if tal < 20: 
                print("Nej!" ,self.val, "har havererat!")
                return 0
            else: 
                print("Yiiiiihoooooo") 
                return 1

#går in i skräcktunneln 
        def aka1(self): 
            print("") 
            print(self.val) 
            tal = random.randint(0,100) 
            if tal < 20: 
                print("Nej, något är trasigt, dörren är låst")
                return 0
            else: 
                print("wwwaaaahhhhh") 
                return 1 

#programkod 
print("Välkommen till nöjesfältet")

vald_attr = input("Vad vill du göra?\n1. uppskjutet \n2. bergodalbana\n3. skräcktunneln\n4. Avsluta\n")

if vald_attr == "1":
        
    val = Nojesfalt(attraktion[0])
    if val.langdgrans() == 1:
        aka(self)

elif vald_attr == "2":

    val = Nojesfalt(attraktion[1])
    if val.langdgrans() == 1:
        aka(self)

else:

    val = Nojesfalt(attraktion[2])
    if val.aldersgrans() ==1:
        aka1(self)
        

Målet är att skriva ett program som kan köra nöjesfältet och man ska kunna åka attraktionerna plus att det ska kunna haverera slumpmässigt.

Tack för hjälp!!
__________________
Senast redigerad av SilverHermansson 2014-07-10 kl. 09:02.
Citera
2014-07-10, 08:42
  #994
Medlem
Glömde säga att problemet är att jag bara kommer såhär långt när jag kör det.

Välkommen till nöjesfältet
Vad vill du göra?
1. Uppskjutet
2. bergodalbana
3. skräcktunneln
4. Avsluta
1

Hur många centimeter lång är du? 180
Håll i dig, nu åker vi.

Traceback (most recent call last):
File "/Users/karinhermansson/Desktop/nytttest.py", line 72, in <module>
aka(self)
NameError: name 'aka' is not defined
>>>
__________________
Senast redigerad av SilverHermansson 2014-07-10 kl. 09:01.
Citera
2014-07-10, 16:31
  #995
Medlem
Citat:
Ursprungligen postat av SilverHermansson
Traceback (most recent call last):
File "/Users/karinhermansson/Desktop/nytttest.py", line 72, in <module>
aka(self)
NameError: name 'aka' is not defined
>>>

Det beror på att funktionen aka och aka1 är indenterade för långt. Man kan inte deklarera en funktion innanför en annan funktion. Sen måste du för att kunna anropa en funktion använda namnet på objektet du skapade. I ditt fall val, alltså val.aka(). Du ska inte skriva med self som parameter när du anropar en funktion. Den använder du bara när du skriver funktionen, för att den ska skicka med "sig själv" så att du kan använda objektets variabler.

Vill du ha lite mindre kod som kanske är lite lättare att förstå. Så kan du ta bort if-sattsen och sätta indexet av attraktionen direkt i initieringen av objektet val. Tänk bara på att index 1 inte är först utan 0.
Kod:
val = Nojesfalt(attraktion[int(vald_attr)])
val.aka()

Sen är det snyggare om du anropar funktionen som kollar längd och ålder innanför aka och aka1 funktionen. Vilket gör att du slipper skriva om funktionens anropet varje gång du ska köra en attraktion. Det går naturligtvis att göra som du gjort också, men det blir mindre kod och mer lättförståeligt.
Citera
2014-07-15, 14:05
  #996
Medlem
SgtDeepshits avatar
Har en riktig noobfråga här (Inte pluggat programmering sedan gymnasiet (8 år sedan)) och jag gör nu ett självtest som jag blir förbannad på att jag inte kan förstå.
Jag förstår inte vilka alternativ som stämmer här, och VARFÖR de gör det.
Försökt infoga och simulera detta i Python, men inte ens det fungerar.
Halp.
http://s29.postimg.org/rd0sf5jif/retardtest.jpg
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