Python - Wer kann mir helfen dies zu lösen??

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mahi
User
Beiträge: 3
Registriert: Donnerstag 17. September 2020, 08:08

Schreibe ein Programm für einen Gebrauchtwagenhändler. Dieses soll aus einer
Endlosschleife bestehen, die den Anwender fragt, welche Aktion er durchführen will.
Dabei soll er folgende Optionen haben:
- Neuen Wagen hinzufügen
- Fahrzeug verkaufen
- Preis eines Fahrzeugs ändern
- Sortiment anzeigen
- Programm beenden
2) Die einzelnen Autos sollen in einem Objekt gespeichert werden. Erstelle hierfür in
einem neuen Modul die Klasse Auto. Sie soll die Attribute Artikelnummer, Marke,
Modell, Farbe, Baujahr und Preis enthalten. Diese Daten sollen gekapselt sein.
3) Gestalte daraufhin für jede der oben genannten Aktionen eine passende Methode
oder Funktion, in die du Befehle/Programmteile auslagerst.
Wenn sie ein vorhandenes Objekt verändert, ist eine Methode die richtige Wahl. In
allen anderen Fällen bietet es sich an, eine Funktion zu verwenden.
4) Das gesamte Sortiment soll in einer Liste abgespeichert werden. Diese enthält
Objekte vom Typ Auto. Es ist sinnvoll, wenn der Zugriff auf ein Objekt immer über die
Artikelnummer stattfindet. Dazu ist es wichtig, darauf zu achten, dass jede Nummer nur
ein einziges Mal vergeben wird.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du uns noch die email des Dozenten gibst, schicken wir das gleich an ihn & erklären die Lösung. Sollen ja volle Punkte werden!

Im Ernst: hier einfach seine Hausaufgaben reinzukippen, ist dreist. Wir helfen gerne bei Verständnisfragen oder zeigen Lösungswege auf. Die Arbeit musst du tun. Was also hast du schon probiert? Wo hapert es beim Verständnis?
Mahi
User
Beiträge: 3
Registriert: Donnerstag 17. September 2020, 08:08

"""
Programm für Gebrauchswagenhändler.
"""
# Auswahlmöglichkeiten für den Benutzern

auswahl = ["[1] Neuen Wagen hinzufügen","[2] Fahrzeug verkaufen","[3] Preis eines Fahrzeugs aendern","[4] Sortiment anzeigen","[5] Programm beenden"]

print(auswahl)
print('')

autos = [1001, "BMW", "M5", "Rot", 2019, 35000], [1002, "Audi", "A6", "Schwarz", 2018, 45000]

for i in range(100):
eingabe = int(input("Was möchten Sie gerne Ausfuehren:"))

if eingabe == 1:
print("Neuen Wagen hinzufügen")
print('')
autos.append(eingabe)

elif eingabe == 2:
print("Fahrzeug verkaufen")
break

elif eingabe == 3:
print("Preis eines Fahrzeugs aendern")
break

elif eingabe == 4:
print("Sortiment anzeigen")
break

elif eingabe == 5:
print("Programm Beendet")
break

else:
eingabe < 6
continue




class Auto():
def __init__(self, artnr, marke, modell, farbe, baujahr, preis):

self.__artnr = Artikelnummer
self.__marke = Marke
self.__modell = Modell
self.__farbe = Farbe
self.__baujahr = Baujahr
self.__preis = Preis
Mahi
User
Beiträge: 3
Registriert: Donnerstag 17. September 2020, 08:08

__deets__ hat geschrieben: Donnerstag 17. September 2020, 08:45 Wenn du uns noch die email des Dozenten gibst, schicken wir das gleich an ihn & erklären die Lösung. Sollen ja volle Punkte werden!

Im Ernst: hier einfach seine Hausaufgaben reinzukippen, ist dreist. Wir helfen gerne bei Verständnisfragen oder zeigen Lösungswege auf. Die Arbeit musst du tun. Was also hast du schon probiert? Wo hapert es beim Verständnis?
"""
Programm für Gebrauchswagenhändler.
"""
# Auswahlmöglichkeiten für den Benutzern

auswahl = ["[1] Neuen Wagen hinzufügen","[2] Fahrzeug verkaufen","[3] Preis eines Fahrzeugs aendern","[4] Sortiment anzeigen","[5] Programm beenden"]

print(auswahl)
print('')

autos = [1001, "BMW", "M5", "Rot", 2019, 35000], [1002, "Audi", "A6", "Schwarz", 2018, 45000]

for i in range(100):
eingabe = int(input("Was möchten Sie gerne Ausfuehren:"))

