【问题标题】:Trying to fix a do while loop in python.试图修复 python 中的 do while 循环。
【发布时间】:2013-09-18 19:07:50
【问题描述】:

我主要有 Visual Basic 编程经验,并且正在尝试学习 Python。我正在尝试以 do until 循环的形式创建一个条件循环。我不知道如何在 python 中做到这一点,我可以使用一些帮助。我有一个 do until 循环,其中有一个 if 语句。这就是我所拥有的。

number = 18
do while number = 1
if number%2==0 then
number = number/2
else number = (number*3)+1
loop 
print(number)

任何帮助都会很棒。谢谢

【问题讨论】:

  • 这甚至不是有效的 Python。你真的应该通读某种教程。
  • 这甚至与 Python 代码相差无几。 Python 没有do whilethenloop。它需要在像ifelse 这样的块引入语句之后使用冒号。 number = 1 是一个赋值,而不是一个比较(它是一个语句,而不是一个表达式)。以此类推。
  • 我建议您查看基本的 Python 教程,因为您提供的代码甚至没有显示出基本的理解。
  • Python(如果写得好)看起来非常接近伪代码,这是真的。但这并不意味着解释器会理解你输入的任何内容。Python 有语法规则,就像任何其他语言一样。也许在 500 年后,我们将拥有一种没有语法规则的语言,一种仅仅“猜测”用户试图做什么并执行它的解释器。但这是 2013 年,请阅读一些文档 :)
  • @ShashankGupta:我们已经有了:Interlisp

标签: python loops while-loop conditional do-while


【解决方案1】:

Python 中没有 do … while 循环。我相信常见问题解答中的某处解释了原因以及如何解决它。

但这并不重要,因为您编写的不是do … while 循环,它只是一个普通的while 循环。 do … while 在每种语言中的全部意义在于您将测试条件放在循环体之后,而不是之前,这保证了循环将至少运行一次,并且允许您避免执行 pre-您必须在循环内复制的循环设置。

所以,要将您的代码翻译成 Python:

number = 18
while number == 1:
    if number%2==0:
        number = number/2
    else:
        number = (number*3)+1
print(number)

然而,值得注意的是,由于循环之前的number = 18,它永远不会是== 1,所以这只是跳过整个事情并打印出18

你可能想要while number != 1while number > 1,但你必须先弄清楚你真正想写什么,然后别人才能写出来。

【讨论】:

  • 谢谢,这很有帮助。这就是建议。
【解决方案2】:

Python 中没有“do/while”。最接近的是一个循环,它保证循环一次,然后在 1 次迭代后获得退出测试。

while True:                          # kinda like 'do'
   # do something at least once
   if fail_condition():              # here is your 'while' test
       break                         # end the loop if 'fail_condition' is True
                                     # loop again if 'fail_condition' is not True       

您的代码 (Collatz/Hailstone?) 大致如下所示:

number, i = 18, 0
while number>1:
    i+=1
    if number%2==0:     
        number = number/2
    else: 
        number = (number*3)+1

print 'Reached {} after {} loops'.format(number,i)
# prints 'Reached 1 after 20 loops'

【讨论】:

    【解决方案3】:

    上面的代码即使在python中也是如此吗?而不是做一会儿,让它只是一会儿。在if语句之后,没有then。快速重新格式化如下所示:

    number = 18
    while number == 18:
        if number%2==0:
            number = number/2
        else:
            number = (number*3)+1 
    print(number)
    

    【讨论】:

    • 这仍然不是有效的 Python; while number = 18: 会给你一个SyntaxError
    • 那些+=s 应该只是=s 并且print 函数应该缩进另一个级别。
    • ... 或者,如果您认为它们应该是 +=,那么您已经对 OP 的算法进行了重大更改,但没有解释,甚至没有提及您已经这样做了,这不太可能乐于助人。
    • @Blender:我认为print 不应该缩进。 OP 用他独特的语言将其放在他的 loop 语句之后,这可能映射到 Python 中的 while 块之外。另外,我很确定他只是想打印最后的数字,而不是一路上的所有步骤。
    • sorry我正在重写整个东西,原来数字是0,然后我回去了,忘记取出+=
    【解决方案4】:

    do while 不是 python 中常用的构造。只需使用while 循环即可。

    https://wiki.python.org/moin/WhileLoop

    例如,您的代码可以修改如下。

    number = 18
    while number == 1:
        if ( number % 2 ) == 0:
            number = number / 2
        else:
            number = ( number * 3 ) + 1
    print number
    

    这些语言之间最大的区别之一是 python 都是关于制表符分隔的。您无需指定循环的开始和结束,选项卡会为您执行此操作。此外,条件语句之后不是 ':'。

    然而,我会注意到上面的代码不会产生任何有效的答案。也许您的意思是让循环在 number 不等于 1 时运行?

    【讨论】:

    • 这不会编译。如果它编译它就永远不会进入循环。
    • Python 不是一种编译语言,所以这并不让我感到惊讶。另外,我很清楚它不会进入循环。我在回答中提到了这个事实。
    • 所以你的源代码永远不会编译成python字节码?甚至没有 JIT?
    • @DHandle:错误; Python一种编译语言。它编译为字节码(然后解释)而不是机器码,但 Java、C# 等也是如此。
    • 兄弟,仅仅因为它是一种解释性语言并不意味着它不能编译成它可以解释的更简洁的东西。解释语言!= 未编译。
    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2012-01-30
    • 2016-07-01
    相关资源
    最近更新 更多