带有循环和决策树的小求解器程序,为什么不起作用?
Little solver program with loop and decision tree, why does not work?
如果您能帮我解决这段代码中的错误,我将不胜感激。
- while 循环不工作
- 当程序要求计算时它停止
总体思路是让这个小程序帮我计算,可能的话,加个可视化界面。
def cycle():
while True:
newcalc = input('Do you want to make a new calculation? \n \t (Y/N)')
if newcalc.lower() in ["no","n"]:
newcalc = "no"
break
if newcalc.lower() in ["yes","y"]:
newcalc = "yes"
else:
print('This is not the right answer')
def counting_M():
while True:
concersion_1 = input('Do you want to convert from M to uM? (Y/N)')
if concersion_1.lower() in ["y", "yes"]:
print('This is the result of the conversion {} uM', str(data/1000)).format(data)
mw = input('What is the Molecular Weight of your compound, please in g/M?')
print('Your coumpound weights ug/ml', str((data) / (mw / 1000))).format(data)
if mw in float:
print('The data you have entered is not numeric')
break
data = input('Please, provide the absolute amount of compound you have, without units \n \t')
units = input('Please, indicate the measure unit you have \n A)M, B)mM, C)uM '
'\n 1A)g/liter, 2A)mg/ml, 3A)ug/ml \n \t')
if units.lower() == "a" :
print('Ok so you have M')
counting_M()
cycle()
谢谢
你做错了几件事:
def cycle()
不 return newcalc
,渲染它的赋值
没用,因为它在函数之外的任何地方都不可见
cycle
。
- 您似乎分配了
data
两次,同时也
未从 string
转换为 float
,这会使您的 print
崩溃
命令,每当你 return 一个算术运算(即,
str((data) / (mw / 1000))
)。
- 行
if mw in float
没有
检查 mw
是否为 float
。使用 try/except
执行此操作
示例:
try:
float('0.001')
except ValueError: # occurs when the string cannot be converted to a valid float)
print('Not a valid float string!')
虽然我不清楚您究竟想要实现什么,但这段代码应该可以完成您在示例中尝试的所有事情。
def cycle():
choice = None
while not choice:
newcalc = input('Do you want to make a new calculation? \n \t (Y/N)')
if newcalc.lower() in ["no", "n"]:
choice = "no"
if newcalc.lower() in ["yes", "y"]:
choice = "yes"
else:
print('This is not the right answer')
continue
return choice
def counting_M(data):
while True:
concersion_1 = input('Do you want to convert from M to uM? (Y/N)')
if concersion_1.lower() in ["y", "yes"]:
print('This is the result of the conversion {} uM'.format(str(data/1000)))
else:
print('Not converting')
while True:
mw = input('What is the Molecular Weight of your compound, please in g/M?')
try:
mw = float(mw)
break
except ValueError:
print("Not a valid float!")
print('Your coumpound weights ug/ml', str((data) / (mw / 1000)))
if __name__ =='__main__':
while True:
data = input('Please, provide the absolute amount of compound you have, without units \n \t')
try:
data = float(data)
break
except ValueError:
print("Not a valid float value!")
counting_M(data)
choice = cycle()
print(choice)
如果您能帮我解决这段代码中的错误,我将不胜感激。
- while 循环不工作
- 当程序要求计算时它停止
总体思路是让这个小程序帮我计算,可能的话,加个可视化界面。
def cycle():
while True:
newcalc = input('Do you want to make a new calculation? \n \t (Y/N)')
if newcalc.lower() in ["no","n"]:
newcalc = "no"
break
if newcalc.lower() in ["yes","y"]:
newcalc = "yes"
else:
print('This is not the right answer')
def counting_M():
while True:
concersion_1 = input('Do you want to convert from M to uM? (Y/N)')
if concersion_1.lower() in ["y", "yes"]:
print('This is the result of the conversion {} uM', str(data/1000)).format(data)
mw = input('What is the Molecular Weight of your compound, please in g/M?')
print('Your coumpound weights ug/ml', str((data) / (mw / 1000))).format(data)
if mw in float:
print('The data you have entered is not numeric')
break
data = input('Please, provide the absolute amount of compound you have, without units \n \t')
units = input('Please, indicate the measure unit you have \n A)M, B)mM, C)uM '
'\n 1A)g/liter, 2A)mg/ml, 3A)ug/ml \n \t')
if units.lower() == "a" :
print('Ok so you have M')
counting_M()
cycle()
谢谢
你做错了几件事:
def cycle()
不 returnnewcalc
,渲染它的赋值 没用,因为它在函数之外的任何地方都不可见cycle
。- 您似乎分配了
data
两次,同时也 未从string
转换为float
,这会使您的print
崩溃 命令,每当你 return 一个算术运算(即,str((data) / (mw / 1000))
)。 - 行
if mw in float
没有 检查mw
是否为float
。使用try/except
执行此操作
示例:
try:
float('0.001')
except ValueError: # occurs when the string cannot be converted to a valid float)
print('Not a valid float string!')
虽然我不清楚您究竟想要实现什么,但这段代码应该可以完成您在示例中尝试的所有事情。
def cycle():
choice = None
while not choice:
newcalc = input('Do you want to make a new calculation? \n \t (Y/N)')
if newcalc.lower() in ["no", "n"]:
choice = "no"
if newcalc.lower() in ["yes", "y"]:
choice = "yes"
else:
print('This is not the right answer')
continue
return choice
def counting_M(data):
while True:
concersion_1 = input('Do you want to convert from M to uM? (Y/N)')
if concersion_1.lower() in ["y", "yes"]:
print('This is the result of the conversion {} uM'.format(str(data/1000)))
else:
print('Not converting')
while True:
mw = input('What is the Molecular Weight of your compound, please in g/M?')
try:
mw = float(mw)
break
except ValueError:
print("Not a valid float!")
print('Your coumpound weights ug/ml', str((data) / (mw / 1000)))
if __name__ =='__main__':
while True:
data = input('Please, provide the absolute amount of compound you have, without units \n \t')
try:
data = float(data)
break
except ValueError:
print("Not a valid float value!")
counting_M(data)
choice = cycle()
print(choice)