if eingabe == 1:
print("Neuen Wagen hinzufügen")
print('')
autos.append(eingabe)

elif eingabe == 2:
print("Fahrzeug verkaufen")
break

elif eingabe == 3:
print("Preis eines Fahrzeugs aendern")
break

elif eingabe == 4:
print("Sortiment anzeigen")
break

elif eingabe == 5:
print("Programm Beendet")
break

else:
eingabe < 6
continue




class Auto():
def __init__(self, artnr, marke, modell, farbe, baujahr, preis):

self.__artnr = Artikelnummer
self.__marke = Marke
self.__modell = Modell
self.__farbe = Farbe
self.__baujahr = Baujahr
self.__preis = Preis
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie im Aufgabentext schon steht, wäre der nächste Schritt die Methoden zu implementieren, also Preis ändern, ein Fahrzeug anzeigen.
Vergiss gleich wieder, dass man doppelte Unterstriche verwenden kann. Alle Deine Attribute sind öffentliche Attribute, also ohne Unterstrich. Nicht-öffentliche werden mit einem Unterstrich geschrieben, doppelte werden (fast) nie verwendet.
Groß-Klein-Schreibung ist wichtig, `Marke` ist etwas anderes als `marke`. Benutze keine Abkürzungen, und Abkürzungen werden auch nicht automagisch erzeugt, `Artikelnummer` ist etwas anderes als `artnr`, richtig wäre `artikelnummer`. Variablen werden komplett klein geschrieben.

Eine Endloschleife hört nicht nach 100 Durchgängen auf.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 2. Im else-Block macht das `eingabe < 6` keinen Sinn. Auch ein `continue` ist unsinnig. Eine Ausgabe wie "ungültige Eingabe" wäre besser.
Nach Aufgabenstellung soll man nach jeder Eingabe, außer "Beenden" weitermachen. Da sind also zu viele breaks.

Was steht in der Liste `autos`? Warum? Und was wird per append hinzugefügt? Warum?

PS an den Aufgabensteller: in Python wird nicht jede Klasse in ein eigenes Modul gepackt. Auch wenn ein Objekt nicht verändert wird, kann eine Methode sinnvoll sein, Beispiel wäre das Anzeigen eines einzelnen Autos. Wenn über eine eindeutige Artikelnummer auf Objekte zugegriffen werden soll, dann ist nicht eine Liste sondern ein Wörterbuch der passende Datentyp.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich habe das mal in, ääh, ”Python” umgesetzt. 😜

Code: Alles auswählen

#!/usr/bin/env python3
from tkinter import Tk

SCRIPT = r"""
proc input {prompt} {
    puts -nonewline $prompt
    flush stdout
    return [gets stdin]
}

oo::class create Car {
    variable ArticleNumber Brand Model Color YearBuilt Price
    
    constructor {articleNumber brand model color yearBuilt price} {
        set ArticleNumber $articleNumber
        set Brand $brand
        set Model $model
        set Color $color
        set YearBuilt $yearBuilt
        set Price $price
    }
    
    method articleNumber {} { return $ArticleNumber }
    
    method setPrice {value} { set Price $value }
    
    method toString {} {
        return "$ArticleNumber: ${YearBuilt}er $Brand $Model für $Price EUR"
    }
}

proc GetCarIndex {cars articleNumber} {
    for {set i 0} {$i < [llength $cars]} {incr i} {
        if {[[lindex $cars $i] articleNumber] == $articleNumber} {
            return $i
        }
    }
    return -1
}

proc SetArticleNumberAndIndex {articleNumber index cars prompt} {
    upvar $articleNumber ArticleNumber
    upvar $index Index
    set ArticleNumber [input $prompt]
    set Index [GetCarIndex $cars $ArticleNumber]
}

proc addNewCar {cars} {
    SetArticleNumberAndIndex articleNumber i $cars "Neue Artikelnummer: "
    if {$i == -1} {
        lappend cars [Car new $articleNumber \
                              [input "Marke: "] \
                              [input "Modell: "] \
                              [input "Farbe: "] \
                              [input "Baujahr: "] \
                              [input "Preis: "]]
    } else {
        puts "Artikelnummer $articleNumber existiert bereits!"
    }
    return $cars
}

proc sellCar {cars} {
    SetArticleNumberAndIndex articleNumber i $cars "Artikelnummer für Verkauf: "
    if {$i != -1} {
        [lindex $cars $i] destroy
        set cars [lreplace $cars $i $i]
    } else {
        puts "Artikelnummer $articleNumber existiert nicht!"
    }
    return $cars
}

proc changeCarPrice {cars} {
    SetArticleNumberAndIndex articleNumber i $cars "Artikelnummer für Preisänderung: "
    if {$i != -1} {
        set car [lindex $cars $i]
        puts [$car toString]
        $car setPrice [input "Neuer Preis: "]
    } else {
        puts "Artikelnummer $articleNumber existiert nicht!"
    }
    return $cars
}

proc showCars {cars} {
    foreach car $cars { puts [$car toString] }
    return $cars
}

proc breakLoop {cars} { return -code break }

proc main {} {
    set cars [list [Car new 1001 BMW M5 Rot 2019 35000] \
                   [Car new 1002 Audi A6 Schwarz 2018 45000]]
    set menu {
        { "Neues Fahrzeug in den Bestand aufnehmen." addNewCar }
        { "Fahrzeug verkaufen." sellCar }
        { "Preis ändern." changeCarPrice }
        { "Fahrzeuge anzeigen." showCars }
        { "Programm beenden" breakLoop }
    }
    while 1 {
        set i 1
        foreach entry $menu {
            puts "$i) [lindex $entry 0]"
            incr i
        }
        
        gets stdin choice
        if {
            [string is integer -strict $choice] \
            && $choice >= 1 \
            && $choice <= [llength $menu] \
        } {
            set action [lindex $menu [list [expr {$choice - 1}] 1]]
            set cars [$action $cars]
        } else {
            puts "Ungültige Eingabe $choice"
        }
        
        input "Eingabetaste um zum Hauptmenü zurück zu kehren.\n"
    }
}

main
"""

