Programmering 1 med Python, begränsa antalet i en vektor till 25!

Permalänk
Medlem

Programmering 1 med Python, begränsa antalet i en vektor till 25!

Hej läser programmering 1 och har fastnat på en uppgift!

Vill begränsa antalet passagerare som stiger på bussen till 25, blir antalet över 25 så ska det stå bussen är full! Har försökt med flera olika metoder men får inte till det! Hur kan jag göra? Tacksam för svar

Uppgiften besrkivs såhär:

I objektet minbuss ska det finns en vektor som håller reda på 25 stycken passagerare. Varje element i vektorn är en ålder.

Man ska inte kunna stoppa in fler passagerare än vad som får plats.

Är bussen full ska man få meddelande om detta och passageraren kan inte stiga på.

MIN KOD:

import replit
from getkey import getkey, keys

#class for the passenger list
class Buss:
passengers = []
number_of_passengers = 0

def run(self):
menuOptions = ["Lägg till passagerare\t", "Visa ålder på alla passagerare\t", "Se total åldern på alla passagerare \t", "Avsluta program...\t"]
menuSelected = 0

while(True):
replit.clear()
print("Välkommen till västtrafik, ange vilken menyval du vill se:")
print("\x1b[?25l")

if menuSelected == 0:
print(menuOptions[0] + "<--")
print(menuOptions[1])
print(menuOptions[2])
print(menuOptions[3])
elif menuSelected == 1:
print(menuOptions[0])
print(menuOptions[1] + "<--")
print(menuOptions[2])
print(menuOptions[3])
elif menuSelected == 2:
print(menuOptions[0])
print(menuOptions[1])
print(menuOptions[2] + "<--")
print(menuOptions[3])
elif menuSelected == 3:
print(menuOptions[0])
print(menuOptions[1])
print(menuOptions[2])
print(menuOptions[3] + "<--")

keyPressed = getkey()
if keyPressed == keys.DOWN and menuSelected + 1 != len(menuOptions):
menuSelected += 1
elif keyPressed == keys.UP and menuSelected >= 1:
menuSelected -=1
elif keyPressed == keys.ENTER:
if menuSelected == 0:
add_passenger(self.passengers)
elif menuSelected == 1:
print_bus(self.passengers)
elif menuSelected == 2:
calc_total_age(self.passengers)
elif menuSelected == 3:
print("\x1b[?25h")
break

#Meny funktioner:

#menuOptions 0
def add_passenger(passengers):
replit.clear()
passenger_age = int(input("Ange åldern på passageraren som ska stiga på Västrafik bussen: "))
print(passenger_age)
passengers.append(passenger_age)
input("Tryck enter för att gå tillbaka till menyval")

#menuOptions 1
def print_bus(passengers):
replit.clear()
print("Ålder på passagerarna som är på bussen :")
print(*passengers, sep = ", ")
input("Tryck enter för att gå tillbaka till menyval")

#menuOptions 2
def calc_total_age(passengers):
replit.clear()
total_age = sum(passengers)
print("Den totala åldern på alla passagerare är " + str(total_age) + " år")
input("Tryck enter för att gå tillbaka till menyval")

class Program:
def __init__(self, *args):
minbuss = Buss()
minbuss.run()

replit.clear()
input("Tack för att ni reste med västtrafik,\n Tryck enter för att avsluta..")
replit.clear()

if __name__ == "__main__":
my_program = Program()

Permalänk
Medlem
Skrivet av MajaS:

Hej läser programmering 1 och har fastnat på en uppgift!

Vill begränsa antalet passagerare som stiger på bussen till 25, blir antalet över 25 så ska det stå bussen är full! Har försökt med flera olika metoder men får inte till det! Hur kan jag göra? Tacksam för svar

Uppgiften besrkivs såhär:

I objektet minbuss ska det finns en vektor som håller reda på 25 stycken passagerare. Varje element i vektorn är en ålder.

Man ska inte kunna stoppa in fler passagerare än vad som får plats.

