2017-07-15 2 views
-1

J'ai une tâche pour ma classe qui devient un casse-tête pour moi. Définir une classe appelée voiture avec les attributs suivants:Obtenir le nom "name" n'est pas défini erreur

total odomètre Miles

Vitesse en miles par heure

Nom du pilote

Sponsor

Les miles du compteur kilométrique total et la rapidité devrait être initialisé à zéro.

Créer une liste de 20 véhicules uniques avec aléatoire (ou réel (Liens vers un site externe.) Liens vers un site externe.) Noms de pilotes et de sponsors.

Votre programme principal devrait simuler la progression des véhicules en course. Chaque simulation minute, les véhicules choisissez une nouvelle vitesse aléatoire entre 1 et 120, et leurs miles kilométriques sont mis à jour chaque minute en utilisant cette équation:

odometer_miles = odometer_miles + vitesse * Temps Depuis la vitesse est en miles par heure, le temps devrait être en heures aussi (1 minute est 1/60e d'heure).

Je pense que peut-être ma compréhension de l'utilisation de def est désactivée. Comme le dit le titre quand je lance mon programme, il dit

Traceback (most recent call last): File "/Users/darrellanddawn/Documents/Nascar.py", line 63, in main()

File "/Users/darrellanddawn/Documents/Nascar.py", line 57, in main racers()

NameError: name 'racers' is not defined

Toutes les suggestions ou explications pour lesquelles je reçois cette erreur?

start = True 

#Car and drivers 

class Car: 
    def racers(): 
     global miles 
     miles = 0 
     speed = 0 
     drivers = {'00' : 'Van Hellsing', '01' : 'Vlad Dragul', '02' :'Lightening McSeen', 
'03' : 'Viktor Frankenstein', '04' : 'Richy Rich', '05' : 'Lynn Steely', 
'06' : 'Roscoe Bautista','07' : 'Matt Pilling', '08' :'Fredric Montrose', 
'09' : 'Ward Clutts', '10' :'Miles Bruck', '11': 'Darrin Isakson', '12' :'Chauncey Speno', 
'13' : 'Billie Coghill', '14' : 'Donn Lusher', '15' : 'Vaughn Naugle', '16' :'Patrick Climer', 
'17' : 'Jerome Harring', '18' : 'Carlo Bohanon', '19' : 'Brian Coggins'} 
    sponsers = {'00' : 'Pepesi', '01' : 'Coke', '02' : 'Pensoil', 
'03' : 'Wal-Mart', '04' : 'Exxon', '05' : 'Shell', 
'06' : 'Food Lion','07' : 'McDonalds', '08' :'Ubisoft', 
'09' : 'Taco Bell', '10' :'Good Year', '11': 'Apple', '12' :'Microsoft', 
'13' : 'Lowes', '14' : 'Home Depot', '15' : 'Save-A-Lot', '16' :'Sprint', 
'17' : 'Verison', '18' : 'Virgin Mobile', '19' : 'Huggies'} 

def race(): 
    import random 
    global speed 
    winner = False 
    time = 0 

    while not winner: 
     speed = random.randint(1,120) 
     time = + 1 
     miles = miles + (speed/60) * time 

def win(driver, sponser): 
    if miles == 500: 
     winner = True 

     while winner: 
      print('The winner is: ', drivers, sponsers) 


def stop(): 
    print('Thank you for watching the UAT 500!') 
    import sys 
    sys.exit(0) 

def main(): 
    Car 
    racers() 
    race() 
    win() 
    stop() 

while start: 
    main() 
+0

'coureurs()' est définie que dans la classe 'Car', pas dans la méthode' main() ' – frozen

+0

S'il vous plaît poster l'erreur que vous obtenez votre question et indiquer quelle ligne donne l'erreur – DarkCygnus

+0

Il semble que vous comprenez 'global'. Il dit simplement que vous voulez modifier la variable avec ce nom dans la portée globale. Il ne crée pas de variable globale. Essayez de l'implémenter sans globals qui devraient résoudre ce problème et les prochains "x" problèmes qui se posent. – MSeifert

Répondre

1
class Car(): 

    #initializes properties of the car 
    def __init__(self,driver_name,sponsor,car_name): 
     self.miles = 0 # self refers to car instance 
     self.speed = 0 
     self.driver_name = driver_name 
     self.sponsor = sponsor 
     self.car_name = car_name 

    # changes the cars speed to a new speed 
    def update_speed(self, new_speed): 
     self.speed = new_speed 

    #calculates the total distance traveled 
    def distance_traveled(self, elapsed_time): 
     self.miles += self.speed * elapsed_time 


def race(car1,car2,distance): 

    elapsed_time = 0.0 
    _time = 0.01 
    won = False 

    while not won: 

     #updates speed of the car to a random int between 100 and 150 
     car1.update_speed(random.randint(100,150)) 
     #print("{} speed: {}".format(car1.car_name,car1.speed)) 
     #updates the distance traveled with increments of _time 
     car1.distance_traveled(_time) 
     #print("{} miles: {}".format(car1.car_name,car1.miles)) 

     car2.update_speed(random.randint(100,150)) 
     # print("{} speed: {}".format(car2.car_name,car2.speed)) 
     car2.distance_traveled(_time) 
     # print("{} miles: {}".format(car2.car_name,car2.miles)) 

     if car2.miles >= distance: 
      print("{} is the winner!!".format(car2.driver_name)) 
      won = True 

     if car1.miles >= distance: 
      print("{} is the winner!!".format(car1.driver_name)) 
      won = True 

     elapsed_time += _time 
     #print("elapsed time: {}".format(elapsed_time)) 

def main(): 
    #instantiates two car objects 
    car1 = Car("Van Hellsing","Pepsi","car1") 
    car2 = Car("Vlad Dragul","Coke","car2") 

    # races the two cars 
    race(car1,car2,10) 

if __name__ == "__main__": 
    main() 

salut, voici quelques suggestions ...

  1. évitez d'utiliser le mot-clé global utilisez plutôt la déclaration return
  2. modules d'importation en haut de votre code
  3. créer fonctions qui accomplissent une seule tâche
  4. changer la fonction des racers au __init__ méthode
  5. pilotes
  6. ne soient pas initialisés dans la classe de voiture, car il est pas spécifique à une voiture
+0

Merci beaucoup! Essayait d'éviter global mais instructeur donne une aide minimale et c'était tout ce que je pouvais penser à faire. –