if __name__ == "__main__":
    Tk(useTk=False).tk.eval(SCRIPT)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Um mal etwas Übung zu bekommen, hier in Rust:

Code: Alles auswählen

use std::io;
use std::io::Write;

#[derive(Debug)]
struct Car {
    article_id: u32,
    brand: String,
    model: String,
    color: String,
    year_built: u32,
    price: f64,
}

impl std::fmt::Display for Car {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        writeln!(f, "Article ID: {}", self.article_id)?;
        writeln!(f, "Brand: {}", self.brand)?;
        writeln!(f, "Model: {}", self.model)?;
        writeln!(f, "Color: {}", self.color)?;
        writeln!(f, "Year Built: {}", self.year_built)?;
        writeln!(f, "Price: {}", self.price)
    }
}

#[derive(Debug)]
struct Inventory {
    cars: Vec<Car>,
    next_article_id: u32,
}

impl Inventory {
    fn new() -> Self {
        Inventory {
            cars: vec![],
            next_article_id: 0,
        }
    }

    fn generate_article_id(&mut self) -> u32 {
        let article_id = self.next_article_id;
        self.next_article_id += 1;
        article_id
    }

    fn add_car(
        &mut self,
        brand: String,
        model: String,
        color: String,
        year_built: u32,
        price: f64,
    ) {
        let article_id = self.generate_article_id();
        self.cars.push(Car {
            article_id,
            brand,
            model,
            color,
            year_built,
            price,
        })
    }

    fn get_car_mut(&mut self, article_id: u32) -> Option<&mut Car> {
        self.cars.iter_mut().find(|c| c.article_id == article_id)
    }

    fn remove_car(&mut self, article_id: u32) -> Option<Car> {
        self.cars
            .iter()
            .position(|car| car.article_id == article_id)
            .map(|position| self.cars.remove(position))
    }

    fn show(&self) {
        if self.cars.is_empty() {
            println!("Inventory is empty :(");
        } else {
            for car in &self.cars {
                println!("{}", car);
            }
        }
    }
}

#[derive(Debug)]
enum Action {
    AddCar {
        brand: String,
        model: String,
        color: String,
        year_built: u32,
        price: f64,
    },
    SellCar {
        article_id: u32,
    },
    ChangePrice {
        article_id: u32,
        price: f64,
    },
    ShowInventory,
    Exit,
}

fn read<T: std::str::FromStr>(prompt: &str) -> io::Result<T> {
    loop {
        print!("{}\n> ", prompt);
        io::stdout().flush()?;
        let mut line = String::new();
        io::stdin().read_line(&mut line)?;
        if let Ok(input) = line.trim_end().parse() {
            return Ok(input);
        }
        println!("Invalid input");
    }
}

fn read_year() -> io::Result<u32> {
    loop {
        let year = read("Year?")?;
        if year >= 1886 {
            return Ok(year);
        }
        println!("Invalid input");
    }
}

fn read_price() -> io::Result<f64> {
    loop {
        let price = read("Price?")?;
        if price >= 0.0 {
            return Ok(price);
        }
        println!("Invalid input");
    }
}