Är bussen full ska man få meddelande om detta och passageraren kan inte stiga på.

MIN KOD:

import replit
from getkey import getkey, keys

#class for the passenger list
class Buss:
passengers = []
number_of_passengers = 0

def run(self):
menuOptions = ["Lägg till passagerare\t", "Visa ålder på alla passagerare\t", "Se total åldern på alla passagerare \t", "Avsluta program...\t"]
menuSelected = 0

while(True):
replit.clear()
print("Välkommen till västtrafik, ange vilken menyval du vill se:")
print("\x1b[?25l")

if menuSelected == 0:
print(menuOptions[0] + "<--")
print(menuOptions[1])
print(menuOptions[2])
print(menuOptions[3])
elif menuSelected == 1:
print(menuOptions[0])
print(menuOptions[1] + "<--")
print(menuOptions[2])
print(menuOptions[3])
elif menuSelected == 2:
print(menuOptions[0])
print(menuOptions[1])
print(menuOptions[2] + "<--")
print(menuOptions[3])
elif menuSelected == 3:
print(menuOptions[0])
print(menuOptions[1])
print(menuOptions[2])
print(menuOptions[3] + "<--")

keyPressed = getkey()
if keyPressed == keys.DOWN and menuSelected + 1 != len(menuOptions):
menuSelected += 1
elif keyPressed == keys.UP and menuSelected >= 1:
menuSelected -=1
elif keyPressed == keys.ENTER:
if menuSelected == 0:
add_passenger(self.passengers)
elif menuSelected == 1:
print_bus(self.passengers)
elif menuSelected == 2:
calc_total_age(self.passengers)
elif menuSelected == 3:
print("\x1b[?25h")
break

#Meny funktioner:

#menuOptions 0
def add_passenger(passengers):
replit.clear()
passenger_age = int(input("Ange åldern på passageraren som ska stiga på Västrafik bussen: "))
print(passenger_age)
passengers.append(passenger_age)
input("Tryck enter för att gå tillbaka till menyval")

#menuOptions 1
def print_bus(passengers):
replit.clear()
print("Ålder på passagerarna som är på bussen :")
print(*passengers, sep = ", ")
input("Tryck enter för att gå tillbaka till menyval")

#menuOptions 2
def calc_total_age(passengers):
replit.clear()
total_age = sum(passengers)
print("Den totala åldern på alla passagerare är " + str(total_age) + " år")
input("Tryck enter för att gå tillbaka till menyval")

class Program:
def __init__(self, *args):
minbuss = Buss()
minbuss.run()

replit.clear()
input("Tack för att ni reste med västtrafik,\n Tryck enter för att avsluta..")
replit.clear()

if __name__ == "__main__":
my_program = Program()

Börja med att lägga din kod i code-taggar så den går att läsa

Visa signatur

:(){ :|:& };:

🏊🏻‍♂️   🚴🏻‍♂️   🏃🏻‍♂️   ☕

Permalänk
Medlem

Jag ser ingenting i koden där du försöker begränsa antalet passagerare.

Vart tänker du att det vore lämpligt att lägga till detta?
Hur tänker du att du skulle kunna göra?

Ibland behöver man bara förklara sin tankegång högt för någon, eller i text, för att det ska lossna.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

import replit
from getkey import getkey, keys

#class for the passenger list
class Buss:
passengers = []
number_of_passengers = 0

#The main part of the program where the menu system is. From here
the functions are called.
def run(self):
menuOptions = ["Lägg till passagerare\t", "Visa ålder på alla passagerare\t", "Se total åldern på alla passagerare \t", "Avsluta program...\t"]
menuSelected = 0

while(True):
replit.clear()
print("Välkommen till västtrafik, ange vilken menyval du vill se:")
print("\x1b[?25l")

