akash jha
akash jha

Reputation: 1

Write a program to find the greatest number in a list using python?

My solution is:

numbers = [1, 2, 3, 5, 9, 6, 101, 55, 7, 1, 3, 88, 99, 101, 6, 88, 66, 101, 6, 101, 55, 1001]
n = len(numbers)
for x in range(n):
    y = 0
    while y < n:
        if numbers[x] >= numbers[y]:
            y += 1
        else:
            break
    else:
       z = x
print(f'Greatest number = {numbers[z]}')

I know it's complicated but is it right? And one more thing --- Even though I am getting my answers correct for every list of numbers i can make but pycharm is showing a warning that -- Name 'z' can be undefined. why is that and how can I remove it//

Upvotes: 0

Views: 1849

Answers (5)

Pawan Prasad
Pawan Prasad

Reputation: 70

max_number = max(numbers)
print('Greatest number = {}'.format(max_number))

For pycharm warning, it is because the variable z defined and assigned in else block, unlike like java python is dynamically typed and doesn't require variable declaration

Upvotes: 0

Stacy Kebler
Stacy Kebler

Reputation: 17

yes, it's complicated and not effective to use two loops just to find the max. Even max function can be used

numbers = [1, 2, 3, 5, 9, 6, 101, 55, 7, 1, 3, 88, 99, 101, 6, 88, 66, 6, 101, 55, 1001]
print(max(numbers))

For writing your own logic, this is in fact simpler.

numbers = [1, 2, 3, 5, 9, 6, 101, 55, 7, 1, 3, 88, 99, 101, 6, 88, 66, 6, 101, 55, 1001]
maxi = numbers[0]
for i in numbers:
    if i > maxi:
        maxi = i
print("Greatest number: ", maxi)

Upvotes: 2

Maxim Terin
Maxim Terin

Reputation: 1

Looks like you are using C/C++ approach to solve it by python has a lot of built-in functions that can make your life much easier. In this case, you can use max() function.

The shortest way

numbers = [1, 2, 3, 5, 9, 6, 101, 55, 7, 1, 3, 88, 99, 101, 6, 88, 66, 101, 6, 101, 55, 1001]

print(f'Greatest number = {max(numbers)}')
Greatest number = 1001

You recieve this notification because z variable is declared only in else block. And if your code will exit from while block (not in this case, but anyway) and never goes to else, you will recieve an error:

UnboundLocalError: local variable 'z' referenced before assignment

Simple example:

def test(x):
   ...:     if x == 1:
   ...:         z = x
   ...:     else:
   ...:         pass
   ...:     print(z)
   ...:     
test(1)
1
test(2)
Traceback (most recent call last):
  File "/home/terin/regru/venvs/.dl/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3331, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-13-14ddcd275974>", line 1, in <module>
    test(2)
  File "<ipython-input-11-43eaa101b10d>", line 6, in test
    print(z)
UnboundLocalError: local variable 'z' referenced before assignment

Upvotes: 0

Some
Some

Reputation: 18

There is no point in doing z = x. Just do:

numbers = [1, 2, 3, 5, 9, 6, 101, 55, 7, 1, 3, 88, 99, 101, 6, 88, 66, 101, 6, 101, 55, 1001]
n = len(numbers)
for x in range(n):
    y = 0
    while y < n:
        if numbers[x] >= numbers[y]:
            y += 1
        else:
            break

print(f'Greatest number = {numbers[z]}')

Upvotes: 0

Barmar
Barmar

Reputation: 781708

The else: block is only executed if the while loop ends normally, rather than by executing a break statement.

Since you only set z in the else: block, if the loop ends due to the break statement, z won't be set.

It may be that the mathematical logic of the two loops ensures that at least one of the inner loops will complete without executing break. But PyCharm can't tell that this is always true, so it warns about it.

If you're certain that there's no possibility that the loop will end without setting z, you can suppress the warning in PyCharm.

Upvotes: 1

Related Questions