Почему в Python мои циклы WHILE не выполняются?

Вопрос: Я начинающий программист, учился на Python, но я был уверен, что у меня есть приличное понимание того, как заставить большинство работать, пока я не наткнулся на это. Поскольку я пытался запустить кусок кода с инструкцией if..then, вложенной внутри, Python решил бросить мне кривый шар, не выполнив инструкции if... then. Когда я пытаюсь запустить программу,

Вопрос:

Я начинающий программист, учился на Python, но я был уверен, что у меня есть приличное понимание того, как заставить большинство работать, пока я не наткнулся на это. Поскольку я пытался запустить кусок кода с инструкцией if..then, вложенной внутри, Python решил бросить мне кривый шар, не выполнив инструкции if… then. Когда я пытаюсь запустить программу, все, что она делает, постоянно запускает одну строку кода, которая у меня внутри цикла while, перед командой if… then. Здесь код:

def deg_or_rad(): global deg_rad deg_rad = False while deg_rad == False: query = raw_input(«Are you working in ‘degrees’ or ‘radians’? > «).lower if query == «deg» or query == «degrees»: deg_rad = «deg» print «Cool! I like degrees.» elif query == «rad» or query == «radians»: deg_rad = «rad» print «Cool! I like radians.» else: «Umm… I’m confused…»

Я пробовал несколько других переменных для цикла while, например:

def deg_or_rad(): global deg_rad deg_rad = False while_variable = True while while_variable == True: query = raw_input(«Are you working in ‘degrees’ or ‘radians’? > «).lower if query == «deg» or query == «degrees»: deg_rad = «deg» print «Cool! I like degrees.» while_variable = False elif query == «rad» or query == «radians»: deg_rad = «rad» print «Cool! I like radians.» while_variable = False else: «Umm… I’m confused…»

У кого-нибудь есть идеи? Я действительно смущен этим.

Ответ №1

Во-первых, в этой строке:

query = raw_input(«Are you working in ‘degrees’ or ‘radians’? > «).lower

вы не вызываете метод .lower(), потому что нет (). Вы просто устанавливаете query равным lower методу строк, поэтому вы всегда берете ветку else.

Во-вторых, в этой строке:

«Umm… I’m confused…»

Вы ничего не печатаете, вы просто сделали строку. Поэтому, хотя эта ветка берется, вы ничего не видите.

Ответ №2

Это сочетание двух вещей, из-за которых кажется, что ничего не происходит.

Чтобы опустить строку, вы делаете s.lower(), а не s.lower. s.lower – это метод.

То, что вы делаете, это назначение этого метода для query. Таким образом, ни один из if никогда не будет соответствовать. Это означает, else ветка else выполняется. Но вы не print «Umm… I’m confused…», у вас просто есть строка. Это приводит к тому, что вы не получаете какой-либо выход.

Ответ №3

пару вещей

  1. lower – вызов функции, вы должны использовать его как lower()
  2. Вы не печатаете строку в инструкции else: Таким образом, похоже, что ничего не происходит, даже если вы сюда попадаете. Это связано с тем, что сама эта функция не будет соответствовать вашим предыдущим условиям (результаты функции могут быть)
  3. Не говорите while_variable == True или deg_rad == False просто используйте while_variable или not deg_rad соответственно. (На самом деле это не проблема, просто плохой стиль.)
  4. Вы можете попробовать распечатать вещи, чтобы попробовать и отлаживать, где ваша функция отклоняется от ожидаемого поведения, чтобы попытаться сузить ее. Например, если вы ввели отладочную печать сразу после ввода запроса, вы могли видеть, что это не то, на что вы надеялись.

пример:

def deg_or_rad(): global deg_rad deg_rad = False while not deg_rad: query = raw_input(«Are you working in ‘degrees’ or ‘radians’? > «).lower() if query in («deg», «degrees»): deg_rad = «deg» print «Cool! I like degrees.» elif query in («rad», «radians»): deg_rad = «rad» print «Cool! I like radians.» else: print «Umm… I’m confused…» Ответ №4

raw_input(«Are you working in ‘degrees’ or ‘radians’? > «).lower

Вы не вызывали lower метод, поэтому в этот момент query всегда будет объектом связанного метода (что-то по строкам <built-in method lower of str object at 0x1001a0030>).

Кроме того, в предложении else вы не использовали print, поэтому строка создается, а затем выбрасывается без отображения.

Таким образом, вы получаете raw_input, а затем ничего.

Оцените статью
Добавить комментарий