我是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: ''
答案 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对于字符超出此作业的范围是正确的 - 字母会导致错误)。
保持良好的工作!