if menuSelected == 0:
print(menuOptions[0] + "<--")
print(menuOptions[1])
print(menuOptions[2])
print(menuOptions[3])
elif menuSelected == 1:
print(menuOptions[0])
print(menuOptions[1] + "<--")
print(menuOptions[2])
print(menuOptions[3])
elif menuSelected == 2:
print(menuOptions[0])
print(menuOptions[1])
print(menuOptions[2] + "<--")
print(menuOptions[3])
elif menuSelected == 3:
print(menuOptions[0])
print(menuOptions[1])
print(menuOptions[2])
print(menuOptions[3] + "<--")

keyPressed = getkey()
if keyPressed == keys.DOWN and menuSelected + 1 != len(menuOptions):
menuSelected += 1
elif keyPressed == keys.UP and menuSelected >= 1:
menuSelected -=1
elif keyPressed == keys.ENTER:
if menuSelected == 0:
add_passenger(self.passengers)
elif menuSelected == 1:
print_bus(self.passengers)
elif menuSelected == 2:
calc_total_age(self.passengers)
elif menuSelected == 3:
print("\x1b[?25h")
break

#Meny funktioner:

#menuOptions 0
def add_passenger(passengers):
replit.clear()
passenger_age = int(input("Ange åldern på passageraren som ska stiga på Västrafik bussen: "))
print(passenger_age)
passengers.append(passenger_age)
input("Tryck enter för att gå tillbaka till menyval")
I DENNA DEF METODEN FÖRSÖKTE JAG MED IF SATSEN FUNKADE EJ?

#menuOptions 1
def print_bus(passengers):
replit.clear()
print("Ålder på passagerarna som är på bussen :")
print(*passengers, sep = ", ")
input("Tryck enter för att gå tillbaka till menyval")

#menuOptions 2
def calc_total_age(passengers):
replit.clear()
total_age = sum(passengers)
print("Den totala åldern på alla passagerare är " + str(total_age) + " år")
input("Tryck enter för att gå tillbaka till menyval")

class Program:
def __init__(self, *args):
minbuss = Buss()
minbuss.run()

replit.clear()
input("Tack för att ni reste med västtrafik,\n Tryck enter för att avsluta..")
replit.clear()

if __name__ == "__main__":
my_program = Program()

Permalänk
Medlem

Har testat att i min def add_passengers att lägga in en if sats där add_passengers inte ska vara mer än 25, har lagt antalet number_of_passengers = 25, har gjort en while sats med try and expect där om antal är över 25 så ska det printas ut bussen är full, problemet där blev att programmet bara irriterade sig och återvände inte till meny när man skriv in ålder på passagerare, har testat med for in range. Programmet i övrigt fungerar hur bra som helst, är osäker på vart någonstans i min kod jag kan begränsa antalet, rent logiskt tänker jag i metoden def add_passengers men får bara upp fel kod och kan fortsätta mata in mer än 25 passagerare?

Problemet är i min def add_passengers får jag upp fel meddelandet "TypeError: '>' not supported between instances of 'function' and 'int'"

Det mest logiska är i def add_passengers eftersom det är därifrån jag får input av användaren, men där blir det error, försökte med koder som if passengers > 25 print(Bussen är full) men int och function där går inte ihop? Vad kan jag använda i min if sats? Har testat och sökt på flera olika sätt men lyckas inte få till det, sista delen i min kod annars fungerar allt annat i programmet bra

Permalänk
Medlem

Kan du skriva ut den if-sats som du försökte att använda?

Edit: Du har en variabel som heter number_of_passengers. Vad har du tänkt att använda den till?

Permalänk
Medlem

Använde if passengers > 25
print("Bussen är full")

Eller
passangers_age = int(input("Ange ålder för passangerare: "))
print(passangers_age)
passagerare.append(passangers_age)
add_passangers.append +=1
if add_passangers > 25:
print("Bussen är full")

I guiden när vi skapade programmet så var den med, men anser inte heller sjäv att jag har någon använding för den, så jag anropar inget från number_of_passengers, kan man ha en if sats som begränsar antalet i en vektor utan fel meddelandet
TypeError: '>' not supported between instances of 'function' and 'int'
Behöver ja döpa om någon funktion för att det ska funka?

