Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环执行不正确 类cga(对象): '''''' 定义(自我、i、o): '''''' self.i=i self.o=o def get(自我): '''''' self.i=[] c=原始输入(“你这学期修了多少门课?”) cout=0 而cout_Python_Debugging_Comparison_While Loop_Raw Input - Fatal编程技术网

Python 循环执行不正确 类cga(对象): '''''' 定义(自我、i、o): '''''' self.i=i self.o=o def get(自我): '''''' self.i=[] c=原始输入(“你这学期修了多少门课?”) cout=0 而cout

Python 循环执行不正确 类cga(对象): '''''' 定义(自我、i、o): '''''' self.i=i self.o=o def get(自我): '''''' self.i=[] c=原始输入(“你这学期修了多少门课?”) cout=0 而cout,python,debugging,comparison,while-loop,raw-input,Python,Debugging,Comparison,While Loop,Raw Input,我的问题是,如果我在计划询问我注册了多少课程时键入5。循环不会停止,程序将继续要求输入课程代码权重等级。当程序显示count cout=6时,我进行了调试,但它无法与c进行比较,while循环也不会停止。返回一个字符串,而不是int。您的计算逻辑有缺陷。您必须检查用户输入的值是否有效(正整数,可能小于允许的最大值)。验证后,必须将c转换为int: class cga(object): '''''' def __int__(self,i,o): ''''''

我的问题是,如果我在计划询问我注册了多少课程时键入5。循环不会停止,程序将继续要求输入课程代码权重等级。当程序显示count cout=6时,我进行了调试,但它无法与c进行比较,while循环也不会停止。

返回一个字符串,而不是int。您的计算逻辑有缺陷。您必须检查用户输入的值是否有效(正整数,可能小于允许的最大值)。验证后,必须将
c
转换为int:

class cga(object):
    ''''''
    def __int__(self,i,o):
        ''''''
        self.i = i
        self.o = o

    def get(self):
        ''''''
        self.i = []
        c = raw_input("How many courses you have enrolled in this semester?:")
        cout = 0
        while cout < c:
            n = raw_input("plz enter your course code:")
            w = raw_input("plz enter your course weight:")
            g = raw_input("plz enter your course grade:")
            cout += 1 
            self.i.append([n,w,g])
if __name__ == "__main__":
    test = cga()
    test.get()

只有这样,您的比较逻辑才能按预期工作。

问题是,
raw\u input
返回一个字符串(不是数字),并且由于一些奇怪的历史原因,默认情况下可以将字符串与任何其他类型的对象进行比较(排序),但结果是。。。奇怪

c=int(c)

首先,修复缩进。并不是所有代码的格式都正确。第二,添加打印语句(或函数)来显示
cout
c
的值,这样我们就可以看到发生了什么。你知道,如果你不想使用docstring,你可以省去它们,而不是简单地在其中放一个空白的。如果这是家庭作业,请将其标记为
家庭作业
。“出于一些奇怪的历史原因”?不是真的。这是一个非常合理的理由:“显式优于隐式”。隐式转换是错误的。应该通过引发异常来明确错误,而不是隐式地看起来有效,但产生违反直觉的结果。它这样做的事实确实是一个历史产物。@S.Lott:这种行为有什么明确的含义?提出一个
类型错误
,不是更明确吗?@Eli Bendersky:“提出
类型错误
,不是更明确吗?”?显然不是。比较对象并返回
False
@s.Lott似乎更为明确:首先,比较在Py2中返回
True
(!)。请注意,Py3中的行为已被删除(在我看来也是正确的),取而代之的是
TypeError
:上面的示例生成
TypeError:unorderable types:int()
Python 2.6.5 (r265:79063, Oct 28 2010, 20:56:23) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 < "2"
True
>>> 1 < "0"
True
>>> 1 < ""
True
>>> 
c = int(raw_input("How many courses you have enrolled in this semester?:"))