2017-07-15 104 views
-1

我有一個課程,這對我來說很讓人頭疼。 定義一個名爲汽車類具有以下屬性:在英里每小時獲取「名稱」未定義錯誤

總里程錶數

速度

驅動程序名稱

贊助

總里程錶英里,速度應該是初始化爲零。

創建一個包含隨機(或真實(指向外部網站的鏈接),鏈接到外部網站的20個獨特車輛列表的驅動程序和贊助商名稱。

你的主程序應該模擬比賽中車輛的進度。每個模擬分鐘,車輛挑選1和120之間的一個新的隨機速度,他們的里程錶英里都用這個公式計算每分鐘更新:

odometer_miles = odometer_miles +速度*時間 由於速度爲每小時英里,時間應也需要幾小時(1分鐘是1/60小時)。

我想也許我對使用def的理解是關閉的。正如標題所示,當我運行我的程序它說

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

任何建議或解釋爲什麼我得到這個錯誤?

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

'賽車()'只在'Car'類中定義的初始化,主要'()'方法裏面沒有 – frozen

+0

請發表你的錯誤,你的問題,並指出什麼行給出了錯誤 – DarkCygnus

+0

看來你誤解'全球'。它只是說你想要在全局範圍內修改這個名字的變量。它不創建全局變量。試着去實現它,而不用全局變量來解決這個問題以及出現的下一個「x」問題。 – MSeifert

回答

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() 

嗨,這裏有一些建議......

  1. 避免使用global關鍵字,而不是使用return聲明在你的代碼的頂部
  2. 進口模塊
  3. 創建完成單個任務的功能
  4. 將賽車手功能更改爲__init__名方法
  5. 司機不要在車內類,因爲它不針對任何車
+0

非常感謝!試圖避免全球化,但教練提供最少的幫助,這是我所能想到的。 –