【问题标题】:Program that reads 2 positive integer and print the first multiples of it only using "while"读取 2 个正整数并仅使用“while”打印它的第一个倍数的程序
【发布时间】:2019-08-07 21:16:00
【问题描述】:

我正在尝试编写一个读取 2 个正整数(m 和 n)的程序,然后仅使用 while 循环打印 m 的前 n 个正整数。

这是原来的问题

用 Python 3.x 语言编写一个程序,读取两个正整数 m 和 n,并打印前 n 个正整数 m的倍数。

代码的输出应该是这样的:

Type a positive integer for m: 9 
Type a positive integer for n: 5 
The first 5 positive integers multiples of 9 are:
9
18
27
36
45

到目前为止,我已经完成了:

m = int(input("Type a integer for m: "))
n = int(input("Type a integer for n: "))
i = 1
print()
print("The first ",n,"positive integers multiples of ", m," are:")
while i <= n:
    m = m * i
    print(m)
    i = i + 1

我想了解如何解决这个问题,我意识到使用 for 或者这样做会更容易

【问题讨论】:

  • 在这种情况下,问题是相当明显的,但以后请描述代码的问题所在。它会抛出异常吗?它会产生不正确的输出吗?没有人想猜测或必须运行代码才能找到答案。另请参阅minimal reproducible example
  • 跟进 Aran-Fey 的评论。你得到什么输出?
  • 您可能还想考虑如果我为 n 输入“-15”会发生什么
  • 或者如果我输入 "fifteen""twentytwo" - 请参阅 asking-the-user-for-input-until-they-give-a-valid-response

标签: python python-3.x while-loop


【解决方案1】:

你的问题出在这一行

m = m * i

您正在缓存一个中间值,然后在下一次迭代中将其相乘,因此第一次乘以 m 但下一次迭代您将乘以先前的中间值而不是原始的 m
你可以这样改变你的循环:

while i <= n:
    print(m * i)  #  you don't need to save the intermediate result, you can just print it
    i = i + 1

【讨论】:

    【解决方案2】:

    Nullman 的说法是正确的,无论如何这里是您的代码已更正,以防万一它可以帮助您更好地理解错误:

    m = 9
    n = 5
    i = 1
    print()
    print("The first ",n,"positive integers multiples of ", m," are:")
    while i <= n:
        multiple = m * i
        print(multiple)
        i = i + 1
    

    你不能使用if,但你确实可以使用for

    m = 9
    n = 5
    i = 1
    print()
    print("The first ",n,"positive integers multiples of ", m," are:")
    for i in range(1, n + 1):
        multiple = m * i
        print(multiple)
        i = i + 1
    

    【讨论】:

    • 谢谢 dzang。认为我理解了这个问题。我不能丢失 a 的值,因为它很重要,所以我定义了一个名为 multiple 的新变量,并让 m 值保持不变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多