【问题标题】:Little solver program with loop and decision tree, why does not work?带有循环和决策树的小求解程序,为什么不起作用?
【发布时间】:2017-05-09 01:10:35
【问题描述】:

如果您能帮助我解决此代码中的问题,我将不胜感激。

  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()   

谢谢

【问题讨论】:

  • 什么是units? mw_calc 是什么?请修正缩进。至少有两个地方是错误的。

标签: python-3.x loops decision-tree solver


【解决方案1】:

你做错了几件事:

  • def cycle() 不返回 newcalc,呈现其分配 没用,因为它在函数之外的任何地方都不可见 cycle。
  • 您似乎分配了两次data,同时 没有从string 转换为float,这会使您的print 崩溃 命令,只要您返回算术运算(即, 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)

【讨论】:

  • 这样做的目的是在我必须测试化合物时进行一些非常方便的计算。非常感谢。您的代码很清楚,我不熟悉 except 和 continue 。
猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 2011-10-16
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2020-04-04
  • 1970-01-01
相关资源
最近更新 更多