Python новичок, проходящий курс Python для всех на Coursera - проблемы с присвоением номеров 5.2 - PullRequest
0 голосов
/ 06 августа 2020

Итак, задача состоит в следующем:

«Напишите программу, которая постоянно запрашивает у пользователя целые числа, пока пользователь не введет« готово ». После ввода« готово »распечатайте наибольшее и наименьшее из числа. Если пользователь вводит что-либо, кроме действительного числа, поймайте его с помощью try / except и выведите соответствующее сообщение и проигнорируйте номер. Введите 7, 2, bob, 10 и 4 и сравните с выводом ниже. "

Я все еще новичок в Python, но, похоже, я не могу выполнить это задание самостоятельно. Я как бы хочу избежать простого копирования чужого кода, потому что преподаватель модуля Чарльз Северенс считает, что это плохая идея. Но я также устаю от этого назначения, которое, вероятно, не отражает того, что я обычно хотел бы использовать для python как программист.

Это мой код на данный момент. Кажется, что независимо от того, что я меняю, всегда возникает новая ошибка:

Пожалуйста, помогите, предложите решения и расскажите мне об ошибках, которые я делаю.

EDIT:

Я получил комментарии об ошибках отступов и хотел уточнить, что это были опечатки, которые я допустил при копировании своего кода на этот форум. В любом случае, я скорректировал свой код, и у него больше нет проблемы с отказом принять «готово» или продолжением l oop после неверного ввода. Теперь у меня возникли трудности с получением максимального и минимального значений с функцией списка или без нее. Кроме того, на данный момент я настолько застрял, что не прочь получить несколько прямых ответов с рабочим кодом.

largest = None
smallest = None
number_list = []
while True:
    num = input('Enter a number:')
    if num == 'done' : break
    try:
        num = int(num)
        number_list.append(num)
    except:
        print ('Invalid Input')
    continue
def max(num):
    for largest in number_list[num]:
        if largest < num:
            largest = num
        return largest
def min(num):
    for smallest in number_list[num]:
        if smallest is None:
            smallest = num
        if smallest > num:
            smallest = num
        return smallest
print ('Maximum is',max(num))
print ('Minimum is',min(num))

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Не раскрывая полный код по причинам, указанным вашим учителем, есть несколько вещей, на которые стоит обратить внимание:

Значения в настоящее время не возвращаются, поскольку input всегда возвращает строку, и вам нужны целые числа для сравнения, поэтому после ввода вы должны добавить строку, которая пытается преобразовать ввод в целочисленную переменную, примерно так:

num = input('Enter a number:')
    if num != "done":
        try:
            num = int(num)
            number_list.append(num)
        except ValueError:
            print("Must be a number or the word 'done'")

Обратите внимание, что я также проверяется наличие переменной number_list, которая должна быть заранее определена как пустой список. Списки отлично подходят для хранения множества чисел в одной переменной, а затем для проверки наибольшего и наименьшего числа с помощью аргументов max () и min ().

0 голосов
/ 06 августа 2020

Полагаю, вы еще не слышали о списках.

Я бы решил это, используя список для хранения всех значений, а затем применяя встроенные max(list) и min(list) в функциях.

alln = list()
num=""

while num!='done':
    num = input('Enter a number:')
    
    try:
        alln.append(float(num))
    except:
        print('invalid input')
    
print ('Maximum is',max(alln))
print ('Minimum is',min(alln))

Вот так

Отметьте this и this , чтобы понять основы списков и то, как работать с этими двумя функциями .

Теперь проблемы с вашим кодом

1. У вас несколько ошибок отступа.

    for largest_num in [uval]:
        if largest is not None or uval > largest:
        ^here, the 'if' should be inside the 'for' block and it wasn´t. You have this problem twice in your code

while True:
    num = input('Enter a number:')
    uval = float(num)
    if num == str:
    elif num == str('done'):
    ^here, all four need an extra space to be properly indented

2. Из-за этого

    num = input('Enter a number:')
    uval = float(num)

Когда вы пишете «готово», вы получаете еще одну ошибку. Попробуйте вместо этого сделать это:

while True:
    if num == 'done':
        break
    #check if it's not a number
    else:
        num = float(num)
        #store the value as a float

Таким образом вы можете избежать преобразования string в float, поэтому вы получаете сообщение об ошибке

Другие обнаруженные мной проблемы

  1. На обоих отпечатках есть ошибки отступа. Но если предположить, что это всего лишь опечатка, отступ сам по себе заставит l oop печатать каждый раз при запуске, потому что он находится внутри блока for.
  2. str('done') это не работает, потому что str() преобразует аргумент в строку. Помните, что 'done' уже считается строкой для python, поэтому вы можете просто написать num == 'done'
...