我想做的是自己写第一个程序。我不想要答案,只是一些指导它已经两天了,我没有取得任何实际进展。我是新手,所以对我很轻松。
每天都有四个同事拼车上班。随机选择驱动器以使驱动器工作,并随机选择驱动器到驱动器。每个司机都有一个引脚,每个人都有机会获得超速罚单。驾驶员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)
我遇到了几个问题。
让代码继续运行,直到每个人都有3张门票
有时会在1,2,3或4天后停止,我不明白为什么
提前感谢记住没有答案的线索和指导
答案 0 :(得分:0)
当您从列表中选择随机项目并将其与多个值进行比较时,您应该只进行一次随机选择。
if random.choice(drivers) == "Alan":
...
elif random.choice(drivers) == "Betty":
这会选择一个随机驱动程序并将其与“艾伦”进行比较。如果它是Alan,则if块正确运行。如果失败,它现在再次调用random.choice
函数,并选择一个新的随机驱动程序与“贝蒂”进行比较。但是,随机驱动程序可能是Alan(或任何人)。
你想要更像这样的东西:
driver = random.choice(drivers)
if driver == 'Alan':
...
elif driver == 'Betty':
...
其他一些快速的想法:
打印报表是调试程序的一种好方法 - 但是,使用尽可能多的打印垃圾邮件几乎是不可能的。在程序运行之前对其中的大部分内容进行评论 - 并添加print语句以向您显示不同时间的变量。
您有几个拼写错误,例如random.random
而不是random.random()
,以及您忘记更新计数器的功能。这主要是因为有这么多非常类似的功能。当你继续编写程序时,你将会想要学习如何制作一个单一功能,可以处理单次旅行的四个驱动程序中的任何一个。编程会更容易,并减少一些拼写错误。
答案 1 :(得分:0)
您的代码存在根本缺陷。在head_to_work
函数random.choice(drivers)
中,if
elif
条款中存在不可预测性。你应该像这样改进。
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
列表有助于找到无票据的驱动程序,这是else
函数中head_to_work
子句工作的基本条件。当所有驱动程序获得随机出票时。得到一个空列表。这将有效,直到所有司机都会被罚款。