-1

请记住,我对 python 编码仍然很陌生,因为我才刚刚进入我的 python 编码课程的第 5 章。牢记这一点,我正在尝试使用“while 循环”创建一个总和计算器以继续,直到用户输入负数而不是正数。

如果我对问题的描述不完全清楚,我将在此处发布确切的作业问题:

第 5 章,第 200 页,#8 数字之和

编写一个带有 while 循环的程序,要求用户输入一系列正数。用户应该输入一个负数来表示系列的结束。输入所有正数后,程序应显示它们的总和。

现在对于我到目前为止编写的代码:

def main():
    number = float(input('Please enter in a positive number: '))
    while number > 0:
        positiveNumber()
    while number < 0:
        calculateTotal()
        printTotal()

def positiveNumber():
    number = float(input('If you are finished please enter a negative number.' + \ 'Otherwise, enter another positive number: '))
    while number > 0:
        positiveNumber()
    while number < 0:
        calculateTotal()
        printTotal()

def calculateTotal():
    total = 0 + number

def printTotal():
    print('The sum of your numbers is: ', total)

main()
  • 在第 11 行,我有一个“+ \”符号,因为我想在那里输入一个空格,以便让文本看起来更清晰,但这似乎不起作用。

如果这个问题看起来“nooby”,我深表歉意,但我需要帮助制作一个更清洁/工作的总和计算器。如果有人可以查看此代码并希望能帮助我改进它,我将不胜感激。谢谢!

最终编辑:

谢谢大家提供的信息丰富的答案!我学到了很多东西(对于“新手”=])。我在计算器上使用了 Talon876 的答案。再次感谢大家!

4

5 回答 5

3

如果要将单个字符串打印在多行上,\n请在字符串中输入 a。例如,

print "This is on the first line\nThis is on the second line"

会输出

This is on the first line
This is on the second line

看起来您正在将 while 循环与递归混合(从自身内部调用方法)。我建议使用单个 while 循环和输入变量来检查中断条件(输入 < 0)

它看起来像这样:

sum = 0
number = float(input('Please enter in a positive number: '))
while number > 0:
    sum = sum + number
    number = float(input('If you are finished please enter a negative number.' + \ 'Otherwise, enter another positive number: ')) #fix this line using the information from the first part of the answer

这将循环直到用户输入负数或 0。如果您想接受 0 作为正数,请将 while 条件更改为number > -1

于 2012-07-16T18:18:42.063 回答
1

如果不明确将其声明为全局变量,则无法更新 python 函数中的全局变量。观察:

a = 1
def foo():
    a = a + 6  #creates a new variable (a) that is confined to the "foo" namespace.
           #Note that it still uses a from the global namespace on the Right hand side
           #This is because python looks for a in the "foo" namespace first.  When
           #it isn't found there, it looks in the global namespace.  However, python
           #WON'T ASSIGN to something in the global namespace without being told 
           #to explicitly
    print (a)

foo() # 7
print (a)  # 1

def foo():
    global a #Tell python that it is OK to assign to variable "a" in the global namespace.
    a = a + 6
    print (a)

foo()   # 7
print (a) # 7

然而,这种强大的力量伴随着巨大的责任。许多人会告诉你永远不要使用全局变量。在很多方面,它们是正确的,因为使用全局变量可以完成的任何事情都可以使用其他方法更干净地完成。我写这篇文章的希望不是说服您使用全局变量,而是帮助您理解代码中的错误之一。

您可能想要尝试的一件事是让您的函数接受输入数字作为参数以及到目前为止的总数,然后return是新的总数。

祝你好运!

于 2012-07-16T18:35:19.557 回答
0

问题是 1.您没有将函数中使用的变量声明为全局变量,请注意对它们所做的更改

2.如果您通过递归调用函数来实现它,则不需要while循环!您需要检查条件,如“if&else”这里是while循环问题的简单实现:

