带有循环和决策树的小求解器程序,为什么不起作用?

Little solver program with loop and decision tree, why does not work?

如果您能帮我解决这段代码中的错误,我将不胜感激。

  1. while 循环不工作
  2. 当程序要求计算时它停止

总体思路是让这个小程序帮我计算,可能的话,加个可视化界面。

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)