python,while循环,函数在函数内部调用

2024-04-27 14:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程相当陌生,我正在使用cs50IDE编写一些代码来计算克拉数和重量。bring_up(_9ct, _14ct, _18ct, _22ct, target_per1000)函数似乎工作不正常。 当我运行以下代码并选择"yes"at "Would you like to bring the carats up to {target_ct}ct/{target_per1000}? "而不是打印最后的输出时,光标在控制台中保持活动状态,如果我退出程序,则会出现此消息:

`Traceback (most recent call last):
  File "carats.py", line 65, in <module>
    main()
  File "carats.py", line 29, in main
    to_add = bring_up(_9ct, _14ct, _18ct, _22ct, target_per1000)
  File "carats.py", line 61, in bring_up
    result = calc_ct(_9ct, _14ct, new_18ct, _22ct)
  File "carats.py", line 39, in calc_ct
    result = int((a+b+c+d)/tot_weight)
KeyboardInterrupt`

我试图在bring_up(_9ct, _14ct, _18ct, _22ct, target_per1000)函数的while循环中包含print(new_18ct)print(result),但它似乎卡在了循环中。 我尝试用if...else结构替换while循环,结果是它打印出主函数的最后一句话,如下所示:

 You need to add **None**gr of {target_ct}ct

我希望你能帮助我,谢谢你

`
    # work out resulting carat from mixed carats

    from cs50 import get_float, get_string



def main():
    # prompt user for weight of different carats:
    print("Insert weight in grams of customers gold in the following carats:")
    _9ct = get_float("9ct: ")
    _14ct = get_float("14ct: ")
    _18ct = get_float("18ct: ")
    _22ct = get_float("22ct: ")
    #calculate resulting carats and weight after loss in casting
    result = calc_ct(_9ct, _14ct, _18ct, _22ct)
    minusloss = format(((_9ct + _14ct + _18ct + _22ct) * 0.95), '.2f')

    print()
    print(f"Estimated resulting carats: {result}ct")
    print()

    # check if user wants to achieve specific carat weight
    target_ct, target_per1000 = target(result)
    check = get_string(f"Would you like to bring the carats up to {target_ct}ct/{target_per1000}? ")
    if check.lower() in ["n", "no"]:
        print(f"Remember to consider a 5% loss: total weight({(_9ct + _14ct + _18ct + _22ct)}gr) -5% = {minusloss}gr")
        print("See you next time!")
    elif check.lower() in ["y", "yes"]:
        # calculate how much metal of each carat they need to add to
        to_add = bring_up(_9ct, _14ct, _18ct, _22ct, target_per1000)
        print(f"You need to add {to_add}gr of {target_ct}ct")


def calc_ct(_9ct, _14ct, _18ct, _22ct):
    a = _9ct * 375
    b = _14ct * 585
    c = _18ct * 750
    d = _22ct * 916
    tot_weight = _9ct + _14ct + _18ct + _22ct
    result = int((a+b+c+d)/tot_weight)
    return result

def target(result):
    target_ct = 0
    target_per1000 = 0
    if result > 375 and result < 585:
        target_ct = 14
        target_per1000 = 585
    if result > 585 and result < 750:
        target_ct = 18
        target_per1000 = 750
    if result > 750 and result < 916:
        target_ct = 22
        target_per1000 = 916
    return target_ct, target_per1000

def bring_up(_9ct, _14ct, _18ct, _22ct, target_per1000):
    to_add = 0
    result = calc_ct(_9ct, _14ct, _18ct, _22ct)
    while result < target_per1000:
        new_18ct = _18ct + 0.5
        result = calc_ct(_9ct, _14ct, new_18ct, _22ct)
        to_add += 0.5
    return to_add

main()
```


----------

Tags: toinaddtargetgetifcalcresult
1条回答
网友
1楼 · 发布于 2024-04-27 14:31:51

看起来,在循环中,您每次都只是将一个新值赋给变量结果,而不是将其相加。 通过简单地将属性符号('=')更改为增量('+='),尝试将其添加到上一个值

def bring_up(_9ct, _14ct, _18ct, _22ct, target_per1000):
    to_add = 0
    result = calc_ct(_9ct, _14ct, _18ct, _22ct)
    while result < target_per1000:
        new_18ct = _18ct + 0.5
        result += calc_ct(_9ct, _14ct, new_18ct, _22ct)
        to_add += 0.5
    return to_add

欢迎收看节目:)

相关问题 更多 >