我是一名初学程序员,在Python学习,但我很确定我对如何使大多数事情运行得到了很好的掌握,直到我遇到这个问题。当我试图运行一段内嵌if4.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..."
有人有什么想法吗?我真的很困惑。
答案 0 :(得分:3)
首先,在这一行:
query = raw_input("Are you working in 'degrees' or 'radians'? > ").lower
您没有调用.lower()
方法,因为没有()
。您只是将query
设置为等于字符串的lower
方法,因此您始终使用else
分支。
第二,在这一行:
"Umm... I'm confused..."
你没有打印任何东西,你只是做了一个字符串。所以即使正在采取分支,你也没有做任何你能看到的事情。
答案 1 :(得分:3)
这是两件事的组合,使得它似乎没有发生任何事情。
要降低字符串,请执行s.lower()
,而不是s.lower
。 s.lower
是一种方法。
您正在做的是将该方法分配给query
。因此,if
s都不会匹配。这意味着执行了else
分支。但是,你没有print "Umm... I'm confused..."
,你只有字符串本身。这导致您无法获得任何输出。
答案 2 :(得分:2)
几件事
lower()
else:
语句中打印字符串。所以即使你到了这里,似乎没有任何事情发生。这是因为该函数本身不符合您之前的条件(函数的结果可能)while_variable == True
或deg_rad == False
分别只使用while_variable
或not deg_rad
。 (这不是问题的一部分,只是糟糕的风格。)示例:
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..."
答案 3 :(得分:1)
raw_input("Are you working in 'degrees' or 'radians'? > ").lower
您尚未调用lower
方法,因此此时query
始终将成为绑定方法对象(类似于{{1 }})。
此外,在您的<built-in method lower of str object at 0x1001a0030>
子句中,您还没有使用else
,因此会创建字符串,然后在不显示的情况下将其丢弃。
因此你得到raw_input,然后什么都没有。