<p>jwodder回答了您的问题:如果您想对输入字符串执行算术运算,则需要将它们转换为数字。您可以使用<code>int()</code>进行转换,但最好使用<code>float()</code>:允许用户输入十进制数。你知道吗</p>
<p>但是,您的程序有大量重复。这不是一个好的设计。它使程序比需要的时间长,并且使它更难阅读和维护。读者必须弄清楚哪些位应该是相同的,哪些位应该是不同的。当你想进行修改时,你必须将修改复制到多个地方,这既繁琐又容易出错。请看维基百科的文章<a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="nofollow noreferrer">Don't repeat yourself</a>。你知道吗</p>
<p>这是一个更紧凑的程序版本。我所做的主要更改是将所有单独的转换比率字典放入一个字典字典字典中。我使用循环来显示单位菜单,而不是单独打印每个单位。我还使用循环来确保我们得到一个有效的FROM单位、一个有效的转换量和一个有效的to单位。你知道吗</p>
<p>此代码将在所有主要操作系统上运行。它是为Python3设计的,但是为python2修改它很容易。你知道吗</p>
<pre><code>#!/usr/bin/env python3
''' Volumes conversion calculator
See http://stackoverflow.com/q/42743397/4014959
Written by Ari Madian
Modified by PM 2Ring 2017.03.12
'''
import os
# Clear the terminal. Works on Windows, Mac, and Linux
def clear(clear_cmd='cls' if os.name == 'nt' else 'clear'):
os.system(clear_cmd)
# Various conversion ratios, in alphabetical order.
conversion_factors = {
'cup': {'cup': 1, 'floz': 8.32674, 'gal': 0.0625, 'liter': 0.236588,
'ml': 236.588, 'pint': 0.5, 'quart': 0.25, 'tbsp': 16, 'tsp': 48},
'floz': {'cup': 0.125, 'floz': 1, 'gal': 0.0078125, 'liter': 0.0295735,
'ml': 29.5735, 'pint': 0.0625, 'quart': 0.03125, 'tbsp': 2, 'tsp': 6},
'gal': {'cup': 16, 'floz': 128, 'gal': 1, 'liter': 3.78541,
'ml': 3785.41, 'pint': 8, 'quart': 4, 'tbsp': 256, 'tsp': 768},
'liter': {'cup': 4.226757063, 'floz': 33.814, 'gal': 0.264172, 'liter': 1,
'ml': 1000, 'pint': 2.11338, 'quart': 1.05669, 'tbsp': 67.628, 'tsp': 202.884},
'ml': {'cup': 0.0042267571, 'floz': 0.033814, 'gal': 0.000264172, 'liter': 0.001,
'ml': 1, 'pint': 0.00211338, 'quart': 0.00105669, 'tbsp': 0.067628, 'tsp': 0.202884},
'pint': {'cup': 2, 'floz': 16, 'gal': 0.125, 'liter': 0.473176,
'ml': 473.176, 'pint': 1, 'quart': 0.5, 'tbsp': 32, 'tsp': 96},
'quart': {'cup': 4, 'floz': 32, 'gal': 0.25, 'liter': 0.946353,
'ml': 946.353, 'pint': 2, 'quart': 1, 'tbsp': 64, 'tsp': 192},
'tbsp': {'cup': 0.0625, 'floz': 0.5, 'gal': 0.00390625, 'liter': 0.0147868,
'ml': 14.7868, 'pint': 0.03125, 'quart': 0.015625, 'tbsp': 1, 'tsp': 3},
'tsp': {'cup': 0.0208333, 'floz': 0.1666666667, 'gal': 0.00130208323, 'liter': 0.00492892,
'ml': 4.92892, 'pint': 0.0104166667, 'quart': 0.0052083333, 'tbsp': 0.333333, 'tsp': 1},
}
# Valid menu selections are single digits
menu_numbers = '123456789'
#This is used to check if what the user entered is one of the nine acceptable units
acceptable_inputs = set(menu_numbers)
# Convert menu number to conversion ratio key
units = {
'1': 'tbsp', '2': 'tsp', '3': 'cup', '4': 'quart', '5': 'floz',
'6': 'gal', '7': 'ml', '8': 'liter', '9': 'pint',
}
# Short & long unit names, in menu order
unit_names = {
'tbsp': ('Tbsp', 'Tablespoons'),
'tsp': ('Tsp', 'Teaspoons'),
'cup': ('C', 'Cups'),
'quart': ('qt.', 'Quarts'),
'floz': ('fl. oz.', 'Fluid Ounces'),
'gal': ('gal.', 'Gallons'),
'ml': ('ml', 'Milliliters'),
'liter': ('L', 'Liters'),
'pint': ('P', 'Pints'),
}
def get_unit():
# Display the units menu
for i in menu_numbers:
key = units[i]
short_name, long_name = unit_names[key]
print('{0} {1} - {2}'.format(i, short_name, long_name))
# Loop until we get an acceptable input
while True:
unit_num = input('Unit: ')
if unit_num in acceptable_inputs:
break
print('Please select a unit by its number')
return units[unit_num]
# Perform the conversion
def convert(from_key, amount, to_key):
clear()
from_name = unit_names[from_key][1]
to_name = unit_names[to_key][1]
print('Converting {0} to: {1}'.format(from_name, to_name))
conv_factor = conversion_factors[from_key][to_key]
calc = amount * conv_factor
print(calc)
def main():
print('Unit Converter\n\n')
print('Select the unit you want to convert FROM\n')
from_key = get_unit()
# Get number to convert. Loop until we get a valid number.
while True:
try:
amount = float(input('How many?: '))
break
except ValueError:
print('Bad number. Please try again.')
print('Select the unit you want to convert TO\n')
to_key = get_unit()
convert(from_key, amount, to_key)
if __name__ == '__main__':
main()
</code></pre>