2017-10-22 13 views
0

私は関連する値を持ついくつかの番号付きのトレーニングを持っています。トレーニングの種類に応じて値を計算するにはどうすればよいですか?

可能トレーニングの種類:

  1. 小さな:0.5大きな
    :0.7小さな

  2. :0.7
    大:0.8

  3. 等...

トレーニングタイプ番号1を選択した場合、計算に使用する関連値のペアをどのようにして決定できますか?トレーニングの種類が1である場合、例えば:

small = (220 - 60)*0.5 
big = (220 - 60)*0.7 

私は、その後の計算に使用される値は、選択されたトレーニングの種類に応じて変化するようにコードを記述する方法を知りたいです。

training = str(input("Choose training type (1, 2, 3): ")) 
s1 = 0.5 
s2 = 0.7 
s3 = 0.8 
b1 = 0.7 
b2 = 0.8 
b3 = 0.88 
spulse = "Small pulse: " 
bpulse = "Big pulse: " 
if training == 1: 
    small = (220 - 60) * s1 
    big = (220 - 60) * b1 
elif training == 2: 
    small = (220 - 60) * s2 
    big = (220 - 60) * b2 
elif training == 3: 
    small = (220 - 60) * s3 
    big = (220 - 60) * b3 

print(spulse + str(small) + bpulse + str(big)) 
+3

あなたがより手の込んだことができ、あなたが求めているものは非常に明確ではありませんか? – gommb

+0

編集済みの投稿と追加されたコード – Faceit

+0

あなたのコードには何が問題なのですか? – gommb

答えて

0

input()関数は、(Python 2とは異なり)文字列を返しますが、すべてのif training == ...文は返された値を整数と比較しているため、常に失敗します。下記に示すように、最初の行を変更する修正するには:

#training = str(input("Choose training type (1, 2, 3): ")) # NOT THIS. 
training = int(input("Choose training type (1, 2, 3): ")) # Convert to integer. 
s1 = 0.5 
s2 = 0.7 
s3 = 0.8 
b1 = 0.7 
b2 = 0.8 
b3 = 0.88 
spulse = "Small pulse: " 
bpulse = " Big pulse: " 
if training == 1: 
    small = (220 - 60) * s1 
    big = (220 - 60) * b1 
elif training == 2: 
    small = (220 - 60) * s2 
    big = (220 - 60) * b2 
elif training == 3: 
    small = (220 - 60) * s3 
    big = (220 - 60) * b3 

print(spulse + str(small) + bpulse + str(big)) 

出力が生成:

Small pulse: 80.0 Big pulse: 112.0 

更新

これを行うためにPythonの辞書を使用する方が良いでしょう。 「データ駆動型」として知られているこのようにすることで、より多くのトレーニングタイプを追加したり、各トレーニングタイプに関連する値を増やしたりすることで、デバッグと拡張が容易になります。私はそれがコードをはっきりと見やすくすると思う。

これは私が何を意味するかを示しています。

# Dictionary associating each training type to associated values. 
training_types = { 
    "1": {"s": 0.5, "b": 0.7}, 
    "2": {"s": 0.7, "b": 0.8}, 
    "3": {"s": 0.8, "b": 0.88} 
} 

choice = None 
while choice not in training_types: 
    choice = input("Choose training type (1, 2, or 3): ") 

training_type = training_types[choice] 
difference = 220 - 60 
small = difference * training_type["s"] 
big = difference * training_type["b"] 

print("Small pulse: {} Big pulse: {}".format(small, big)) 
0

あなたは内蔵の入力機能を使用する場合、次のようにあなたが行うことができます:

question=input('Choose type 1 or type 2: ') 
if question=='1': 
     small=(220-60)*0.5 
     big=(220-60)*0.7 
     type1_total=small+big 
print(type1_total) 

結果:

192.0 
+0

それは自動的にタイプ1の大小を訓練する必要があります。小さなパルス80と大きなパルス120のように... – Faceit

0

あなたのコードを、私がこれまで持って何

strではなくintとしてinputをキャストし、あなたはそうのような。判断文のsmallbig外を初期化します。

training = int(input("Choose training type (1, 2, 3): ")) 
s1 = 0.5 
s2 = 0.7 
s3 = 0.8 
b1 = 0.7 
b2 = 0.8 
b3 = 0.88 
spulse = "Small pulse: " 
bpulse = "Big pulse: " 
small = 0 
big = 0 
if training == 1: 
    small = (220 - 60) * s1 
    big = (220 -60) * b1 
elif training == 2: 
    small = (220 - 60) * s2 
    big = (220 -60) * b2 
elif training == 3: 
    small = (220 - 60) * s3 
    big = (220 -60) * b3 

しかし、一つの代替のアプローチは、次のことができます:

value = 220 - 60 
type_ = 0 
types = {1 : [0.5, 0.7], 
     2 : [0.7, 0.8], 
     3 : [0.8, 0.88]} 

while type_ not in types: 

    type_ = int(input("Pick a type: ")) 

    if type_ not in types: 

     print("Invalid type.") 

    else: 

     big = value * types[type_][0] 
     small = value * types[type_][1] 

print("Big = " + str(big)) 
print("Small = " + str(small)) 

このようなtype_の値として、もしユーザ入力1であることプロンプト、出力は:

Big = 80.0 
Small = 112.0 

ただし、ユーザがを入力した場合プロンプトtype_の値としては、出力される。

Big = 112.0 
Small = 128.0 

ユーザ入力プロンプトtype_の値として3場合、出力は次のとおり

Big = 128.0 
Small = 140.8 

そしてほかのために値を入力すると、出力はprint("Invalid type.")になります。

関連する問題