<p>在python3中,<code>input()</code>函数返回一个字符串(与python2不同),但是所有的<code>if training == ...</code>语句都将返回的值与整数进行比较,因此它们总是会失败。要解决此问题,请更改第一行,如下所示:</p>
<pre><code>#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))
</code></pre>
<p>产出:</p>
<pre class="lang-none prettyprint-override"><code>Small pulse: 80.0 Big pulse: 112.0
</code></pre>
<p><strong>更新</p>
<p>最好使用Python字典来实现这一点。这样做被称为“数据驱动”,也可以通过添加更多的训练类型和/或与每个类型关联更多的值,使调试和扩展更容易。我认为它还使代码更清晰,可读性更强</p>
<p>这说明了我的意思:</p>
<pre><code># 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))
</code></pre>