def main():
total=0
number = float(input('Please enter in a positive number: '))
while(number>0):
    total=total+number
    number = float(input('Please enter in a positive number to continue or a negative no. to stop: '))
print('The sum of your numbers is: %d'% total)
main()
于 2012-07-16T18:42:20.880 回答
0

我想你正在寻找这样的东西?但我不知道您需要使用什么样式约束。

number = float(input('Please enter in a positive number: '))
to_sum = []
while number > 0:
    to_sum.append(number)
    number = float(input('If you are finished please enter a negative number.\n' +
                         'Otherwise, enter another positive number: '))
print('The sume of your numbers is: ', sum(to_sum))

请注意,由于您尝试拆分为多行的语句已经在 () 的内部,因此您不需要 . 你可以打破界限。

作业要求你使用这么多疯狂的功能吗?另外,您使用的是哪个版本的 Python?

于 2012-07-16T18:42:50.400 回答
0

您需要学习的一件事是如何将程序分解为函数。有些问题最好由单个代码块来处理,而不是被拆分,我认为这就是其中之一。

您需要计算一个总和。您可以使用单个变量来处理它,当用户输入它们时,您可以向其中添加更多数字。你的代码应该围绕这个变量来设计。如果您尝试将代码拆分为函数,则要么需要使用全局变量(不推荐!),要么需要在函数之间传递变量,或者您可以将变量放入对象中然后 make这些函数是对象上的“方法”函数。但最简单的方法是编写一些使用该变量的代码,并使所有这些代码成为单个代码块(一个函数,甚至只是 Python 程序中的代码)。

这是一个解决方案:

sum = 0.0  # initial value; we will add values to this
print('Welcome to this program')
while True:
    s = input('User: enter data value or a negative number to stop')
    x = float(s)
    if x < 0:
        break
    sum += x  # add this value to update the sum
print('Here is your sum: {}'.format(sum))

所以,这就是上面代码的优点。所有需要使用变量sum的地方都靠得很近,我们可以看到它们。我们不需要声明sumglobal,因为我们没有多个函数试图全部使用它。

看看那段代码,问问自己:如果我们把它分成多个函数,会更简单或更干净吗?如果没有,那就不要这样做。

这里唯一棘手的是我们使用while True:了循环。这是因为我们想做一些事情(获取输入),然后根据结果,决定是跳出循环还是继续,最后根据决定做其他事情(更新总和)。

可以重写它以使用“标志”变量,并进行循环while flag:,但我认为它不干净:

sum = 0.0  # initial value; we will add values to this
print('Welcome to this program')
continue_loop = True
while continue_loop:
    s = input('User: enter data value or a negative number to stop')
    x = float(s)
    if x < 0:
        continue_loop = False
    else:
        sum += x  # add this value to update the sum
print('Here is your sum: {}'.format(sum))

你认为有continue_loopflag 变量更清楚吗?有些教科书说你应该这样写代码,因为他们认为break在中间退出循环是一种罪过;他们认为循环应该只从通常的位置退出(对于while循环来说,它是顶部)。

如果你真的想使用函数怎么办?好吧,你可以,但你仍然不应该使用全局变量。实际上,如果您正在编写“函数式”解决方案,则根本不需要sum变量!

这是一个功能解决方案。

def ask_and_sum():
    s = input('Hey dude enter a value or a negative to stop')
    x = float(s)
    if x < 0:
        return 0
    else:
        return x + ask_and_sum()

print('Welcome to this program')
print('Your sum is: {}'.format(ask_and_sum()))

这不是显式循环,而是使用“尾递归”,其中函数以对自身的另一个调用结束。在这种情况下,我个人更喜欢显式循环。你怎么看?

PS这个问题很简单,如果不给你完整的答案就很难讨论它。我为此道歉。但即使你只是复制代码,请看它,思考它,并确保你理解它。

于 2012-07-16T19:38:38.697 回答