【问题标题】:While loops inside an if-statement?if语句中的while循环?
【发布时间】:2019-01-08 20:05:09
【问题描述】:

这里是初级程序员:)) 我正在做一个学校项目,任务是在一个文件中找到五个函数的根。

在我的一个函数中有两个根,而我的代码只能找到一个。似乎第二个while循环被忽略了。我试图只将这段代码放在一个单独的文件中,并且它可以工作 - 但与其他文件一起它不会工作......

请问有没有什么奇怪的地方;)

def b(x: float):
    return -x**2+x+6

def bgraf():
    xlim(a1, b1)
    ylim(-15, 25)
    x = linspace(-5, 10, 1000)
    y = b(x)
    plot(x, y, 'r')
    return

funksjoner = [0, 1, 2, 3, 4]

while response not in funksjoner:
    i = int(input("choose a function from 0 to 4"))
    response = i
    if response in funksjoner:
        print("you chose function ", int(funksjoner[i]))

a1 = float(input())
b1 = float(input())
z = a1
y = b1
m = a1
n = b1
NP = True

if int(funksjoner[i]) == funksjoner[1]:
    while abs(y-z) > 1e-10:
        null1 = (z+y)/2
        if b(z)*b(null1)>0 and b(y)*b(null1)>0: 
            NP = False
            print('No roots in this interval')
            bgraf()
            break
        elif b(null1) == 0:
            break
        elif b(z)*b(null1)>0:
            z = null1
        else :
            y = null1
    while abs(n-m) > 1e-10:
        null1_2 = (m+n)/2
        if b(m)*b(null1_2)>0 and b(n)*b(null1_2)>0: 
            NP = False
            print('No roots in this interval')
            bgraf()
            break
        elif b(null1_2) == 0:
            break
        elif b(m)*b(null1_2)>0:
            m = null1_2
        else :
            n = null1_2
    if NP :
        print('we have a root when x =', round(((z+y)/2), 1))
        if null1 != null1_2:
            print('and when x =', round(((m+n)/2), 1))
        bgraf()
        scatter(null1, 0)
        if null1 != null1_2:
            scatter(null1_2, 0)

看起来 python 忽略了我放在 if 语句下的第二个 while 循环。有没有其他方法可以做到这一点?

感谢您的关注!

【问题讨论】:

  • 这太宽泛了。您需要缩小范围并提及您已经尝试过的调试。
  • 不确定,但可以尝试在各个部分打印语句,例如在 while 循环之前打印 abs(n-m)
  • 您还必须提供所有输入。我建议完全跳过 input() 并立即将变量设置为重新创建您想要演示的“错误”的任何内容。

标签: python python-3.x function if-statement while-loop


【解决方案1】:

需要考虑的几件事:

  1. 你想用下面这行代码实现什么: 如果 int(funksjoner[i]) == funksjoner[1] 你可以简单地检查 如果 i == 1

  2. 我看不出第一个和第二个 while 循环之间有任何区别。 z=m=a1 y=n=a2 那么这两者应该有什么区别呢?

  3. 一般而言,由于变量的命名,代码难以阅读,请尝试使用能够让您印象深刻的变量。

  4. 为了更好地了解代码中发生的情况,请使用调试,或者如果您不熟悉调试,请在代码中添加打印语句以更好地了解执行时变量中存储的内容.以及执行了哪些语句,跳过/未达到哪些语句

当您向我们提供有关您的代码的更详细信息时(例如,您可以添加 cmets 来解释您的代码),有更详细的问题,我们可以更好地为您提供支持

【讨论】:

  • 非常感谢 Tanja!您帮助我发现我放错了 m 和 n 变量,当我切换它们时,代码起作用了:)) 我检查 int(funksjoner[i]) == funksjoner[1] 的原因是因为数字 1 在列表用户可以选择。我还有四个功能,只需要包含他/她选择的功能。不过非常感谢!!
  • 我了解到您有想要在此 if 语句中检查的用户输入。尽管如此,以您的方式检查它是没有意义的。
  • 啊,我明白你的意思了。我现在试过了,它成功了,再次感谢!
  • 你可以检查例如if i==funktonjer[1] 但最后你所做的与检查 if i==1 完全相同,只是方式更复杂。如果我的回答帮助您解决了您的问题,请接受我的回答
猜你喜欢
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2014-01-21
  • 2015-11-08
  • 2016-01-12
  • 2013-11-01
  • 1970-01-01
相关资源
最近更新 更多