Permalänk
Medlem

@MajaS Vill som några andra redan gjort slå ett slag för code-taggar. Det blir extra illa med trasig formattering i Python eftersom indentering är en del av syntaxen.

See denna guide för hur du gör: https://www.sweclockers.com/forum/trad/1647458-sa-har-lagger-...

Permalänk
Medlem

Tack för tipset om hur man gör koden bra!

import replit from getkey import getkey, keys #class for the passenger list class Buss: passengers = [] number_of_passengers = 0 #The main part of the program where the menu system is. From here the functions are called. def run(self): menuOptions = ["Lägg till passagerare\t", "Visa ålder på alla passagerare\t", "Se total åldern på alla passagerare \t", "Avsluta program...\t"] menuSelected = 0 while(True): replit.clear() print("Välkommen till västtrafik, ange vilken menyval du vill se:") print("\x1b[?25l") if menuSelected == 0: print(menuOptions[0] + "<--") print(menuOptions[1]) print(menuOptions[2]) print(menuOptions[3]) elif menuSelected == 1: print(menuOptions[0]) print(menuOptions[1] + "<--") print(menuOptions[2]) print(menuOptions[3]) elif menuSelected == 2: print(menuOptions[0]) print(menuOptions[1]) print(menuOptions[2] + "<--") print(menuOptions[3]) elif menuSelected == 3: print(menuOptions[0]) print(menuOptions[1]) print(menuOptions[2]) print(menuOptions[3] + "<--") keyPressed = getkey() if keyPressed == keys.DOWN and menuSelected + 1 != len(menuOptions): menuSelected += 1 elif keyPressed == keys.UP and menuSelected >= 1: menuSelected -=1 elif keyPressed == keys.ENTER: if menuSelected == 0: add_passenger(self.passengers) elif menuSelected == 1: print_bus(self.passengers) elif menuSelected == 2: calc_total_age(self.passengers) elif menuSelected == 3: print("\x1b[?25h") break #Meny funktioner: #menuOptions 0 def add_passenger(passengers): replit.clear() passenger_age = int(input("Ange åldern på passageraren som ska stiga på Västrafik bussen: ")) print(passenger_age) passengers.append(passenger_age) input("Tryck enter för att gå tillbaka till menyval") #menuOptions 1 def print_bus(passengers): replit.clear() print("Ålder på passagerarna som är på bussen :") print(*passengers, sep = ", ") input("Tryck enter för att gå tillbaka till menyval") #menuOptions 2 def calc_total_age(passengers): replit.clear() total_age = sum(passengers) print("Den totala åldern på alla passagerare är " + str(total_age) + " år") input("Tryck enter för att gå tillbaka till menyval") class Program: def __init__(self, *args): minbuss = Buss() minbuss.run() replit.clear() input("Tack för att ni reste med västtrafik,\n Tryck enter för att avsluta..") replit.clear() if __name__ == "__main__": my_program = Program()

Permalänk
Medlem
Skrivet av MajaS:

