2015-10-26 3 views
1

Я пишу программу, используя два None-типа, и для одного из них я получаю сообщение об ошибке. Вот программа:строка ошибки типа python и nonetype

largest = None 
smallest =None 
while True: 
    num = raw_input("Enter a number larger than 0: ") 

    if num == "done" :  
     break 

    try: 
     float(num) 
    except: 
     print 'Invalid input' 
     continue 

    if num < 0: 
     print'number is smaller than 0' 
     continue 
    if num > largest: 
     largest = num 
    elif num < smallest: 
     smallest = num  
    else: 
     continue    

str(largest) 
str(smallest) 
print ('Maximum is '+ largest) 
print ('Minimum is '+ smallest) 

Я всегда получаю:

TypeError: cannot concatenate 'str' and 'NoneType' objects on line 23. 

Ответ может быть простым, но я только начинающий 12-летний. Пожалуйста, помогите мне.

ответ

0

В начале largest должно быть 0, а не None. Кроме того, smallest должно быть очень большим числом, а не None

Вы должны присвоить str(largest) переменной, т.е.

largest = str(largest) 
smallest = str(smallest) 
+0

Спасибо, что сделал olve ошибка, но теперь я получаю: «Минимум - ник» , но наибольший дает правильное значение .. some help? – Umer

+0

В начале ваша 'самая маленькая 'переменная не должна быть' None', это должно быть очень большое число, например 'smallest = 10000'.Другими словами, он должен быть больше, чем ваш максимальный вход. –

+0

Это то, что я думал сначала, но что, если мы используем программу для числа больше 1000? Если None - наименьшее число, есть ли что-то самое большое? – Umer

1

Вопрос заключается в том, что когда вы сравниваете num > largest вы изначально сравнения num > None который будет ложным. Вы также сравниваете num < None для самых маленьких, которые также будут ложными. Поэтому, когда вы добавляете его в конец строки с 'Maximum is '+ largest, вы пытаетесь добавить объект None, который не может быть объединен со строками.

Чтобы исправить это, вы должны изменить свои чеки, если говорить

if (largest is None) or (num > largest): 

и т.д.

Затем, когда вы идете, чтобы напечатать их, вы можете сделать 'Maximum is '+ str(largest) для преобразования чисел в строки представлений, которые могут быть соединены с другими строками.

+0

На самом деле, наоборот, 'None' всегда меньше, чем любое число в Python 2. – colevk

+0

он должен быть TypeError честно, но w/e –

0

Некоторые из вопросов, в вашем коде -

  1. str()/float() не на месте функции, они возвращают преобразованный объект обратно, вам нужно присвоить его обратно num или largest/smallest.

  2. В Python 2.x, None всегда меньше любого целого числа, так smallest всегда будет None, вы должны использовать float('inf') вместо None для smallest и float('-inf') для largest. Пример -

    largest = float('-inf') 
    smallest = float('inf') 
    
+0

Спасибо за первую точку, но inf не кажется встроенным, в. Кстати, я использую Python 2.7. – Umer

+0

Это, ты использовал точный код, который я дал? –

+0

Извините. Я использовал ваш, и он работает. Спасибо. – Umer

0

Сначала вы не должны преобразовать в строку вашего номера вы можете использовать, как это:

печати «Максимум составляет% г»% Наименьшее

но может решите свой пролет, но эта программа не сработает, потому что вы хотите сравнить более чем одно число («я думаю»), которое вы должны хранить в массиве, но я советую следовать this web site Если вы новичок: D

+0

@Yash Mehrotra @ Chad S @ Anand S Kumar @ Ufuk Akoguz Спасибо за вашу помощь. Я исправил его, и он работает как сон. – Umer

Смежные вопросы