【问题标题】:Why does my Python script not work at all?为什么我的 Python 脚本根本不起作用?
【发布时间】:2017-05-30 12:58:09
【问题描述】:

我正在为一个名为“Project Euler”的东西编写这段代码,它基本上是一个在线数学/计算机科学的东西,可以找到它的链接here

所以无论如何,当我在 Python 3.5 中运行我的代码时,除了光标位闪烁之外,它不会在 shell 中执行任何操作。 这是有问题的代码:

`mylist=[]
a=1
b=2
c=a+b
def fib():
    a=1
    b=2
    c=a+b
    a=b
    b=c
    c=a+b
if a%2==0:
    mylist.append(a) and print(a)
elif b%2==0:
    mylist.append(b) and print(b)
elif c%2==0:
    mylist.append(c) and print(c)
else:
    print(end='')
while a and b and c<4000000:
    fib()
print(sum(mylist))'

我要回答的问题是

通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。

该代码旨在将最多 400 万个斐波那契数添加到列表中,然后打印它们的总和,这可以完美地回答问题,但它似乎不起作用。

【问题讨论】:

  • 它不输出任何东西,因为你告诉它这样做。您只调用函数fib()(可能)四百万次,而该函数除了设置一些未使用的变量之外什么都不做。
  • 顺便说一句:您似乎对 and 关键字有误解,它是一个逻辑连接,而不是“连接”命令。
  • 感谢@Monkey Supersonic 的帮助。然后缩进list.append 部分会更好吗?

标签: python-3.x loops fibonacci


【解决方案1】:

你在这里创建了一个无限循环:

while a and b and c < 4000000:

这转换为“while a 为真,b 为真,c 小于 4000000”,这将始终为True,因此您的 while 循环将永远不会终止。我所说的“真实”是指:bool(value) 是否返回True?如果是这样,那么value 是“真实的”。所以1'hello'[] 等是真实的,而0False[] 等不是(它们是“虚假的”)。我不会评论你的所有逻辑,因为你会从自己解决问题中受益更多。但是,这里有一些技巧可以帮助您摆脱困境:

  1. 如果您想检查 abc 是否全部小于 4000000,则可以这样做:

    while a < 4000000 and b < 4000000 and c < 4000000:
    

    或更简洁地说:

    while all(i < 4000000 for i in [a, b, c]):
    
  2. 1234563 .您对abc 进行的数学运算inside 你的fib() 函数只操作三个变量,分别称为abc,它们是本地的到那个功能;它不会更改该函数的abc outside 的值。

【讨论】:

  • 非常感谢@elethan,我一定会考虑到这两个!
猜你喜欢
  • 2016-11-03
  • 2011-02-26
  • 2012-10-07
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2013-04-29
相关资源
最近更新 更多