2017-08-08 65 views
-4

我想要做的是我自己写我的第一个程序。我不想要答案,但只是一些指导已经两天了,我还没有取得任何实际进展。我是一个新手,所以对我很容易。代码不会产生错误,但运行,我知道它不正确

四名同事拼车上班每天。随机选择一个驱动程序让驱动器工作,然后随机选择驱动器回家。每个司机都有一只脚,并且每个人都有机会获得超速驾驶。驾驶员A每次开车时有10%的机会获得机票,驾驶员B有15%的机会,驾驶员C有20%的机会,驾驶员D有25%的机会。国家将立即撤销其第三张车票后的驾驶执照,一旦驾驶执照被吊销,司机将停止在拼车区驾驶。由于只有一个警察的拼车路线上,最大的一票将每早发和一个的最大每晚上

import random 

day_counter = 0 
alan_tickets = 0 
betty_tickets = 0 
charles_tickets = 0 
diana_tickets = 0 

drivers = ["Alan", "Betty", "Charles", "Diana"] 

#def head_to_work(): is the driver selection process when heading to work. 
def head_to_work(): 
    if random.choice(drivers) == "Alan": 
     print "Alan it's your turn." 
     global alan_tickets 
     if alan_tickets == 3: 
      print "i cant" 
      head_to_work() 
     else: 
      return alan_drives_tw() 
    elif random.choice(drivers) == "Betty": 
     print "Betty it's your turn." 
     global betty_tickets 
     if betty_tickets == 3: 
      print "nope" 
      head_to_work() 
     else: 
      return betty_drives_tw() 
    elif random.choice(drivers) == "Charles": 
     print "Charles it's your turn." 
     global charles_tickets 
     if charles_tickets == 3: 
      print "no way" 
      head_to_work() 
     else: 
      return charles_drives_tw() 
    elif random.choice(drivers) == "Diana": 
     print "Diana it's your turn." 
     global diana_tickets 
     if diana_tickets == 3: 
      print "sorry guys" 
      head_to_work() 
     else: 
      return diana_drives_tw() 
    else: 
     print "All drivers have their Licenses suspended." 
     print "Take the Bus." 

# driver alan is heading to work he has a 10% chance of getting a ticket 
def alan_drives_tw(): 
    global alan_tickets 
    print "Yo i'm driving" 
    print "..." 
    print "Now driving" 
    print "..." 
    print "your getting pulled over" 
    if random.random <= 0.10: 
     print "your getting a ticket" 
     alan_tickets += 1 
     print "i got a ticket, but we have arrived at work" 
     head_home() 
    else: 
     print "just a warning today" 
     print "we have arrived at work" 
     head_home() 

# driver betty is heading to work she has a 15% chance of getting a ticket 
def betty_drives_tw(): 
    global betty_tickets 
    print "Hi i'll drive" 
    print "..." 
    print "we outta here" 
    print "your getting pulled over" 
    if random.random() <= 0.15: 
     print "your getting a ticket" 
     betty_tickets += 1 
     print "i got a ticket but, made it to work" 
     head_home() 
    else: 
     print "just a warning today" 
     print "made it to work" 
     head_home() 

#driver charles is heading to work he has a 20% chance of getting a ticket 
def charles_drives_tw(): 
    global charles_tickets 
    print "I'll take the wheel" 
    print "..." 
    print "lets roll out" 
    print "your getting pulled over" 
    if random.random() <= 0.20: 
     print "your getting a ticket" 
     charles_tickets += 1 
     print "i got a ticket but, made it to work" 
     head_home() 
    else: 
     print "just a warning today" 
     print "made it to work" 
     head_home() 

#driver charles is heading to work she has a 25% chance of getting a ticket 
def diana_drives_tw(): 
    global diana_tickets 
    print "I got it today" 
    print "..." 
    print "whippin it" 
    print "your getting pulled over" 
    if random.random() <= 0.25: 
     print "its ticket time" 
     diana_tickets += 1 
     print "i got a ticket but, were here at work" 
    else: 
     print "just a warning today" 
     print "were here at work" 
     return head_home() 


#def head_home(): is the driver selection process when heading home 
def head_home(): 
    if random.choice(drivers) == "Alan": 
     print "Alan it's your turn" 
     global alan_tickets 
     if alan_tickets == 3: 
      print "i cant" 
      return head_home() 
     else: 
      return alan_drives_h() 
    elif random.choice(drivers) == "Betty": 
     print "Betty it's your turn" 
     global betty_tickets 
     if betty_tickets == 3: 
      print "nope" 
      return head_home() 
     else: 
      return betty_drives_h() 
    elif random.choice(drivers) == "Charles": 
     print "Charles it's your turn" 
     global charles_tickets 
     if charles_tickets == 3: 
      print "no way" 
      return head_home() 
     else: 
      return charles_drives_h() 
    elif random.choice(drivers) == "Diana": 
     print "Diana it's your turn" 
     global diana_tickets 
     if diana_tickets == 3: 
      print "sorry guys" 
      return head_home() 
     else: 
      return diana_drives_h() 
    else: 
     print "Drivers are not eligible to drive" 