fn prompt() -> io::Result<Action> {
    loop {
        let input = read(
            "
[1]: Add Car
[2]: Sell Car
[3]: Change Price
[4]: Show Inventory
[5]: Exit",
        )?;
        match input {
            1 => {
                let brand = read("Brand?")?;
                let model = read("Model?")?;
                let color = read("Color?")?;
                let year_built = read_year()?;
                let price = read_price()?;
                return Ok(Action::AddCar {
                    brand,
                    model,
                    color,
                    year_built,
                    price,
                });
            }
            2 => {
                let article_id = read("Article ID?")?;
                return Ok(Action::SellCar { article_id });
            }
            3 => {
                let article_id = read("Article ID?")?;
                let price = read_price()?;
                return Ok(Action::ChangePrice { article_id, price });
            }
            4 => return Ok(Action::ShowInventory),
            5 => return Ok(Action::Exit),
            _ => println!("Invalid input"),
        }
    }
}

fn perform_action(inventory: &mut Inventory, action: Action) -> bool {
    match action {
        Action::AddCar {
            brand,
            model,
            color,
            year_built,
            price,
        } => inventory.add_car(brand, model, color, year_built, price),
        Action::SellCar { article_id } => {
            if inventory.remove_car(article_id).is_none() {
                println!("Article with id {} does not exist!", article_id);
            }
        }
        Action::ChangePrice { article_id, price } => {
            if let Some(mut car) = inventory.get_car_mut(article_id) {
                car.price = price;
            } else {
                println!("Article with id {} does not exist!", article_id);
            }
        }
        Action::ShowInventory => inventory.show(),
        Action::Exit => return true,
    }
    false
}

fn main() -> io::Result<()> {
    let mut inventory = Inventory::new();
    loop {
        let action = prompt()?;
        if perform_action(&mut inventory, action) {
            break;
        }
    }
    Ok(())
}
Kann man dann auch von Python aus mit PyO3 nutzen.
Tobbe94
User
Beiträge: 11
Registriert: Donnerstag 24. September 2020, 09:55

__deets__ hat geschrieben: Donnerstag 17. September 2020, 08:45 Wenn du uns noch die email des Dozenten gibst, schicken wir das gleich an ihn & erklären die Lösung. Sollen ja volle Punkte werden!

Im Ernst: hier einfach seine Hausaufgaben reinzukippen, ist dreist. Wir helfen gerne bei Verständnisfragen oder zeigen Lösungswege auf. Die Arbeit musst du tun. Was also hast du schon probiert? Wo hapert es beim Verständnis?
Das ist keine Hausaufgabe, sondern ein Übungsprogramm eines Online-Programmier-Kurses für Python-Beginner (das vermute ich zumindest, da ich akutell das gleiche Programm schreibe). Ich verstehe deinen Unmut, da es wohl für dich so aussieht, dass wieder ein weiterer Schüler kein Bock auf seine Hausaufgaben hat und an euch die Arbeit abwälzen will. Allerdings hat uns der Kursleiter dieses Forum empfohlen, falls fragen aufkommen und man nicht weiter weiß. Auch ich habe ein Paar fragen zu meinem Programm und würde dazu gerne Tipps und Tricks von erfahreneren Programmierern hören, weshalb ich ebenfalls einen Beitrag zu diesem Programm erstellen werde.
Wollte das nur loswerden, nicht dass du denkst ein weiterer will seine Hausaufgabe gelöst haben :D. Ich lerne Python freiweillig weil es interessant ist. Wenn euch diese Aufgabe zu trivial ist (was ich auch verstehen kann), dann müsst ihr das nicht beantworten. Tortzdem bedanke ich mich bei jedem, der mit weiterhelfen kann.
LG, Tobi
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tobbe94: Naja, ohne konkrete Frage kann man nicht helfen. Denn mit einer kompletten Musterlösung ist niemandem geholfen. Die Fragende scheint wohl kein wirkliches Interesse zu haben, denn sonst hätte es eine Reaktion auf meine konkreten Fragen gegeben.
Tobbe94
User
Beiträge: 11
Registriert: Donnerstag 24. September 2020, 09:55

Sirius3 hat geschrieben: Donnerstag 24. September 2020, 11:43 @Tobbe94: Naja, ohne konkrete Frage kann man nicht helfen. Denn mit einer kompletten Musterlösung ist niemandem geholfen. Die Fragende scheint wohl kein wirkliches Interesse zu haben, denn sonst hätte es eine Reaktion auf meine konkreten Fragen gegeben.
Ja, sieht jetzt tatsächlich gerade so aus...Aber trotzdem danke für deine Zeit. Da ich das gleiche Programm schreibe, kann ich wenigstens noch was draus lernen :D
Antworten