当我运行程序并输入值3,1,1时,将一个杯子转换成汤匙,它使用底部的TOtbsp函数。为了排除故障,我让它在最终结果之前打印出四个变量。这些变量都打印出正确的结果
def TOtbsp ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: tablespoons')
dictEnt = dCallOne['tbsp']
print (dCallOne['tbsp'])
print (dCallOne)
print (dictEnt)
print (convFactor)
calc = convFactor * dictEnt
print(calc)
^这是TOtbsp函数,结果是:
将杯子转换为:汤匙
16
{'tbsp': 16, 'tsp': 48, 'quart': 0.25, 'floz': 8.32674, 'pint':0.5,'gal':0.0625, 'ml': 236.588, 'liter': 0.236588}
16
1
1111111111111111
这些都是正确的,除了最后一个calc
。我尝试了几种不同的方法:
calc = convFactor * dictEnt
calc = (convFactor * dictEnt)
calc = (convFactor * dCallOne['tbsp'])
calc = (convFactor * (dCallOne['tbsp'])
(convFactor * dictEnt) = calc
(convFactor * (dCallOne['tbsp']) = calc
convFactor * dictEnt = calc
(convFactor * dCallOne['tbsp']) = calc
据我所知,所有这些,也许是最下面的四个,应该得到正确的答案,因为convFactor
,dictEnt
,和dCallOne
都得到整数。你知道吗
完整代码如下。你知道吗
import os
tbsp = {'tbsp' : 1 ,
'cup' : 0.0625 ,
'tsp' : 3 ,
'quart' : 0.015625 ,
'floz' : 0.5 ,
'pint' : 0.03125 ,
'gal' : 0.00390625 ,
'ml' : 14.7868 ,
'liter' : 0.0147868}
tsp = {'cup' : 0.0208333 , 'tbsp' : 0.333333 , 'quart' : 0.0052083333 , 'floz' : 0.1666666667 , 'pint' : 0.0104166667, 'gal' : 0.00130208323 , 'ml' : 4.92892 , 'liter' : 0.00492892}
dictcups = cups = {'tbsp' : 16 ,
'tsp' : 48 ,
'quart' : 0.25 ,
'floz' : 8.32674 ,
'pint' : 0.5 ,
'gal' : 0.0625 ,
'ml' : 236.588 ,
'liter' : 0.236588}
quart = {'cup' : 4 , 'tsp' : 192 , 'tbsp' : 64 , 'floz' : 32 , 'pint' : 2 , 'gal' : 0.25 , 'ml' : 946.353 , 'liter' : 0.946353}
floz = {'cup' : 0.125 , 'tsp' : 6 , 'quart' : 0.03125 , 'tbsp' : 2 , 'pint' : 0.0625 , 'gal' : 0.0078125 , 'ml' : 29.5735 , 'liter' : 0.0295735}
pint = {'cup' : 2 , 'tsp' : 96 , 'quart' : 0.5 , 'floz' : 16 , 'tbsp' : 32 , 'gal' : 0.125 , 'ml' : 473.176 , 'liter' : 0.473176}
gal = {'cup' : 16 , 'tsp' : 768 , 'quart' : 4 , 'floz' : 128 , 'pint' : 8 , 'tbsp' : 256 , 'ml' : 3785.41 , 'liter' : 3.78541}
ml = {'cup' : 0.0042267571 , 'tsp' : 0.202884 , 'quart' : 0.00105669 , 'floz' : 0.033814 , 'pint' : 0.00211338 , 'gal' : 0.000264172 , 'tbsp' : 0.067628 , 'liter' : 0.001}
liter = {'cup' : 4.226757063 , 'tsp' : 202.884 , 'quart' : 1.05669 , 'floz' : 33.814 , 'pint' : 2.11338 , 'gal' : 0.264172 , 'ml' : 1000 , 'tbsp' : 67.628}
acceptableInputs = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] #This is used to check if what the user entered is one of the eight acceptable units
def takeUnit1 (): #Figure out what unit the user wants to convert
global convFactor
print ('Unit Converter')
print ('')
print ('')
print ('Select the unit you want to convert FROM')
print ('')
print ('1 Tbsp - Tablespoon')
print ('2 Tsp - Teaspoon')
print ('3 C - Cups')
print ('4 qt. - Quart')
print ('5 fl. oz. - Fluid Ounce')
print ('6 gal. - Gallon')
print ('7 ml - Milliliter')
print ('8 L - Liter')
print ('9 P - Pints')
convFROM = input('Unit: ')
convFactor = input('How many?: ')
if convFROM in acceptableInputs: #Check if input is acceptable
global convFROMconv
global dCallOne
if convFROM == '1':
convFROMconv = 'Tablespoons'
dCallOne = tbsp
takeUnit2() # Run the function to figure out what unit to convert to
elif convFROM == '2':
convFROMconv = 'Teaspoons'
dCallOne = tsp
takeUnit2() # Run the function to figure out what unit to convert to
elif convFROM == '3':
convFROMconv = 'Cups'
dCallOne = dictcups
takeUnit2() # Run the function to figure out what unit to convert to
elif convFROM == '4':
convFROMconv = 'Quarts'
dCallOne = quart
takeUnit2() # Run the function to figure out what unit to convert to
elif convFROM == '5':
convFROMconv = 'Fluid Ounces'
dCallOne = floz
takeUnit2() # Run the function to figure out what unit to convert to
elif convFROM == '6':
convFROMconv = 'Gallons'
dCallOne = gal
takeUnit2() # Run the function to figure out what unit to convert to
elif convFROM == '7':
convFROMconv = 'Milliliters'
dCallOne = ml
takeUnit2() # Run the function to figure out what unit to convert to
elif convFROM == '8':
convFROMconv = 'Liters'
dCallOne = liter
takeUnit2() # Run the function to figure out what unit to convert to
elif convFROM == '9':
convFROMconv = 'Pints'
dCallOne = pint
takeUnit2() # Run the function to figure out what unit to convert to
else:
print ('')
else:
print('That is not an acceptable input, please try again')
def takeUnit2 (): #This function is to figure out what unit the user wants to convert TO
os.system('cls')
print ('Select the unit you want to convert TO')
print ('1 Tbsp - Tablespoon')
print ('2 Tsp - Teaspoon')
print ('3 C - Cups')
print ('4 qt. - Quart')
print ('5 fl. oz. - Fluid Ounce')
print ('6 gal. - Gallon')
print ('7 ml - Milliliter')
print ('8 L - Liter')
print ('9 P - Pints')
convTO = input('Unit: ')
if convTO in acceptableInputs: #Checking if it is one of the 8 accepted units
global convTOname #Making convTOconv global
global TOfunc1
if convTO == '1': #This whole statement converts the input number to its corresponding name
convTOname = 'tbsp'
TOfunc1 = 'TOtbsp'
TOtbsp()
elif convTO == '2':
convTOname = 'tsp'
TOfunc1 = 'TOtsp'
TOtsp()
elif convTO == '3':
convTOname = 'cup'
TOfunc1 = 'TOcups'
TOcup()
elif convTO == '4':
convTOname = 'quart'
TOfunc1 = 'TOquarts'
TOquart()
elif convTO == '5':
convTOname = 'floz'
TOfunc1 = 'TOfloz'
TOfloz()
elif convTO == '6':
convTOname = 'gal'
TOfunc1 = 'TOgal'
TOgal()
elif convTO == '7':
convTOname = 'ml'
TOfunc1 = 'TOml'
TOml()
elif convTO == '8':
convTOname = 'liter'
TOfunc1 = 'TOliters'
TOliter()
elif convTO == '9':
convTOname = 'pint'
TOfunc1 = 'TOpint'
TOpint()
else: #Statement requires an else, not intended to ever be used
print ('')
else:
print('That is not an acceptable input, please try again')
def TOtbsp ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: tablespoons')
dictEnt = dCallOne['tbsp']
print (dCallOne['tbsp'])
print (dCallOne)
print (dictEnt)
print (convFactor)
calc = convFactor * dictEnt
print(calc)
def TOtsp ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: teaspoons')
print (dCallOne)
calc = dCallOne['tsp']
print(calc)
def TOcup ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: cups')
print (dCallOne)
calc = dCallOne['cup']
print(calc)
def TOquart ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: quarts')
print (dCallOne)
calc = dCallOne['quart']
print(calc)
def TOfloz ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: fluid ounces')
print (dCallOne)
calc = dCallOne['floz']
print(calc)
def TOml ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: milliliters')
print (dCallOne)
calc = dCallOne['ml']
print(calc)
def TOgal ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: gallons')
print (dCallOne)
calc = dCallOne['gal']
print(calc)
def TOpint ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: pints')
print (dCallOne)
calc = dCallOne['pint']
print(calc)
def TOliter ():
os.system('cls')
print ('Convert ' + convFROMconv + ' to: liters')
print (dCallOne)
calc = dCallOne['liter']
print(calc)
takeUnit1()
在python3中,^{} 返回一个字符串(即使用户输入了一个数字),因此} 将
convFactor = input('How many?: ')
将convFactor
的值设置为一个字符串。将一个字符串乘以一个数字(就像在calc = convFactor * dictEnt
中发生的那样)只会重复多次该字符串,因此最终得到十六个1
。要解决这个问题,请使用^{convFactor
转换为一个数字,最好是在调用input()
之后:jwodder回答了您的问题:如果您想对输入字符串执行算术运算,则需要将它们转换为数字。您可以使用
int()
进行转换,但最好使用float()
:允许用户输入十进制数。你知道吗但是,您的程序有大量重复。这不是一个好的设计。它使程序比需要的时间长,并且使它更难阅读和维护。读者必须弄清楚哪些位应该是相同的,哪些位应该是不同的。当你想进行修改时,你必须将修改复制到多个地方,这既繁琐又容易出错。请看维基百科的文章Don't repeat yourself。你知道吗
这是一个更紧凑的程序版本。我所做的主要更改是将所有单独的转换比率字典放入一个字典字典字典中。我使用循环来显示单位菜单,而不是单独打印每个单位。我还使用循环来确保我们得到一个有效的FROM单位、一个有效的转换量和一个有效的to单位。你知道吗
此代码将在所有主要操作系统上运行。它是为Python3设计的,但是为python2修改它很容易。你知道吗
相关问题 更多 >
编程相关推荐