geeksforgeeks上的python简单基本程序

时间:2016-09-30 05:38:32

标签: python

任何人都可以帮我解决这个问题吗?

给定数字N,打印小于或等于N的所有复合数。该数字应按升序打印。

输入: 第一行包含表示测试用例数的整数T.然后是T测试案例。每个测试用例由一个整数N组成。

输出: 将所有复合数字形式0打印到N。

约束:

1 ≤ T ≤ 50
4 ≤ N ≤ 10000

Example:
Input:
2
10
6
Output:
4 6 8 9 10
4 6

我的解决方案如下:

def comp(n):
    for i in range (4,n+1):
        for j in range(2,i):
            if i % j == 0 :
                print(i)
                break

t = int(input(""))

while(t >=1 & t <= 50):
        for k in range(0,t):
            p = int(input(""))
            if(p >=4 & p <= 10000):
                comp(p)

但在EOFError

上提供p = int(input(""))

3 个答案:

答案 0 :(得分:0)

当您提供的输入值低于要求时,会发生此错误。您的程序期望输入比您实际提供的更多。

如果您使用管道将数据发送到脚本的stdin,请确保每个输入都以换行符发送,如下所示。

gem uninstall bundler
gem install bundler -v 1.11.2

答案 1 :(得分:0)

这里的罪魁祸首是while循环,而不是if。因为t是一个常量值,while循环将永远不会结束,因此p = int(input(""))将执行超过所需时间的执行。因此,EOFError上的p = int(input(""))

答案 2 :(得分:-2)

使用递归的简单解决方案。

def check_prime(n):
    for i in range(2,int(math.sqrt(n))+1):
        if(n%i==0):
            return 0
    return 1

def print_composite(n):
    if(n<5):
        print(n),
        return
    print_composite(n-1)
    if(check_prime(n)==0):
        print(n),
        return

我终端的示例输出

>>> print_composite(10)
4 6 8 9 10
>>> print_composite(6)
4 6
>>> print_composite(16)
4 6 8 9 10 12 14 15 16