3

プログラミング初心者向けの簡単な 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()
4

4 に答える 4

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)
于 2012-07-16T23:56:06.270 に答える
1

以前の回答は主な問題を示唆していましたが、出力が表示されない理由は説明されていません。

次の例では、患者、看護師、看護助手の 3 つの値を含むタプルをという名前の変数に割り当てます。printInfo

printInfo = (patients, nurses, nurseAssistants)

printInfo()おそらく期待していたように、出力は生成されず、関数は呼び出されません。実際に必要なのは、関数呼び出しを行うことです。

printInfo(patients, nurses, nurseAssistants)
于 2012-07-17T00:19:38.783 に答える
0

私は2つのことに気づきます:

まず、コードはどれもインデントされていません。これは、このサイトへのコピー方法の後遺症である可能性がありますが、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によっては、コンテンツを強調表示してからタブボタンを押すだけでよい場合があります。

次の、それほど重要ではないことは、ナーサーの数などにフロートを使用していることです。看護師の端数を取得するのは難しいので、ceil()のようなものを使用して、これを次の整数に上げることができます。

于 2012-07-16T23:56:41.020 に答える
0

Nerd-Herd と mhawke は既に printInfo とインデントの問題を説明していますが、2.5 ではなく 3 つの NurseAssistants を取得する方法にまだ混乱しているようです。たとえば、「比率をプログラムする方法を理解する方法」と言います。

浮動小数点数を使用すると、すべての 10 進浮動小数点値が IEEE 浮動小数点値として正確に表現できるわけではないという問題が発生する可能性があります。そして、それは「比率のプログラミング」によって解決できfractions.Fraction(1, 2)ます。しかし、それは実際にあなたが抱えている問題ではありません。1.0 / 2.0decimal(1) / decimal(2)

あなたが抱えている問題は、切り上げたいということですが、それは自動的には起こりません。を呼び出すなどして、明示的に行う必要がありますmath.ceil。そして、セマンティクスが異なる2つの場所があるため、どちらが問題に適しているかを判断する必要があります。

オプション 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」が必要な場合は、「3.0」として出力されます。そのためには、 などに変更math.ceil(nurses)するだけです。int(math.ceil(nurses))

于 2012-07-17T00:50:36.963 に答える