代码不会产生错误但运行,我知道它不对

时间:2017-08-08 05:00:00

标签: python

我想做的是自己写第一个程序。我不想要答案,只是一些指导它已经两天了,我没有取得任何实际进展。我是新手,所以对我很轻松。

每天都有四个同事拼车上班。随机选择驱动器以使驱动器工作,并随机选择驱动器到驱动器。每个司机都有一个引脚,每个人都有机会获得超速罚单。驾驶员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天后停止,我不明白为什么

  3. 提前感谢记住没有答案的线索和指导

2 个答案:

答案 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子句工作的基本条件。当所有驱动程序获得随机出票时。得到一个空列表。这将有效,直到所有司机都会被罚款。