繁体   English   中英

带循环的短代码 function 和列表不起作用。如果您能提供帮助,我们将不胜感激。 (Python 的新功能)

[英]Short code with loop, function and list isn't working.Much appreciated if you help. (New at Python)

刚开始学习python,所以非常感谢能提供帮助的人。

无论如何,任务是定义一个 function,它接受一个数字列表并返回 3 个值——列表中有多少个正数、负数和零。

主程序我需要使用一个循环让用户输入他想要的任意数量的数字(必须在 3 到 6 之间,并且必须检查)。 用户输入的这些数字将被添加到列表中。 然后我必须调用一个使用列表作为参数的 function,然后打印 function 返回的结果。

使用循环是强制性的。

def three(z):
    np = 0
    nn = 0
    zeroes = 0
    
    for y in z:
        if x<0:
            nn+=1
        if x>0:
            np+=1
        if x==0:
            zeroes+=1
    
    print('there are ', np, ' positive numbers\nthere are ', nn, ' negative numbers\nthere are ', zeroes, ' zeros')
    
    return (np, nn, zeroes)

num_list = []

a = 0
n = eval(input('input a number (bigger than 3, smaller than 6): '))

while n>3 and n<6:
    if a < n:
        x = eval(input('input a number: '))
        num_list.append(x)
        a+= 1
    else:
        break
        
three(num_list)

我做了一个循环和一个 function,但我很确定我在循环或其他地方搞砸了,因为看起来我使用了很多变量,而且看起来比它应该的更复杂。

首先,您应该避免使用eval来获取用户输入的数值。 Ignatius Reilly 在评论中留下了一个很好的链接来解释原因。 相反,只需使用int(input(...))将字符串输入转换为 int。

其次,问题是您将x与零进行比较。 x未在您的 function 中定义,因此它在 function scope 之外查找,然后将您定义为x的内容拉到那里,这是来自x = eval(input(...))的最后一个用户输入。 因此,输入-1, 2, 0, 4的用户将返回 (4、0、0),因为它只是将 4 与 0 进行四次比较,而不是每次单独输入。 您在这里犯了一个简单的错误,应该在您的if语句中使用y

使用for-in-range循环执行代码 n 次。

使用int()将用户输入转换为 integer,而不是eval()

n = int(input("Input a number between 3 and 6: ")
if 3 <= n <= 6:
    nums = []
    for _ in range(n):
        x = int(input("Input a number: "))
        nums.append(x)
    print(three(list))
else:
    print("That's out of the range")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM