2012-07-16 81 views
3

我在为初学者编程类编写简单的Python程序时遇到了麻烦。如果有人可以看看我现在拥有的代码,并指引我朝着正确的方向发展,那将非常感谢!下面是代码:编写简单的Python程序

一个程序,有助于实现护士对病人人员需求

def main(): 
    print 'Welcome to the PACU nurse to patient program' 
    print 
    patients = inputPatients() 
    nurses = getNurses(patients) 
    nurseAssistants = getAssistants(nurses) 
    printInfo = (patients, nurses, nurseAssistants) 

    raw_input() 

def inputPatients(): 
    patients = input('Enter the number of patients for this shift (up to 40): ') 
    return patients 

def getNurses(patients): 
    nurses = (1.0/3.0) * patients 
    return nurses 

def getAssistants(nurses): 
    nurseAssistants = (1.0/2.0) * nurses 
    return nurseAssistants 

def printInfo(patients, nurses, nurseAssistants): 
    print 'The number of patients for this shift is:', patients 
    print 'The number of nurses needed is:', nurses 
    print 'The number of nurses Assistants is:', nurseAssistants 


main() 
+1

您有什么麻烦? – ardent 2012-07-16 23:50:44

+5

dedent(unindent)'main()' – inspectorG4dget 2012-07-16 23:53:14

+0

好吧,重组检查器G4dget是问题的核心。还要考虑一下这样一个事实,即对于护士和护士助理而言,你会得到分数。 – TimothyAWiseman 2012-07-16 23:57:45

回答

3

更改代码的最后段:

def printInfo(patients, nurses, nurseAssistants): 
    print 'The number of patients for this shift is:', patients 
    print 'The number of nurses needed is:', nurses 
    print 'The number of nurses Assistants is:', nurseAssistants 

main() 

由于基于Python的缩进执行。此外,从printInfo声明删除=,使之:

nurses = getNurses(patients) 
nurseAssistants = getAssistants(nurses) 
printInfo(patients, nurses, nurseAssistants) 
+0

是的,它运行。谢谢。现在如何弄清楚如何编程比率*刮头*。 – 2012-07-17 00:18:37

+0

@MichaelHanson取最接近的6的倍数吧?或将小数四舍五入到最接近的值。 – hjpotter92 2012-07-17 00:19:56

+0

如果你的问题只是“如何做比率”,最直接的答案是'fractions.Fraction(1,3)',但确实(1.0/3.0)工作正常。最终,无论您使用比率还是小数或浮点数或手动扩大整数(如Nerd-Herd所建议的),您仍然需要将代码添加到2.5助手到3的位置,例如,通过'nurseAssistants = math.ceil((1.0/2.0)*护士)'。 – abarnert 2012-07-17 00:36:36

0

我注意到两两件事:

首先,没有你的代码的缩进。这可能只是复制到本网站的后续效果,但请记住,在Python中,空格是非常重要的。特别是,代码块由缩进级别标识。因此,例如您的main()函数应该像这样:

def main(): 
    print 'Welcome to the PACU nurse to patient program' 
    print 
    patients = inputPatients() 
    nurses = getNurses(patients) 
    nurseAssistants = getAssistants(nurses) 
    printInfo (patients, nurses, nurseAssistants) 

    raw_input() 

有齿痕里面的功能应有尽有。根据您使用的IDE,您可能只需突出显示内容,然后按下Tab键。

接下来,也不太重要的一点是,您正在使用浮动来获取诸如托儿的数量。因为它很难有可能要提起这下一个整数护士的一小部分,使用类似小区()

+0

是的,它将代码粘贴到网站后的效果。 Python中的代码正确缩进。我可能会遇到问题,但第二个问题是您购买的,我的意思是计算比率,每3名患者就有1名护士,每2名护士就有1名护士助理。有关我如何输入比率的任何想法? – 2012-07-17 00:12:54

+0

有几个选项,其中之一是分数模块。 – TimothyAWiseman 2012-07-17 09:30:09

1

以前的答案已在主要问题暗示,但没有解释为什么你没有看到任何输出。

以下分配一个tuple包含用于患者,护士和到名为printInfo可变护士助理的3个值。

printInfo = (patients, nurses, nurseAssistants) 

它不产生任何输出,并没有调用函数printInfo()因为你可能期待。你真正需要的是做一个函数调用:

printInfo(patients, nurses, nurseAssistants) 
0

书呆子,追风和mhawke已经与printInfo与缩进解释的问题,但它听起来像你仍然是如何拿到3个nurseAssistants,而不是混淆2.5。例如,你说,“现在如何弄清楚如何编程比率。”

通过使用浮点数,可以运行问题,并非每个十进制浮点值都可以精确地表示为IEEE浮点值。并且可以通过“编程比率”来解决这个问题,例如通过使用fractions.Fraction(1, 2)而不是1.0/2.0,或者通过使用十进制浮点数,如decimal(1)/decimal(2)。但这不是你遇到的问题。

你遇到的问题是你想要四舍五入,而这不会自动发生。您必须明确地执行此操作,例如,致电math.ceil。有两个地方你可以做到,有不同的语义,所以你必须决定哪一个对你的问题有意义。

选项1是尽快围捕越好,就像这样:

def getNurses(patients): 
    nurses = math.ceil((1.0/3.0) * patients) 
    return nurses 

def getAssistants(nurses): 
    nurseAssistants = math.ceil((1.0/2.0) * nurses) 
    return nurseAssistants 

方案2是迟围捕越好,就像这样:

def printInfo(patients, nurses, nurseAssistants): 
    print 'The number of patients for this shift is:', math.ceil(patients) 
    print 'The number of nurses needed is:', math.ceil(nurses) 
    print 'The number of nurses Assistants is:', math.ceil(nurseAssistants) 

在你的情况,这些结果实际上会给出相同的答案(假设患者的数量总是一个整数,希望它是......),但希望你能看到这些在相似情况下可以给出不同的答案,所以你必须决定哪一个是正确。

同时,math.ceil(2.66666)将打印出'3.0',而您可能需要'3'。要做到这一点,只需将math.ceil(nurses)更改为int(math.ceil(nurses))等。