【问题标题】:Getting minimum and maximum from inputs从输入中获取最小值和最大值
【发布时间】:2020-07-01 18:11:10
【问题描述】:

我不明白这段代码有什么问题。它适用于最大的,但不是最小的。并且两行代码都是一样的! 我是新来的,对编程也很陌生,请原谅我的经验不足。请注意,我需要用这些方法解决这个问题,因为它是课程中的章节。再次抱歉

largest = None
smallest = None
while True:
    num = input("Enter a number: ")
    if (num=="done"): 
        break
    else:
        try:
            num=int(num)
        except:
            print("Invalid input") 
            continue
    if(num < smallest):
        smallest = num
    elif(num > largest):
        largest = num
print("Maximum is", largest)
print("Minimum is", smallest)

【问题讨论】:

  • 请在问题中添加minimal reproducible example作为文本
  • 您无法将数字与None 进行比较。所以if (num &lt; smallest) 不起作用,因为您将smallest 设置为None
  • “看照片”不,请在问题本身中提供所有代码作为格式化文本。有关格式化代码块的更多信息,请参阅this
  • 如果只输入一个数字,它应该是最大和最小的。但是您的代码只会分配其中一个。

标签: python debugging variable-assignment new-operator coursera-api


【解决方案1】:

这个问题大多需要do-while循环,但由于python没有do-while循环,你可以如下解决:

largest = None
smallest = None

first_time = True
while True:
    num = input("Enter a number:")

    if num=="done" :
        break
    else:
        try:
            num = int(num)
        except:
            print("Invalid input")
            continue
        if first_time :
            largest = smallest = num
            first_time = False
        else:
            if num < smallest :
                smallest = num
            elif num > largest :
                largest = num

print("Max : ", largest)
print("Min : ", smallest)

第一次输入一个数字时,检查它是否是一个数字,然后分配给最小和最大的两个。第一次后,用户可以输入数字,它工作正常。 希望对你有帮助:)

【讨论】:

  • 你不需要first_time变量,你可以检查变量是否为None
  • 同意。我刚刚添加了变量来显示代码中发生了什么:)
【解决方案2】:

您不应将smallestlargest 设置为None,因为您无法将其与数字进行比较。

相反,您应该将它们都设置为第一个输入。然后,您可以将其他数字与它们进行比较。如果只输入一个数字,它将是最大和最小。

我已将读取数字移到一个函数中,以避免在两个地方重复验证循环。

def get_number():
    while True:
        num = input("Enter a number: ")
        if num == "done":
            return num
        try:
            num = int(num)
            return num
        except:
            print("Invalid input")

smallest = get_number()
largest = smallest
if smallest == "done":
    print("At least one number must be entered")
else:
    while True:
        num = get_number()
        if num == "done":
            break
        if num < smallest:
            smallest = num
        elif num > largest:
            largest = num
    print("Maximum = ", largest)
    print("Minimum = ", smallest)

测试结果:

$ python testminmax.py
Enter a number: 7
Enter a number: 2
Enter a number: bob
Invalid input
Enter a number: 10
Enter a number: 4
Enter a number: done
Maximum =  10
Minimum =  2

【讨论】:

  • 所需的输出和我的输出在屏幕截图的右侧。它适用于最大但不是最小的。我不得不尝试 7,2,bob,10,4,done, 在里面
  • 我总是得到不匹配的最小值,我不知道为什么
  • 我尝试了很多不同的输入,但都无法重现。
  • 用你的还是我的?它回答正确吗?为什么我的错误总是最小?
  • 当然是我的。您的代码根本不起作用。
【解决方案3】:

知道了!我应该使用 ** is ** 而不是 **

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    相关资源
    最近更新 更多