【问题标题】:I'm trying to print the largest number from the inputs that the user gives, but it's printing the wrong number我正在尝试从用户提供的输入中打印最大的数字,但它打印的数字错误
【发布时间】:2021-10-04 18:25:28
【问题描述】:

基本上,我正在尝试构建一个代码以从用户的输入中获取最大的数字。这是我第一次使用 for 循环,我对 python 还是很陌生。这是我的代码:

session_live = True
numbers = []
a = 0

def largest_num(arr, n):
    #Create a variable to hold the max number
    max = arr[0]

    #Using for loop for 1st time to check for largest number
    for i in range(1, n):
        if arr[i] > max:
            max = arr[i]

        #Returning max's value using return
        return max

while session_live:
    print("Tell us a number")
    num = int(input())

    numbers.insert(a, num)
    a += 1

    print("Continue? (Y/N)")
    confirm = input()


    if confirm == "Y":
        pass

    elif confirm == "N":
        session_live = False
        
        #Now I'm running the function
        arr = numbers
        n = len(arr)
        ans = largest_num(arr, n)
        print("Largest number is", ans)

    else:
        print(":/")
        session_live = False

当我尝试运行我的代码时,会发生这种情况:

Tell us a number
9
Continue? (Y/N)
Y
Tell us a number
8
Continue? (Y/N)
Y
Tell us a number
10
Continue? (Y/N)
N
Largest number is 9

有什么解决办法吗?

【问题讨论】:

  • 可以使用内置的max()函数吗?
  • return max 应该与for 的缩进级别相同,而不是if
  • @KenY-N WOAHH 它已修复,很酷,没关系,它仍然无法正常工作
  • @Barmar 我想是的,但不要从我这里拿走它,我对 python 还是很陌生

标签: python arrays function for-loop input


【解决方案1】:

largest_num 函数中的错误在于它在第一次迭代中返回 - 因此它只会返回前两个数字中较大的一个。

使用内置的max() 函数让生活变得更轻松;任何时候你重新实现一个已经存在的函数,你都是在为自己创造工作,并且(正如你刚刚发现的那样)这是另一个让错误潜入你的程序的地方。

这是使用max() 而不是largest_num() 的相同程序,并删除了一些不必要的变量:

numbers = []

while True:
    print("Tell us a number")
    numbers.append(int(input()))

    print("Continue? (Y/N)")
    confirm = input()
    if confirm == "Y":
        continue

    if confirm == "N":
        print(f"Largest number is {max(numbers)}")
    else:
        print(":/")
    break

【讨论】:

【解决方案2】:

所以,第一件事,

  • 可以避免使用max,因为它是python中的保留关键字

在你的修复中,你只在循环中将它与值进行一次比较,并且你正在返回数字,缩进是这里的关键。您必须等待循环完成其工作,然后返回值。

  • 有许多内置方法可以完成这项工作,这是您的实现(稍作修改)
session_live = True
numbers = []
a = 0

def largest_num(arr, n):
    #Create a variable to hold the max number

    max_number = arr[0]

    #Using for loop for 1st time to check for largest number
    for i in range(1, n):
        if arr[i] > max_number:
            max_number = arr[i]

    # --- The indentation matters
    #Returning max's value using return
    return max_number

while session_live:
    print("Tell us a number")
    num = int(input())

    numbers.insert(a, num)
    a += 1

    print("Continue? (Y/N)")
    confirm = input()


    if confirm == "Y":
        pass

    elif confirm == "N":
        session_live = False
        
        #Now I'm running the function
        arr = numbers
        n = len(arr)
        ans = largest_num(arr, n)
        print("Largest number is", ans)

    else:
        print(":/")
        session_live = False

【讨论】:

  • 是的,这也可以,谢谢,我会保留两者以供将来参考,无论如何,ty :D
  • 欢迎。也许如果您考虑两个答案,请同时支持两个答案。并有一个作为选择的答案。谢谢:)
【解决方案3】:

我没有使用内置函数“max”。
这是一种通过for语句比较来更新'maxNum'变量的方法。


numbers = []

while True:
    print("Tell us a number")
    numbers.append(int(input()))

    print("Continue? (Y/N)")
    confirm = input()

    if confirm == "Y":
        continue

    if confirm == "N":
        maxNum = numbers[0]
        for i in numbers:
            if i > maxNum:
                maxNum = i

        print("Largest number is", maxNum)

    else:
        print(":/")
    break

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多