8 svar
173 visningar
Python141 5
Postad: 22 jul 2023 20:32

skapa tom lista som fylls med element från användare

hej, jag ska skapa en bussimulator och i den ska jag skapa en tom lista som får innehålla max 25 element som ska fyllas på av användaren. Varje element är en passagerares ålder.  jag behöver hjälp med att veta vart i min kod jag ska skriva in att listan får max innehålla 25 stycken element? och när listan nått 25 element ska det skrivas ut att bussen är full.

nedan är min lösning som inte fungerar men jag har helt fastnat nu och behöver hjälp..

som ni ser har jag i def add_passenger försökt göra detta men det går inte..

har jag ens gjort rätt med att skriva in 25  i listan alltså i "passenger [25]" efter "class Bus"

import replit
from getkey import getkey, keys

class Bus:
passenger = [25]
antal_passenger = 0
def run(self):
print("Välkommen till bussimulatorn")


def add_passenger():
replit.clear()
b = Bus.passenger.append(int(input("Skriv in din ålder: ")))

while(True):
if b <= Bus.passenger:
print("Passagerare tillagd")
Bus.antal_passenger += 1
break
elif b > Bus.passenger:
print("Bussen är full.")
Bus.antal_passenger += 1

def print_bus():
replit.clear()
print("passagerarlista: ", Bus.passenger)
input("Press Enter to continue...")

def calc_total_age():
replit.clear()
total_age = 0
for x in range(len(Bus.passenger)):
total_age += Bus.passenger[x]
print("Totala ålder på passagerarna: ", total_age)
input("Press Enter to continue...")

def ExitProgram():
replit.clear()
print("Avslutar program...")
input("Press enter to continue")

menuOptions = ["Lägg till passagerare\t", "Se passagerarlista\t", "Totala ålder\t", "Avsluta program\t"]

menuSelected = 0

while(True):
replit.clear()

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()
elif menuSelected == 1:
print_bus()
elif menuSelected == 2:
calc_total_age()
elif menuSelected == 3:
ExitProgram()

bus = Bus()

bus.run()

Fermatrix 7841 – Fd. Medlem
Postad: 22 jul 2023 22:23 Redigerad: 22 jul 2023 23:59

Använd {:} för att infoga din kod formaterad.

Du kan göra på många sätt. Två enkla och intuitiva sätt:

1. Introducera en self.size, och i add passenger så kan du lägga till:

If self.size == 25

    print("bus is full.")

    # avbryt här

2. Du kan ta fram längden av din lista och använda den istället på samma sätt.

passenger är en lista av ett element, nämligen 25. Du kan göra så också, men det är rätt konstigt att använda en array av ett element istället för en variabel.

Sedan kan du städa upp koden en aning.

Du verkar köra C-style loop i calc age, men det är onödigt. Du kan använda den inbyggda funktionen sum, eller, om du verkligen vill loop, använd att listor är itererbara och vi kan därför bara göra ex:

for item in some_list

    .....

Man kan också använda sig av  en dictionary (hashmap)  för att göra sig av med stora if, elif, else block, men detta är nog lite att ta i då uppgiften är så simpel.

Python141 5
Postad: 23 jul 2023 00:33 Redigerad: 23 jul 2023 00:45
Dracaena skrev:

Använd {:} för att infoga din kod formaterad.

Du kan göra på många sätt. Två enkla och intuitiva sätt:

1. Introducera en self.size, och i add passenger så kan du lägga till:

If self.size == 25

    print("bus is full.")

    # avbryt här

2. Du kan ta fram längden av din lista och använda den istället på samma sätt.

passenger är en lista av ett element, nämligen 25. Du kan göra så också, men det är rätt konstigt att använda en array av ett element istället för en variabel.

Sedan kan du städa upp koden en aning.

Du verkar köra C-style loop i calc age, men det är onödigt. Du kan använda den inbyggda funktionen sum, eller, om du verkligen vill loop, använd att listor är itererbara och vi kan därför bara göra ex:

for item in some_list

    .....

Man kan också använda sig av  en dictionary (hashmap)  för att göra sig av med stora if, elif, else block, men detta är nog lite att ta i då uppgiften är så simpel.

Tusen tack för ditt svar!

Jag är väldigt ny till programmering.. undrar vad det är jag gör fel här:

class Bus:
passenger = []
antal_passenger = 0
def run(self):
print("Välkommen till bussimulatorn")

def size(self):

def add_passenger():
replit.clear()
b = Bus.passenger.append(int(input("Skriv in din ålder: ")))
if self.size == 2:
print("Bussen är full")

