Python定义和调用函数 - 在处理用户输入时改变方法行为

时间:2014-01-05 20:38:43

标签: python user-input

我定义了一个方法,如下所示:

class MyDatastructure(object):
    # init method here

    def appending(self, elem):
        self.data.append(elem)
        if self.count >= self.size:
            print "popping " + str(self.data[0])
            print "inserting " + str(elem)
            self.data.pop(0)
        elif self.count < self.size:
            self.count += 1
            print "count after end of method " + str(self.count)

我测试了它,它按原样运行。

在此定义下,我想处理一些用户输入并使用此方法。但是,它不再进入if案例了!知道为什么吗?

# in the same file
def process_input():
    while True:
        # getting user input
        x = raw_input()
        ds = MyDatastructure(x)  # creating data structure of size, which was taken from user input, count initially 0
        ds.appending(1)
        ds.appending(2)
        ds.appending(3) 
        # Still appending and NOT popping, even though the if in appending doesn't allow it!   
        # This functionality works if I test it without user input!

1 个答案:

答案 0 :(得分:2)

问题在于这一行:

x = raw_input()

调用raw_input将返回一个字符串。如果我输入数字3,这意味着数据结构将字符串"3"分配给大小。

尝试将字符串与数字进行比较被认为是未定义的行为,并且会做出奇怪的事情 - 请参阅此StackOverflow answer。请注意,Python 3修复了这个奇怪的问题 - 尝试将字符串与int进行比较将导致发生TypeError异常。

相反,您希望将其转换为int,以便您可以正确地进行大小比较。

x = int(raw_input())