Python 函数仅返回列表的第一个输入,而不在输入中继续,超出了范围

Python 函数仅返回列表的第一个输入,而不在输入中继续,超出了范围,python,python-3.x,list,Python,Python 3.x,List,我对编码非常陌生(大约在中的3周内),我正在编写一个代码,要求用户输入一个介于0和100之间的数字,然后将该数字添加到列表中。一旦列表长度达到10个数字,它就应该打印列表。我正在使用一个函数来解决这个问题 我可以把它打印出来,但它只打印输入的第一个数字。例如,如果我输入5,它仍然会要求输入其他数字,但它会将列表打印为[5,5,5,5,5,5,5]。此外,如果我输入的数字超出了0-100的范围,它会要求您输入一个不同的数字,但随后它会停止并将列表打印为“无” 下面是我的代码: def getUse

我对编码非常陌生(大约在中的3周内),我正在编写一个代码,要求用户输入一个介于0和100之间的数字,然后将该数字添加到列表中。一旦列表长度达到10个数字,它就应该打印列表。我正在使用一个函数来解决这个问题

我可以把它打印出来,但它只打印输入的第一个数字。例如,如果我输入5,它仍然会要求输入其他数字,但它会将列表打印为[5,5,5,5,5,5,5]。此外,如果我输入的数字超出了0-100的范围,它会要求您输入一个不同的数字,但随后它会停止并将列表打印为“无”

下面是我的代码:

def getUser(n):
    mylist = []
    while 0 < n < 100:
        mylist.append(n)
        int(input("Please enter a number between 0 and 100: "))
        if len(mylist) == 10:
            return(mylist)
    else:
        int(input("This number is not in the range of 0-100, please input a different number: "))
    
    
n = int(input("Please enter a number between 0 and 100: "))
print("The numbers you have entered are: ", getUser(n))
def getUser(n):
mylist=[]
当0

我猜这与while/else循环有关,但正如我所说的,我对这是一个新手,它让我感觉非常难以承受,尝试谷歌搜索这一切似乎带来了我不理解的超级复杂的事情!!谢谢

这就是你做错的地方

def getUser(n):
    mylist = []
    while 0 < n < 100:
        mylist.append(n)
        n = int(input("Please enter a number between 0 and 100: "))
        if len(mylist) == 10:
            return(mylist)
    else:
        int(input("This number is not in the range of 0-100, please input a different number: "))
    
    
n = int(input("Please enter a number between 0 and 100: "))
print("The numbers you have entered are: ", getUser(n))
def getUser(n):
mylist=[]
当0
您注意到编辑的代码有什么不同吗

您从未重新分配变量
n
因此,每次只需添加传递给
getUser
的任何值(每次都是相同的值)

如果你陷入困境,不要害怕寻求帮助

附言。
您还可以将一条线移动到其他地方,以便在您能够接受挑战的情况下使其表现得更好;)

首先:为什么你会得到[5,5,5,5,5,5,5,5,5]:

int(input("Please enter a number between 0 and 100: "))
您应该先将此项交给n:

n=int(input("Please enter a number between 0 and 100: "))
然后,它退出循环,因为您进入
else
,然后在
时不返回
。然后您的函数结束,没有返回
return
,因此
none

老实说,我不明白如果你给出的数字超出了范围,为什么你的代码会超出
循环,因为这个值不是给n的。如果有人能在评论中解释,那就太好了

我会这样做:

def getUser():
mylist=[]
而len(mylist)<10:
n=int(输入(“请输入一个介于0和100之间的数字:”)
如果(0
然后,系统会询问您从0到100(不包括在内)的数字,直到您得到10的大小。

def getUser(n):
def getUser(n):
mylist = []
t = True
while t:
    n =int(input("Please enter a number between 0 and 100: "))
    if n >0 and n<=100:
        mylist.append(n)
    if len(mylist) == 10:
        return(mylist)
        t = False
    elif n < 0  or n >100:
        print('This number is not in the range of 0-100, please input a different number:')
    
        
mylist=[] t=真 而t: n=int(输入(“请输入一个介于0和100之间的数字:”) 如果n>0和n100: 打印('此数字不在0-100范围内,请输入其他数字:')
好的,您尝试在
时使用
,而不是
如果
。
以下是我将要做的-我将很快解释:

def get_user():
mylist=[]
对于范围(5)中的i:
n=int(输入(“请输入一个介于0和100之间的数字:”)

如果n为什么在while循环中再次请求输入,而不在任何变量中使用该输入/捕获?根据
else:
输入中的文本,可能还应该指出
else:
案例会导致整个函数结束,这可能不是预期的结果。整个
while
循环可能应该由
if
替换,该if
封装在
while True:
中。是的!解决OP问题的一种方法是,您可以将
mylist
设置为具有默认值的参数,只需删除一行:)使用默认参数存在很大的缺陷,我必须警告您。在python中,强烈反对使用除
None
之外的默认参数。真的吗?除了None之外,我不想使用任何默认参数,但是您介意将我链接到一个更详细的资源吗?啊,我想这是因为这种行为
x=[];y=x;y、 附加(“测试”);打印(x);>['test']
如果我理解正确,当您创建分配给现有列表变量的列表变量时,它们都引用内存中相同的对象/地址,因此它们都共享相同的值。我相信您会这样做,以创建一个实际的列表副本,其中包含各自独立的内存空间
x=[1,2,3];y=x[:];y、 追加(4);print(x)
iirc应该可以创建一个应该可以工作的copy,但是您不需要任何参数,并且t=False是无用的,因为您已经返回了。我真的不喜欢在循环过程中返回,但这完全是个人的。为什么要递减n?这对我们来说是一种误导OP@JackofSpades我打错了。我的意思是
I=I-1
。我同意
n=n-1
毫无意义。我已经为范围(10)内的I更新了答案
:如果I==7,则打印(I):I=I-1
尝试在解释器中运行该代码。更改
i
的值不会影响for循环的行为。此代码对OP有误导性。其原因是
i
被重新分配到下一次迭代o
else:
    i = i - 1