2016-01-21 9 views
1

У меня проблема с одним из вопросов моей лаборатории программирования. Вопрос был так: «Учитывая переменные x, y и z, каждый из которых связан с int, напишите фрагмент кода, который присваивает наименьшее из них значение min». И моя рабочая область выглядитPython Моя лаборатория программирования

if x < y and x < z: 
    x = min 
    if y < x and y < z: 
     y = min 
     if z < x and z < y: 
      z = min 

Когда я повернулся в, обратная связь сказал: Примечания: ⇒ Неожиданные идентификаторы: и

Больше подсказок: ⇒ решения с вашим подходом, как правило, не используют : <

хотя я пробовал есть способы понять это, но никто из них не работал. Справка Plz. Thx.

Для первого ответа, система сказал: Примечания: ⇒ Неожиданные идентификаторы: и

Больше подсказок: ⇒ решения с вашим подходом, как правило, не используют: <

Проблемы Обнаружен: ⇒ Исключение произошло (, TypeError ('unorderable types: int() < builtin_function_or_method()',),) ⇒ Исключение произошло (, TypeError ('unorderable types: int() < builtin_function_or_method()',),) Исключение произошло (, TypeError ('unorderable types: int() < builtin_function_or_method()',),) ⇒ Исключение произошло (, TypeError ('unorderable types: int() < builtin_function_or_method()',),) ⇒ мин. не содержат правильное значение ⇒ у модифицировали ⇒ г модифицировал

для второго ответа, система сказала:

Примечания: ⇒ Неожиданные идентификаторы: и, Защита, Minist ⇒ Вы должны использовать переменная min. ⇒ В этом упражнении вы должны использовать оператор присваивания (=).

Дополнительные советы: ⇒ Вы почти наверняка должны использовать: = ⇒ Вы почти наверняка должны использовать: мин ⇒ Я еще не видел правильное решение, которое использует:, (запятая)

ответ

0

Я вижу три проблемы с кодом, как вы показали это в вопросе.

Во-первых, ваш отступ немного испорчен.Вы, вероятно, хотите, чтобы все ваши if заявления, чтобы быть на том же уровне, с соответствующими операторов присваивания отступом под каждой из них:

if something: 
    foo = bar 
if something_else: 
    foo = baz 
# etc 

Вы можете также использовать elif заявления вместо второго и третьего if, так как вы никогда не ожидаете одновременно имеют более одного условия.

Вторая проблема заключается в том, что вы выполняете заявления о присваивании назад. Если вы хотите, чтобы присвоить значение переменной x в новую переменную с именем min, вы должны поставить min на левой стороне и x на право:

min = x 

Это одна из причин, вы получаете много путающих ошибок. Перед запуском вашего кода min - это имя встроенной функции (о которой я подозреваю, что вы узнаете позже в своем классе). Когда вы сделали x = min, вы заменили старое значение x ссылкой на функцию.

Последняя вещь - логическая проблема. Все ваши сравнения используются оператором < для проверки того, является ли одно значение меньшим, чем другие. Проблема в том, что происходит, если два из значений равны. Если x и y имеют одинаковое значение, то оба x < y и y < x будут False. Это не очень хорошо для вашего кода, и поэтому вы, скорее всего, захотите использовать оператор <=. Он проверяет, имеет ли левая сторона меньше или равна правой стороне. С этой версией, если вы используете elif s, вы можете действительно отказаться от последнего условия и просто использовать else, так как если ни x, ни y меньше или равно другим значениям, z должно быть наименьшим значением по процессу устранения.

Во всяком случае, вот код со всеми тремя исправленных ошибок:

if x <= y and x <= z: 
    min = x 
elif y <= x and y <= z: 
    min = y 
else: # no "z <= x and z <= y" check needed here, will always be true if reached 
    min = z 
+0

Большое спасибо! –

0

Может быть проблема с вкладкой.

Вы можете попробовать это:

if x < y and x < z: 
    x = min 
if y < x and y < z: 
    y = min 
if z < x and z < y: 
    z = min 
+0

Спасибо за ваш ответ. –

+0

Вот что система сказала: –

+0

CODELAB АНАЛИЗ: ЛОГИЧЕСКАЯ ОШИБКА Примечания: ⇒ Неожиданные идентификаторы: и –

0

Я делаю выборку:

#-*- coding:utf-8 -*- 

def minist(x,y,z): 
if x < y and x < z: 
    return x 
if y < x and y < z: 
    return y 
if z < x and z < y: 
    return z 



x = 1 
y = 2 
z = 3 

test = -1 

test = minist(x,y,z) 

print(test) 

Этот пример напечатает 1.

+0

Благодарим вас за ответ. Система заявила: Примечания: ⇒ Неожиданные идентификаторы: и, def, minist ⇒ Вы должны использовать переменную min. ⇒ В этом упражнении вы должны использовать оператор присваивания (=). Дополнительные советы: ⇒ Вы почти наверняка должны использовать: = ⇒ Вы почти наверняка должны использовать: мин ⇒ я еще не видел правильное решение, которое использует:, (запятая) –