2017-09-16 3 views
2

これは答えられましたが、私はスーパーnoobです。私は男性/女性が文字列であることと関係していることを知っていますが、私はそれを定義したと思いましたか?計算をどのように機能させるには?ユーザー入力値の計算でのタイプエラー

num = int(input('Please enter number of standard drinks consumed:')) 
while num <= 0: 
    print ('Error: The number cannot be negative or zero.') 
    num = int(input('Please enter number of standard drinks consumed:')) 
weight = int(input('Please enter weight in pounds:')) 
while weight <= 0: 
    print ('Error: The weight cannot be negative or zero.') 
    weight = int(input('Please enter weight in pounds:')) 
time = int(input('Please enter number of hours since first drink:')) 
while time <= 0: 
    print ('Error: The time cannot be negative or zero.') 
    time = int(input('Please enter number of hours since first drink:')) 
gender = input('Please enter the sex male or female:') 
male = 0.68 
female = 0.55 


B = -0.015 * time(2.84 * num/weight * gender) 
print ('The BAC is', format(B, ',.2f')) 
+1

あなたは何も定義していません。つまり、 'gender'変数は他の変数の名前と同じ値を取ることができます。何も意味しません。' gender'、 'male'、' female'は全く異なる変数... – coder

+0

'gender'はテキスト入力をいくつか格納しています。そして、後でそのテキストに数値を掛けようとします。これは明らかに機能しません。 'gender'を数値にするには、コードスニペットでそれを行う例があります。 – hoefling

+0

ありがとうございました。私はそれがもっと明白であるはずだったように感じています。私は1ヶ月だけPythonで作業しましたが、まだ... –

答えて

0

Pythonインデントでは、コードブロックを定義するのに忘れてはいけません。インデントされていない場合、whileの行は1回だけ実行されます。次に、BACを計算する前に、gender変数を正しい数値に変換する必要があります(ユーザーの入力に応じて)。最後に、time変数を掛け合わせるように計算を変更したいと考えています。

ここでは、これらの問題を解決する方法を示す例を示します。このスクリプトは、ユーザーの入力のための、いくつかの異なるオプションを可能にし、genderをチェックする前に小文字にすべてを変換していることに注意してください:

gender = input('Please enter the sex male or female:').lower() 
while gender not in ['m', 'f', 'male', 'female']: 
    print ("Error: Gender must be male or female.") 
    gender = input('Please enter the sex male or female:').lower() 

if gender in ['male', 'm']: 
    gender = 0.68 
else: 
    gender = 0.55 

B = -0.015 * time * 2.84 * num/weight * gender 
print ('The BAC is {0:.6f}'.format(B)) 

私はまた、フォーマットされた出力を少し変更の自由を取りました。 Python 2.xではgenderの値を文字列として自動的に取得するには、inputraw_inputに置き換える必要があります。

+0

Python 3を使用しているのは問題ですか?終了したコードを実行すると、常に.55となります...男性を選択することはできません。 –

+0

@JonathanPerimanそれは問題ではありません。あなたは 'gender = 0.55'という行をインデントしていないと思う。インデントされていない場合、 'if-else'構造体に設定された' gender'は使用されません。ところで、私はあなたが正しい方程式を持っているのだろうか、または各性別に適切な値が設定されているのだろうか?この計算によって、BACは特定の時間/数/体重の男性の方が常に大きくなります。 –

+0

私に与えられた方程式と教師によって割り当てられた係数があります。たとえ彼らが間違っていても、彼の問題は笑われる。悪いことをすべてダブルチェックして、それが奇妙に思えたかと尋ねるかもしれません。私は私の110ポンドのgfと自分自身をチェックし、彼女は低くなっていた.... –

0

コードにいくつか間違いがあります。まず、適切なインデントを維持しようとします。たとえば、whileループは次のようになります。

weight = int(input('Please enter weight in pounds:')) 
while weight <= 0: 
    print ('Error: The weight cannot be negative or zero.') 
    weight = int(input('Please enter weight in pounds:')) 

time = int(input('Please enter number of hours since first drink:')) 
while time <= 0: 
    print ('Error: The time cannot be negative or zero.') 
    time = int(input('Please enter number of hours since first drink:')) 

男性または女性の係数です。あなたはそれらを定義していません。変数malefemaleを作成し、いくつかの値に設定するだけです。やりたいことである。そのような

gender = input('Please enter the sex male or female:') 
gender_coeficients = {male: 0.68, female: 0.55} 
B = -0.015 * time(2.84 * num/weight * gender_coeficients[gender]) 

あなたはそれぞれ1人の性別に対応する2つのキーで辞書を作成し、係数の値でそれらをペアリング。それらはdictionary[key]ステートメント(あなたの場合はgender_coeficients[gender])で使用できます。 ユーザーが実際に男性または女性を入力したかどうかを確認するには、if-elseステートメントを作成することも有益です。

次のような適切なPythonのコードになります、チェックどのように興味を持っている場合: https://www.python.org/dev/peps/pep-0008/ しかし、最も重要なのは、楽しいコーディングを持っています。

+0

ありがとうございました。 IveはPythonについてもっと学びました。 –

+0

また、私はコードが正しくインデントされたPythonを持っていますが、私は質問を投稿したときにそれを混乱させました。 –

+0

@JonathanPerimanああ、その場合は、それを指摘してごめんなさい:-) – BluePat

関連する問題