Fermatrix 7841 – Fd. Medlem
Postad: 23 jul 2023 11:27

size ska vara en klass variabel, du har definierat det som en funktion, och uppdaterar inte dens värde. 

Problemet med din ursprungliga kod är att du lägger till en användare med append, sedan jämför du två objekt.

Du vill först kolla om det är fullt, om ja, avbryt, lägg annars till användaren. 

Python141 5
Postad: 23 jul 2023 20:07
Dracaena skrev:

size ska vara en klass variabel, du har definierat det som en funktion, och uppdaterar inte dens värde. 

Problemet med din ursprungliga kod är att du lägger till en användare med append, sedan jämför du två objekt.

Du vill först kolla om det är fullt, om ja, avbryt, lägg annars till användaren. 

Fick inte det att fungera men testade istället detta:

import replit
from getkey import getkey, keys

class Bus:
passenger = []
antal_passenger = 0
def run(self):
print("Välkommen till bussimulatorn")

def add_passenger(self, age):
if len(self.passenger) < 25:
self.passenger.append(age)
print("Skriv in din ålder")
elif len(self.passenger) > 25:
print("Bussen är full")

def print_bus():
replit.clear()
print("passagerarlista: ", Bus.passenger)
input("Press Enter to continue...")

def calc_total_age():
replit.clear()
total_age = 0
for x in range(len(Bus.passenger)):
total_age += Bus.passenger[x]
print("Totala ålder på passagerarna: ", total_age)
input("Press Enter to continue...")

def ExitProgram():
replit.clear()
print("Avslutar program...")
input("Press enter to continue")

menuOptions = ["Lägg till passagerare\t", "Se passagerarlista\t", "Totala ålder\t", "Avsluta program\t"]

menuSelected = 0

while(True):
replit.clear()

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()
elif menuSelected == 1:
print_bus()
elif menuSelected == 2:
calc_total_age()
elif menuSelected == 3:
ExitProgram()

bus = Bus()

bus.run()

 

men det går tydligen inte heller.. vad är det jag gör fel,har suttit i flera dagar med denna lilla delen i programmet och jag fixar inte det..

Laguna Online 28607
Postad: 23 jul 2023 20:09

Förstod du det där med "Använd {:} för att infoga din kod formaterad."? Många struntar i att försöka läsa kod som inte är formaterad ordentligt.

Python141 5
Postad: 23 jul 2023 20:11 Redigerad: 23 jul 2023 20:21
Laguna skrev:

Förstod du det där med "Använd {:} för att infoga din kod formaterad."? Många struntar i att försöka läsa kod som inte är formaterad ordentligt.

import replit
from getkey import getkey, keys

class Bus:
  passenger = []
  antal_passenger = 0
  def run(self):
    print("Välkommen till bussimulatorn")

def add_passenger(self, age):
    if len(self.passenger) < 25:
      self.passenger.append(age)
      print("Skriv in din ålder")
    elif len(self.passenger) > 25:
      print("Bussen är full")

def print_bus():
    replit.clear()
    print("passagerarlista: ", Bus.passenger)
    input("Press Enter to continue...")

def calc_total_age():
    replit.clear()
    total_age = 0
    for x in range(len(Bus.passenger)):
      total_age += Bus.passenger[x]
    print("Totala ålder på passagerarna: ", total_age)
    input("Press Enter to continue...")

def ExitProgram():
    replit.clear()
    print("Avslutar program...")
    input("Press enter to continue")

menuOptions = ["Lägg till passagerare\t", "Se passagerarlista\t", "Totala ålder\t", "Avsluta program\t"]

menuSelected = 0

while(True):
    replit.clear()

    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()
        elif menuSelected == 1:
            print_bus()
        elif menuSelected == 2:
            calc_total_age()
        elif menuSelected == 3:
            ExitProgram()

bus = Bus()

bus.run()
Laguna Online 28607
Postad: 23 jul 2023 20:19

När du skriver ett inlägg så finns det en rad med symboler ovanför rutan du skriver i. Det står B, I, S, och en del andra saker, och nära slutet står det {;}. Markera din kod när du precis har klistrat i den och tryck på den symbolen. Det borde fungera.

Python141 5
Postad: 23 jul 2023 20:22
Laguna skrev:

När du skriver ett inlägg så finns det en rad med symboler ovanför rutan du skriver i. Det står B, I, S, och en del andra saker, och nära slutet står det {;}. Markera din kod när du precis har klistrat i den och tryck på den symbolen. Det borde fungera.

Tack så mycket, nu är förra inlägget av mig formaterad!

Svara Avbryt
Close