import replit from getkey import getkey, keys #class for the passenger list class Buss: passengers = [] number_of_passengers = 0 #The main part of the program where the menu system is. From here the functions are called. def run(self): menuOptions = ["Lägg till passagerare\t", "Visa ålder på alla passagerare\t", "Se total åldern på alla passagerare \t", "Avsluta program...\t"] menuSelected = 0 while(True): replit.clear() print("Välkommen till västtrafik, ange vilken menyval du vill se:") print("\x1b[?25l") if menuSelected == 0: print(menuOptions[0] + "<--") print(menuOptions[1]) print(menuOptions[2]) print(menuOptions[3]) elif menuSelected == 1: print(menuOptions[0]) print(menuOptions[1] + "<--") print(menuOptions[2]) print(menuOptions[3]) elif menuSelected == 2: print(menuOptions[0]) print(menuOptions[1]) print(menuOptions[2] + "<--") print(menuOptions[3]) elif menuSelected == 3: print(menuOptions[0]) print(menuOptions[1]) print(menuOptions[2]) print(menuOptions[3] + "<--") keyPressed = getkey() if keyPressed == keys.DOWN and menuSelected + 1 != len(menuOptions): menuSelected += 1 elif keyPressed == keys.UP and menuSelected >= 1: menuSelected -=1 elif keyPressed == keys.ENTER: if menuSelected == 0: add_passenger(self.passengers) elif menuSelected == 1: print_bus(self.passengers) elif menuSelected == 2: calc_total_age(self.passengers) elif menuSelected == 3: print("\x1b[?25h") break #Meny funktioner: #menuOptions 0 def add_passenger(passengers): replit.clear() passenger_age = int(input("Ange åldern på passageraren som ska stiga på Västrafik bussen: ")) print(passenger_age) passengers.append(passenger_age) input("Tryck enter för att gå tillbaka till menyval") #menuOptions 1 def print_bus(passengers): replit.clear() print("Ålder på passagerarna som är på bussen :") print(*passengers, sep = ", ") input("Tryck enter för att gå tillbaka till menyval") #menuOptions 2 def calc_total_age(passengers): replit.clear() total_age = sum(passengers) print("Den totala åldern på alla passagerare är " + str(total_age) + " år") input("Tryck enter för att gå tillbaka till menyval") class Program: def __init__(self, *args): minbuss = Buss() minbuss.run() replit.clear() input("Tack för att ni reste med västtrafik,\n Tryck enter för att avsluta..") replit.clear() if __name__ == "__main__": my_program = Program()

Mycket bättre formatering Nu har jag laddat hem koden och provat den. Snyggt program!

Det du behöver ha koll på är att en lista i Python (passengers = [] i din kod) har en längd. Längden motsvarar antalet element i listan. Om du söker på nätet efter hur man kollar längden på en lista, i Python, och kombinerar det med if-satsen du visade ovan tror jag du är hemma

Kuriosa: I andra programmeringsspråk kan man istället fråga efter storleken på en lista och då behöver man beräkna längden på listan genom att dela storleken på listan med storleken på elementen i listan.

Dold text
Visa signatur

:(){ :|:& };:

🏊🏻‍♂️   🚴🏻‍♂️   🏃🏻‍♂️   ☕

Permalänk
Medlem

Mycket koddubblering när du skriver ut menyn kan du förenkla med:

def printMenu(): for i, option in enumerate(menuOptions): if i == menuSelected: option += "<--" print(option)

Då kan du även lägga till fler alternativ utan att behöva skriva om allt.

så hela raddan med

