2013-09-15 3 views
0

Я сейчас просто играю с определяющими функциями, и я получаю эту ошибку. Я просто пытаюсь сделать легкую функцию, когда пользователь вводит 2 числа, а затем умножает их вместе. Также, пожалуйста, объясните, что я делаю неправильно как можно проще. (Я нуб)Неподдерживаемый тип (-ы) операндов для *: 'NoneType' и 'NoneType' (Python)

def userinput(): 
    while True: 
     try: 
      number = int(input("Number: ")) 
      break 
     except ValueError: 
      print("NOPE...") 

def multiply(x,y): 
    z = x * y 
    print(z) 

while True: 
    x = userinput() 
    y = userinput() 
    multiply(x,y) 
    again = input("Again? ") 
    if again == "No" or again == "no": 
     break 
    else: 
     pass 
+0

Вы можете сделать 'если again.lower() = = 'no': 'и поймать все вкусы« нет », включая« NO »и« nO ». – SethMMorton

+0

Кроме того, это весь этот код внутри функции? В противном случае 'break' внутри вашего последнего блока' if' не имеет смысла. – SethMMorton

ответ

2

В функции userinput(), вы никогда не вернуться number, так питона по умолчанию return None. Таким образом, когда вы проходите x и y до multiply(), вы пытаетесь сделать None * None, отсюда и ошибка.

return number после попытки/за исключением структуры в userinput()


Если вы хотите проверить на поплавках, вы можете сделать:

while True: 
    number = input("Number: ") 
    try: 
     return int(number) 
    except ValueError: 
     try: 
      return float(number) 
     except ValueError: 
      print("NOPE...") 
+0

Спасибо вам большое! :) – Suds2

+0

@ Suds2 Добро пожаловать! Не забудьте [принять ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)! – TerryA

+0

Или еще лучше, не создавайте переменную 'number'. Просто выполните 'return int (input (" Number: "))'. Затем «break» не требуется. – SethMMorton

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