# driver alan is heading to work he has a 10% chance of getting a ticket 
def alan_drives_h(): 
    global alan_tickets 
    global day_counter 
    print "Yo i'm driving" 
    print "..." 
    print "Now driving" 

    print "your getting pulled over" 
    if random.random <= 0.10: 
     print "your getting a ticket" 
     alan_tickets += 1 
    else: 
     print "just a warning today" 
     print "were home" 
     day_counter += 1 
     head_to_work() 

# driver betty is heading to work she has a 15% chance of getting a ticket 
def betty_drives_h(): 
    global betty_tickets 
    global day_counter 
    print "Hi i'll drive" 
    print "..." 
    print "we outta here" 
    print "your getting pulled over" 
    if random.random() <= 0.15: 
     print "your getting a ticket" 
     betty_tickets += 1 
    else: 
     print "just a warning today" 
     print "made it home" 
     day_counter += 1 
     head_to_work() 

# driver charles is heading to work he has a 20% chance of getting a ticket 
def charles_drives_h(): 
    global charles_tickets 
    global day_counter 
    print "I'll take the wheel" 
    print "..." 
    print "lets roll out" 
    print "your getting pulled over" 
    if random.random() <= 0.20: 
     print "your getting a ticket" 
     charles_tickets += 1 
    else: 
     print "just a warning today" 
     print "made it home guys" 
     day_counter += 1 
     head_to_work() 

# driver diana is heading to work she has a 25% chance of getting a ticket 
def diana_drives_h(): 
    global diana_tickets 
    global day_counter 
    print "I got it today" 
    print "..." 
    print "whippin it" 
    print "your getting pulled over" 
    if random.random() <= 0.25: 
     print "its ticket time" 
    else: 
     print "just a warning today" 
     print "were home everyone" 
     day_counter += 1 
     head_to_work() 

print head_to_work() 
print "Alan %d tikets." % (alan_tickets) 
print "Betty %d tickets." % (betty_tickets) 
print "Charles %d tickets." % (charles_tickets) 
print "Diana %d tickets." % (diana_tickets) 
print "%d days has passed." % (day_counter) 

有,我遇到了一些问题。

  1. 获得代码继续运行,直到每个人都有3票

  2. 有时停止后1,2,3,或4天最大,我不知道为什么

在此先感谢记住没有答案只是线索和指导

+2

对于每个驱动程序,您确实应该使用列表而不是单独的变量和函数,因此您没有太多重复的代码。 – Barmar

+0

这实际上是一个'班级司机'的好申请,你可以在这里获得一张车票的概率和驾驶员获得的车票数量。 – Barmar

+0

当你递归地调用'head_to_work()'时,你不会返回值,它应该是'return head_to_work()'。或者使用循环代替递归。 – Barmar

回答

0

当您从列表中选择一个随机项目,并将其与多个值进行比较时,应该只进行一次随机选择。

if random.choice(drivers) == "Alan": 
    ... 
elif random.choice(drivers) == "Betty": 

这将选择一个随机驱动程序并将其与'Alan'进行比较。如果它是Alan,则if块正确运行。如果失败,它现在再次调用random.choice函数,并选择一个新的随机驱动程序与“Betty”进行比较。但是,那个随机的司机可能是艾伦(或任何人)。

你想要更多的东西是这样的:

driver = random.choice(drivers) 
if driver == 'Alan': 
    ... 
elif driver == 'Betty': 
    ... 

其他一些最新的想法:

打印语句来调试程序的好办法 - 但是这与你有尽可能多的打印垃圾邮件几乎是不可能的。在程序起作用之前注释大部分内容 - 并添加打印语句以显示不同时间的变量。

您有几个拼写错误,例如random.random而不是random.random()以及您忘记更新计数器的功能。这主要是由于具有很多类似的功能。随着你继续编写程序,你将要学习如何创建一个单一功能来处理单次旅程中的四个驱动程序中的任何一个。编程会更容易,并减少一些拼写错误。

0

你的代码有一个基本缺陷。在您的head_to_work函数random.choice(drivers)存在于每个ifelif子句中,这是不可预测性的地方。你应该像这样改进。

drivers = ["Alan", "Betty", "Charles", "Diana"] 
available_drivers=drivers[:] 
def head_to_work(): 
    if available_drivers: 
     selected_driver=random.choice(available_drivers) 
    else: 
     selected_driver= None 
    if selected_driver == "Alan": 
     print "Alan it's your turn." 
     global alan_tickets 
     if alan_tickets == 3: 
      available_drivers.remove("Alan") 
      print "i cant" 
      head_to_work() 
     else: 
      return alan_drives_tw() 
    #Similiarly for the other three. 
    else: 
     print "All drivers have their Licenses suspended." 
     print "Take the Bus." 

我们在这里所做的是删除了不必要的随机选择。解决了不可预测性问题。同时维护一个avaliable_drivers列表有助于找到非票价驱动程序,这是head_to_work函数中的else子句必不可少的条件。因为当所有驱动程序获得票款时,random.choice将获得一个空列表。这将工作,直到所有的司机会得到票。

+0

当我这样做时,我得到一个索引超出范围错误。当所有驱动程序已从列表中删除时,我如何才能停止查找驱动程序? –

+0

@Louis_Louisius按照上述相应地更改它。 –

相关问题