<p>由于您希望使用不受支持的字符串进行除法(正如回溯告诉您的那样),因此引发了错误。你知道吗</p>
<p>所以要考虑的是:</p>
<pre><code>portioncost = (costofkeg/(kegsize/(portionsize*0.568)))
</code></pre>
<p>如果你看一下变量的定义,你会发现第一个不是数字的变量(一个<code>int</code>或一个<code>float</code>)是<code>costofkeg</code>。你知道吗</p>
<p>因此,您应该将用户的输入转换为合适的数据类型。因为这是一个很明显的价格,所以我建议使用<code>float</code>。所以改变吧</p>
<pre><code>costofkeg = input('Please enter cost of keg. GBP: ')
</code></pre>
<p>变成这样</p>
<pre><code>costofkeg = float(input('Please enter cost of keg. GBP: '))
</code></pre>
<p>此外,您应该考虑在转换数据类型时捕获错误。那么,如果用户输入一个文本字符串作为价格,而您将其传递给<code>float()</code>,会发生什么呢?为了考虑到这一点,我建议使用<a href="https://docs.python.org/3.5/tutorial/errors.html#handling-exceptions" rel="nofollow">^{<cd6>}</a>块来处理错误。如果对每个输入使用多个函数来整理代码,那么在将输入转换为所需数据类型时发生错误时,可以从这些函数本身调用这些函数。你知道吗</p>
<p>这看起来像这样(只是一个使用您已有代码的简短示例片段):</p>
<pre><code>def ask_int(string):
try:
val = int(input(string))
except ValueError as e:
print('Invalid format. Your input was not an integer.')
ask_int(string)
else:
return val
def ask_float(string):
try:
val = float(input(string))
except ValueError as e:
print('Invalid format. Your input was not a float')
ask_int(string)
else:
return val
kegsize = ask_int('Please enter keg size. Litres: ')
costofkeg = ask_float('Please enter cost of keg. GBP: ')
abv = ask_float('Please enter Alcohol by Volume. %: ')
gp = ask_int('Please enter Gross Profit Percentage. %: ')
</code></pre>
<p><code>portionsize</code>的输入可能成为另一个问题。将其作为一个函数编写可能如下所示:</p>
<pre><code>def ask_portionsize(string):
val = ask_float(string)
if val not in [1/3 , 1/2 , 2/3 , 1]:
print('Thank you, find your inputs below\n')
else:
try:
val = float(val)
except ValueError as e:
ask_portionsize()
else:
return val
portionsize = ask_portionsize('Please choose Portion Size: ')
</code></pre>