显示 python 列表中的素数。说出不受支持的操作数时出错
Display prime numbers from a list in python. Error saying unsupported operands
我正在尝试创建一个程序,从用户那里获取一个整数,然后创建一个从 1 开始到用户输入的整数的整数列表。例如,如果用户输入“8”,则会创建一个列表 [2, 3, 4, 5, 6, 7, 8]。之后,我希望它遍历列表中的每个整数并仅显示用户输入(或包括)用户输入的质数。
def main():
#get user input of integer
user_integer = int(input('Please enter an integer greater than 1: '))
#call function that creates list of numbers up to user input
integer_list = create_list(user_integer)
#call function that returns prime numbers
prime_numbers = prime_number(integer_list)
#display prime numbers
print('The prime numbers up to the integer you entered are:', prime_numbers)
def create_list(x):
integer_list = []
numbers = 2
while numbers != x:
integer_list.append(numbers)
numbers += 1
return integer_list
def is_prime_number(num):
for i in range(2,num):
if num%i==0:
return False
else:
return True
def prime_number(x):
prime_numbers = []
for i in (x):
if is_prime_number(i):
prime_numbers.append(i)
return (prime_numbers)
main()
编辑:我编辑了代码以包含一个函数,该函数单独测试每个数字是否为质数。但是,它似乎只返回奇数而不是质数。例如,如果我输入“13”,它 returns 列表 [3, 5, 7, 9, 11]。显然9不是质数。
我做错了什么?
问题是您正试图通过数字查找列表的剩余部分。这就是您收到错误的原因:% 是类型列表和 int 不支持的操作数。我建议打破逻辑以确定数字是否为素数,然后在您的 for 循环中调用该方法。如果它 returns 为真,则将其添加到质数列表中。
def is_prime_number(num):
for i in range(2, num):
if num % i == 0:
return False
return True
def prime_number(x):
prime_numbers = []
for i in (x):
if is_prime_number(x):
prime_numbers.append(i)
return prime_numbers
您不需要在列表周围加上括号,并且由于您没有使用合数列表,因此您不需要跟踪它。将逻辑拉入其自身的功能有助于使代码更清晰、更易于查看。也可以随意对质数函数进行优化
我认为您的代码可以通过消除模计算来改进,并且 looping.It 也最好使用一种久经考验的算法来生成素数,称为 Sieve of Eratosthenes
def main():
user_integer = int(input('Please enter an integer greater than 1: '))
integer_list = list(range(2,user_integer))
prime_numbers = prime_number(integer_list)
#display prime numbers
print('The prime numbers up to the integer you entered are:', prime_numbers)
def prime_number(nums):
highest = nums[-1] + 1
sieve = [True] * (highest)
sieve[0:1] = [False, False]
for i in range(2, highest):
if sieve[i]:
for j in range(2 * i,highest,i):
sieve[j] = False
primes = []
for i in range(2, highest):
if sieve[i]:
primes.append(i)
return primes
if __name__ == "__main__":
main()
我正在尝试创建一个程序,从用户那里获取一个整数,然后创建一个从 1 开始到用户输入的整数的整数列表。例如,如果用户输入“8”,则会创建一个列表 [2, 3, 4, 5, 6, 7, 8]。之后,我希望它遍历列表中的每个整数并仅显示用户输入(或包括)用户输入的质数。
def main():
#get user input of integer
user_integer = int(input('Please enter an integer greater than 1: '))
#call function that creates list of numbers up to user input
integer_list = create_list(user_integer)
#call function that returns prime numbers
prime_numbers = prime_number(integer_list)
#display prime numbers
print('The prime numbers up to the integer you entered are:', prime_numbers)
def create_list(x):
integer_list = []
numbers = 2
while numbers != x:
integer_list.append(numbers)
numbers += 1
return integer_list
def is_prime_number(num):
for i in range(2,num):
if num%i==0:
return False
else:
return True
def prime_number(x):
prime_numbers = []
for i in (x):
if is_prime_number(i):
prime_numbers.append(i)
return (prime_numbers)
main()
编辑:我编辑了代码以包含一个函数,该函数单独测试每个数字是否为质数。但是,它似乎只返回奇数而不是质数。例如,如果我输入“13”,它 returns 列表 [3, 5, 7, 9, 11]。显然9不是质数。
我做错了什么?
问题是您正试图通过数字查找列表的剩余部分。这就是您收到错误的原因:% 是类型列表和 int 不支持的操作数。我建议打破逻辑以确定数字是否为素数,然后在您的 for 循环中调用该方法。如果它 returns 为真,则将其添加到质数列表中。
def is_prime_number(num):
for i in range(2, num):
if num % i == 0:
return False
return True
def prime_number(x):
prime_numbers = []
for i in (x):
if is_prime_number(x):
prime_numbers.append(i)
return prime_numbers
您不需要在列表周围加上括号,并且由于您没有使用合数列表,因此您不需要跟踪它。将逻辑拉入其自身的功能有助于使代码更清晰、更易于查看。也可以随意对质数函数进行优化
我认为您的代码可以通过消除模计算来改进,并且 looping.It 也最好使用一种久经考验的算法来生成素数,称为 Sieve of Eratosthenes
def main():
user_integer = int(input('Please enter an integer greater than 1: '))
integer_list = list(range(2,user_integer))
prime_numbers = prime_number(integer_list)
#display prime numbers
print('The prime numbers up to the integer you entered are:', prime_numbers)
def prime_number(nums):
highest = nums[-1] + 1
sieve = [True] * (highest)
sieve[0:1] = [False, False]
for i in range(2, highest):
if sieve[i]:
for j in range(2 * i,highest,i):
sieve[j] = False
primes = []
for i in range(2, highest):
if sieve[i]:
primes.append(i)
return primes
if __name__ == "__main__":
main()