if menuSelected == 0: print(menuOption[0] ...

ersätt med en:

printMenu()

Tror för övrigt du letar efter

if len(passengers) > 25:

len() returnerar längden på en lista

Permalänk
Medlem

Tack för er hjälp och tips GLaDER och swesen!

Ska testa det nu och återkomma med resultatet!

Angående menyn så håller jag med om det, men tror vår lärare vill att vi skriver dem på så sätt! Kan jag ta bort number_of_passengers? Eller har den någon funktion?

Sedan vad beror min error fel "TypeError: '>' not supported between instances of 'function' and 'int'" på i min def antal_passengers?

TUSEN TACK!!

Permalänk
Medlem
Skrivet av MajaS:

Tack för er hjälp och tips GLaDER och swesen!

Ska testa det nu och återkomma med resultatet!

Angående menyn så håller jag med om det, men tror vår lärare vill att vi skriver dem på så sätt! Kan jag ta bort number_of_passengers? Eller har den någon funktion?

Sedan vad beror min error fel "TypeError: '>' not supported between instances of 'function' and 'int'" på i min def antal_passengers?

TUSEN TACK!!

antal_passengers är en funktion som du försöker jämföra med ett heltal, därav felmeddelandet.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem
Skrivet av MajaS:

Angående menyn så håller jag med om det, men tror vår lärare vill att vi skriver dem på så sätt! Kan jag ta bort number_of_passengers? Eller har den någon funktion?

Den här uppgiften brukar vanligtvis vara i C# istället för Python, och då har den inbyggda array-typen alltid en fast storlek. D.v.s. tanken är då att deklarera en array med 25 element (där alla element till en början är "tomma"), och så håller man reda på hur många platser som faktiskt är fyllda i en separat variabel.

I Python så har man istället listor som kan ändra storlek (t.ex. med append() som du använder för att lägga till passagerare). Om du gör på det sättet så har du därmed ingen användning för number_of_passengers, eftersom antalet passagerare kommer vara lika många som antalet element i listan.

Hur det är tänkt att du ska göra är svårt att säga utifrån informationen du gett, troligtvis har någon bara tagit C#-uppgiften och ändrat till Python utan att riktigt tänka på konsekvenserna.

Skrivet av GLaDER:

Kuriosa: I andra programmeringsspråk kan man istället fråga efter storleken på en lista och då behöver man beräkna längden på listan genom att dela storleken på listan med storleken på elementen i listan.

Om du tänker på C så bör man oftast undvika det "tricket", det resulterar ofta i fel storlek (för att arrayen hanteras som en pekare) och i de sammanhang det fungerar i så vet man oftast redan storleken på arrayen ändå.

Permalänk
Medlem

@ perost

Började koda i både c# och Python i början av min kurs sedan valde att endast fortsätta med python, denna kod är skriven utifrån den studieguiden vi har och följd dem instruktionerna från läraren!

Har sökt på nätet för att fastslå hur man kan stoppa inmatning efter antalet överstiger 25, men lyckas inte få till, hur gör man i python då?

Permalänk
Medlem

#menuOptions 0
def add_passenger(passengers):
replit.clear()
passenger_age = int(input("Ange åldern på passageraren som ska stiga på Västrafik bussen: "))
print(passenger_age)
passengers.append(passenger_age)
input("Tryck enter för att gå tillbaka till menyval")
if len(passengers) > 25:
print("full")

Testade att skriva så nu men inget händer kan fortsätta att mata in även efter 25?

Permalänk
Medlem
Skrivet av MajaS:

@ perost

Började koda i både c# och Python i början av min kurs sedan valde att endast fortsätta med python, denna kod är skriven utifrån den studieguiden vi har och följd dem instruktionerna från läraren!

Har sökt på nätet för att fastslå hur man kan stoppa inmatning efter antalet överstiger 25, men lyckas inte få till, hur gör man i python då?

if antal <= 25: add(); else print("Full");

Hur du hittar antal element i en lista i Python: https://stackoverflow.com/questions/1712227/how-do-i-get-the-...

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem

#menuOptions 0
def add_passenger(passengers):
replit.clear()
passenger_age = int(input("Ange åldern på passageraren som ska stiga på Västrafik bussen: "))
print(passenger_age)
passengers.append(passenger_age)
if len(passengers) > 25:
print("Bussen är nu full, vänligen vänta på nästa västtrafik buss!")
input("Tryck enter för att gå tillbaka till menyval")

Koden fungerar nu!!!
Tusen tack alla!!!!!

Permalänk
Medlem
Skrivet av MajaS:

#menuOptions 0
def add_passenger(passengers):
replit.clear()
passenger_age = int(input("Ange åldern på passageraren som ska stiga på Västrafik bussen: "))
print(passenger_age)
passengers.append(passenger_age)
if len(passengers) > 25:
print("Bussen är nu full, vänligen vänta på nästa västtrafik buss!")
input("Tryck enter för att gå tillbaka till menyval")

Koden fungerar nu!!!
Tusen tack alla!!!!!

Nu ger du dock bara ett meddelande när bussen är full men användaren kan ändå fortsätta mata in fler passagerare. Du måste kolla om bussen är full före att du lägger till en passagerare, inte efter.

Permalänk
Medlem

Tack för tipset ska testa det nu!

Permalänk
Medlem

@MajaS Tror det är samma uppgift jag skrev för ett tag sen: #19291782

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B