0

我主要有 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)

任何帮助都会很棒。谢谢

4

4 回答 4

1

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

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

因此,要将您的代码转换为 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,但你必须先弄清楚你真正想写什么,然后别人才能写出来。

于 2013-09-14T01:38:07.787 回答
0

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       

您的代码(Collat​​z/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'
于 2013-09-14T01:38:22.647 回答
-1

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

number = 18
while number == 18:
    if number%2==0:
        number = number/2
    else:
        number = (number*3)+1 
print(number)
于 2013-09-14T01:38:21.007 回答
-2

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 是关于制表符分隔的。您无需指定循环的开始和结束,选项卡会为您执行此操作。此外,条件语句之后不是':'。

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

于 2013-09-14T01:37:40.977 回答