如何根据训练类型计算值?

2024-10-03 09:08:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几种编号的训练类型,它们都有相关的值

可能的培训类型:

  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))

Tags: 类型s3trainingb2b1smallb3pulse
3条回答

如果将input转换为int而不是str,并且在决策语句之外初始化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))

这样,如果用户在提示符处输入1作为type_的值,则输出为:

Big   = 80.0
Small = 112.0

但是,如果用户在提示符处输入2作为type_的值,则输出为:

Big   = 112.0
Small = 128.0

如果用户在提示符处输入3作为type_的值,则输出为:

Big   = 128.0
Small = 140.8

对于输入的任何其他值,输出为print("Invalid type.")

在python3中,input()函数返回一个字符串(与python2不同),但是所有的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))

如果使用内置输入功能,可以执行以下操作:

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

相关问题 更多 >