【问题标题】:Python While Loop Not Returning Desired ValuePython While循环没有返回所需的值
【发布时间】:2018-08-10 01:34:55
【问题描述】:

最近刚开始学习python,遇到了一个奇怪的问题。我创建了这个函数来确保用户输入的数字大于零:

def numcheck(value,variable):

    while value <= 0:
        print('The' +str(variable) + 'must be greater than zero! ')
        value = float(input('Please enter a positive number for' +str(variable)+ \
                            'and press enter. '))
    return value

该函数在 main 函数中使用如下:

def main():
    length = float(input('What is the length of the block of cheese? '))
    numcheck(length,' length of the block ' )

我的问题是该函数成功识别非正值,但是当输入一个新值时,原始数字仍然传递给函数的其余部分。比如长度输入-10,会提示我输入另一个值。如果输入 15,while 循环将关闭,但 -10 仍会从函数传递,从而完全破坏后面的算术。我花了几个小时试图解决这个问题,但没有成功。我会很感激你们提供的任何建议。非常感谢!

【问题讨论】:

  • 您返回新值,但从不分配给旧变量。
  • 请确保while循环语句有正确的标识标签
  • 是的,这不是一个很好的问题。但是,问题否决者真的希望一个新手在 SO 中提出他的第一个问题以立即失去他的所有代表吗?也许我们应该在排除他之前给他一些时间来适应 SO?
  • 对于问题的质量,我深表歉意。我对此感到沮丧几个小时,只需要一些帮助。多亏了kriss,问题得到了解决,我应该删除线程吗?显然对 SO 很陌生

标签: python python-3.x while-loop return conditional


【解决方案1】:

Python 是按值传递的。这意味着传递给函数的变量的值将被复制。如果你修改了函数的参数变量,它不会在它之外被改变。

您只需在函数末尾返回新长度并调用如下:

length = numcheck(length,'块的长度')

这样,您会将结果存储在length 变量中。

在函数内部和外部进行输入也不是一个很好的做法。复制对输入的调用并不是真正的问题,但两个调用都应该在函数内部,目前的方式很丑陋。但这不是这里的问题。

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2012-10-26
    • 2015-02-24
    • 2016-07-12
    • 2012-04-26
    相关资源
    最近更新 更多