2017-01-28 13 views
0

Я новичок в кодировании Python, поэтому имейте это в виду для следующей проблемы. Я просто изучаю использование определяющих функций, аргументов и переменных.Запись функции, которая вычисляет отношение двух чисел

Определите функцию, называемую ratioFunction, которая принимает два числа с номерами num1 и num2 в качестве аргументов и вычисляет отношение двух чисел и отображает результаты как (в этом примере num1 равно 6, num2 равно 3): «Отношение 6 и 3 - 2 '. Вывод после запуска кода должен выглядеть следующим образом:

Enter the first number: 6 
Enter the second number: 3 
The ratio of 6 and 3 is 2. 

Так вот что я приготовил с моим ограниченным знанием кодирования и моей полной растерянности над функциями:

def ratioFunction(num1, num2): 
    num1 = input('Enter the first number: ') 
    int(num1) 
    num2 = input('Enter the second number: ') 
    int(num2) 
    ratio12 = int(num1/num2) 
    print('The ratio of', num1, 'and', num2,'is', ratio12 + '.') 
ratioFunction(num1, num2) 

Я совершенно запутался , любая помощь будет оценена!

+0

Один из ваших 'num1' или' num2' должен быть float, 'ratio12 = float (num1)/num2' – ZdaR

+1

Почему ваша функция принимает аргументы, но затем сразу же перезаписывает их, беря пользовательский' input'? –

+0

Какую версию Python вы используете? –

ответ

1

Проблема в том, что вы не фиксируете результаты вызова int.

def ratioFunction(num1, num2): 
    num1 = input('Enter the first number: ') 
    int(num1) # this does nothing because you don't capture it 
    num2 = input('Enter the second number: ') 
    int(num2) # also this 
    ratio12 = int(num1/num2) 
    print('The ratio of', num1, 'and', num2,'is', ratio12 + '.') 
ratioFunction(num1, num2) 

Изменить это:

def ratioFunction(num1, num2): 
    num1 = input('Enter the first number: ') 
    num1 = int(num1) # Now we are good 
    num2 = input('Enter the second number: ') 
    num2 = int(num2) # Good, good 
    ratio12 = int(num1/num2) 
    print('The ratio of', num1, 'and', num2,'is', ratio12 + '.') 
ratioFunction(num1, num2) 

Кроме того, когда вы звоните ratioFunction(num1, num2) в последней строке, это будет NameError, если у вас нет num1 и num2 определяемом где-то. Но, честно говоря, это совершенно необходимо, потому что вы принимаете участие. Эта функция не нуждается в аргументах. Кроме того, при печати вы будете использовать другую ошибку, поскольку используете оператор + на ratio12 + '.', но ratio12 - это int и '.' - это строка. Быстрое решение, конвертировать ratio12 в str:

In [6]: def ratioFunction(): 
    ...:  num1 = input('Enter the first number: ') 
    ...:  num1 = int(num1) # Now we are good 
    ...:  num2 = input('Enter the second number: ') 
    ...:  num2 = int(num2) # Good, good 
    ...:  ratio12 = int(num1/num2) 
    ...:  print('The ratio of', num1, 'and', num2,'is', str(ratio12) + '.') 
    ...: 

In [7]: ratioFunction() 
Enter the first number: 6 
Enter the second number: 2 
The ratio of 6 and 2 is 3. 

Хотя, скорее всего, ваша функция является предположим принимать аргументы, и вы получите вход вне функции и передать его в ней.

+0

Juanpa - это сработало! Большое вам спасибо, вы не представляете, насколько я расстроен, я застал это часами! Приятно знать, что я был по крайней мере близок! – NBowman6

0

Есть несколько мелких вещей, чтобы исправить в вашей функции:

1) Функция ratioFunction не должны получать какие-либо параметры, потому что вы просите пользователя ввести значения для num1 и num2 внутри функции.

2) Утверждение «int (num1)» (без кавычек) не изменяет собой значение num1, оно просто возвращает целочисленное представление num1. Вы должны назначить num1 возвращаемое значение или создать для этой цели другую переменную.

3) Вы смешиваете строки и ints в инструкции печати (вы не можете добавить строку и целое число). Вы можете заменить + запятой, но это немного уродливо. Есть несколько способов, чтобы достичь того, что вы хотите, но я рекомендую вам использовать форматирование строк:

print('The ratio of {0} and {1} is {2}.'.format(num1, num2, ratio12)) 

Если вы должны рассмотреть нецелое подразделение, использование поплавок (num1)/num2 вычислить его.

0

Есть в основном 3 проблемы с вашей функцией:

  1. Проблема int деления:
    В Python3, Деление int объекта других int объекта может вернуть float.
    Например:

    In[] : a = 10 
    In[] : b = 3 
    In[] : a/b 
    Out[]: 3.3333333333333335 
    
    In[] : a // b # Fix 01: Specifying integer division to the interpreter 
    Out[]: 3 
    
    In[] : int(a/b) 
    Out[]: 3 # Fix 02: Type casting the float to int 
    
  2. Ловля возвращаемое значение типа литья num1 и num2.
    Вам необходимо сохранить значение, возвращаемое функцией int, на num1 и num2. Еще лучше, вы можете сделать это явным, когда вы попросите пользователя ввести его.

    In[] : num1 = int(input("Enter the first number :")) 
    In[] : num2 = int(input("Enter the second number :")) 
    
  3. Аргументы функции ratioFunction «s определение: Поскольку вы запрашивая пользователя для входа, она полностью указывает меньше передавать их в качестве параметров заранее. Это плохой метод проектирования и может привести к дальнейшим проблемам, когда вы вызываете ratioFunction из других сценариев или функций.
    Fix: Удалите аргументы, и определить его как четкости ratioFunction()

Подсказка: Я заметил, что вы используете JAVA конвенции для именования функции Python. Я бы посоветовал вам прочитать руководство по стилю кодирования Python PEP8.