将“do while”循环从java重写为python [重复]
Posted
技术标签:
【中文标题】将“do while”循环从java重写为python [重复]【英文标题】:Rewriting "do while" loop from java to python [duplicate] 【发布时间】:2017-12-16 20:42:49 【问题描述】:我正在尝试将以下一段 java 代码重写为 python:
class pcp
public static void main(String[] args)
final int b = 13;
final int m = 1000;
int a0 = 1;
int mas[] = new int[10];
int a = a0, T = 0;
do
System.out.print(a + " ");
a = (b * a) % m;
T++;
mas[a * 10 / m]++;
while (a != a0);
System.out.print("\n" + T + "\n");
for (int i = 0; i < mas.length; i++)
System.out.print(mas[i] + " ");
这是一个简单的伪随机数生成器,输出如下:
1 13 169 197 561 293 809 517 721 373 849 37 481 253 289 757 841 933 129 677 801 413 369 797 361 693 9 117 521 773 49 637 281 653 489 357 641 333 329 277 601 813 569 397 161 93 209 717 321 173 249 237 81 53 689 957 441 733 529 877 401 213 769 997 961 493 409 317 121 573 449 837 881 453 889 557 241 133 729 477 201 613 969 597 761 893 609 917 921 973 649 437 681 853 89 157 41 533 929 77
100
11 9 11 9 11 9 11 9 11 9
这是我的 Python 代码:
b = 13
m = 1000
a0 = 1
mas = [0] * 10
a = a0
T = 0
while not (a != a0):
print(a)
a = (b * a) % m
T = T + 1
mas[int(a * 10 / m)] = mas[int(a * 10 / m)] + 1
print(T)
i = 0
while (i < len(mas)):
print(mas[i])
i = i + 1
它根本不会进入循环,我有点不知道如何以正确的方式为 python 重写它。
感谢您的阅读和帮助。
【问题讨论】:
我对python不太了解,但是while not (a != a0)
似乎和while (a != a0)
不一样。
此外:可怕的命名。可能还没有人告诉你,但是可读性是源代码的核心属性。单字符变量对此没有帮助。使用能够说明名称背后的内容的名称。你看,如果这个类被命名为 PseudoNumberGenerator 而不是 pcp ......你就不会觉得有必要告诉我们 pcp 在做什么。
您的代码确实进入了循环。它打印 1。
【参考方案1】:
你可能想尝试改变
while not (a != a0):
到
while (a != a0):
编辑:这不是好的代码。我不知道你为什么明确设置 'a' 等于 'a0' 但这意味着 while 循环的条件在它的编写方式上基本上是无用的。另外,您应该阅读命名约定。
【讨论】:
【参考方案2】:您应该将 while 更改为不仅仅是 while,两者都是相反的,使您的程序在该特定条件下根本不进入循环。
【讨论】:
以上是关于将“do while”循环从java重写为python [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java 循环结构 - for, while 及 do...while