列表拆分程序不会运行

时间:2014-11-30 11:36:59

标签: python

我是python编程的新手,在学校的课程中,我们被要求创建一个程序,接受用户的数字,直到输入空值,验证它们在1到999之间,然后将它们打印在3个单独的列表中单位,双位和三位数。这是我的代码,我无法工作,也不知道它有什么问题:

def listInput():
    numIn = int(input("Please enter a number between 1 and 999:    "))
        while testNum(numIn):
            return listInput()
            if listInput(""):
                    break

def testNum(testNumber):
    if testNumber < int(1):
        print ("Error. Please try again:" + "\n")
        return False
    elif testNumber > 999:
        print ("Error. Please try again:" + "\n")
        return False
    else:
        return True

def splitList():
    list1 = []
    list2 = []
    list3 = []
    num = listInput()
    if 0 < num < 10:
        list1.append(num)
    elif 10 <= num < 100:
        list2.append(num)
    elif 100 <= num < 1000:
        list3.append(num)
    else:
        print("Number out of range.")

def main():
    listInput()
    splitList()

main()

我已经编辑了列表拆分功能,现在得到错误:

Traceback (most recent call last):
   line 35, in <module>
    main()
   line 33, in main
    splitList()
   line 22, in splitList
    num = listInput()
   line 2, in listInput
    numIn = int(input("Please enter a number between 1 and 999:    "))
ValueError: invalid literal for int() with base 10: ''

3 个答案:

答案 0 :(得分:0)

排序表达式有问题。例如第一个:

if listInput() >= int(1):
    return list1.append()

将任何正数放入list1然后结束。所以所有数字都会在那里结束。

您应该执行以下操作:

num = listInput()
if 0 < num < 10:
    list1.append(num)
elif 10 <= num < 100:
    list2.append(num)
elif 100 <= num < 1000:
    list3.append(num)
else:
    print('Number out of range.')

答案 1 :(得分:0)

除了克劳斯提到的东西,你也不应该在listInput()中呼叫main()

虽然listInput()有点像写作,但使用while循环而不是在其内部调用listInput()要好得多。这称为递归,虽然Python允许递归,但它并不鼓励它。因此,如果用户顽固地输入无效数据,那么程序最终会崩溃,因为它已达到递归限制。

我说listInput()会像写的那样工作,因为你的程序没有做过一件重要的事情:它应该循环读取输入,直到用户输入null值然后它应该打印3个列表的内容然后停止。

如果你的程序验证用户输入的数据实际上是一个整数,那也很好,但我想这可能超出了这个任务的范围。


这是您的代码的相当修改版本。它可能会使用您尚未了解的语言功能,例如try: ... except:。我本着善意的态度发帖,作为一个可以借鉴的例子,所以不要将其作为你自己的工作而不加修改!

#! /usr/bin/env python

def get_input():
    while True:
        data = input("Please enter a number between 1 and 999: ")
        if data == '' or data == '0':
            return None
        try:
            num = int(data)
            if 1 <= num <= 999:
                return num
        except ValueError:
            pass
        print("Error. Please try again:\n")


def main():
    list1 = []
    list2 = []
    list3 = []
    while True:
        num = get_input()
        if num == None:
            break

        if num < 10:
            list1.append(num)
        elif num < 100:
            list2.append(num)
        else:
            list3.append(num)

    print(list1)
    print(list2)
    print(list3)

if __name__ == '__main__':
    main()  

答案 2 :(得分:0)

到目前为止用户工作得很好user4308519。请不要尝试提交PM上面的试试回答。继续你到目前为止所做的事情。

回答有关错误的初步问题

invalid literal for int() with base 10: ''

我猜你的代码似乎一直有效,直到你输入&#39; null&#39;?您收到此错误的原因是,在您的验证函数中,您尝试将null与1进行比较。

null是一个布尔类型,而1是一个int类型,所以python不能进行比较。

您需要检查null first (在验证函数中),以确保在尝试比较之前有实际数字。 (虽然PM对于字符超出此作业的范围是正确的 - 字母会导致错误)。

保持良好的工作!