我知道有很多这方面的主题,我讨厌创建一个新主题,但没有一个主题似乎完全正确,除非它以更高级的方式做某事。我是编程类的介绍,并希望(需要?)使用我们在第一周学到的简单命令来做到这一点,而且我也希望拥有“我自己的”代码,而不仅仅是阻止某些东西离开互联网。
我正在处理两个极其基本的脚本(.py文件)。一个请求一个数字并打印出它是否是一个素数,另一个打印出所有素数直到第1000个素数(我们知道它是7919,因为我们得到了一个素数列表的链接检查我们的工作。)
我的第一个剧本:
yourNumber= input('Enter a number: ')
isPrime = 0
if yourNumber == 1:
isPrime = 1
print(yourNumber,'is not a prime number')
else :
for primeCheck in range (int(2), int(yourNumber)):
if int(yourNumber)%int(primeCheck) == 0:
isPrime = 1
break
else:
isPrime = 0
if isPrime == 0:
print(yourNumber,'is a prime number')
else:
print(yourNumber,'is not a prime number')
这个似乎适用于除0和1之外的任何数字。我不知道我做错了什么。
我的第二个剧本:
numberPrimes = 0
startNumber = 0
currentNumber = startNumber
isPrime = 0
while numberPrimes < 1000:
if currentNumber == 1:
currentNumber = currentNumber + 1
else:
for primeCheck in range (int(2), int(currentNumber)):
if int(currentNumber)%primeCheck == 0:
isPrime = 1
break
else:
isPrime = 0
if isPrime == 0:
print(currentNumber, 'is prime')
numberPrimes = numberPrimes + 1
currentNumber == currentNumber + 1
else:
currentNumber == currentNumber + 1
这个基本上吐出了“0是素数”一千次。不知怎的,currentNumber没有上升或者什么。我不确定。
答案 0 :(得分:2)
在以下两行中,从您的示例中,考虑=
和==
之间的差异。
numberPrimes = numberPrimes + 1
currentNumber == currentNumber + 1
这些行中的每一行都有所作为,但它们并没有做同样的事情。使用到目前为止学到的东西,确定它是什么。
答案 1 :(得分:1)
第一个程序
yourNumber= input('Enter a number: ')
isPrime = 0
if yourNumber == 1:
isPrime = 1
print(yourNumber,'is not a prime number')
else :
for primeCheck in range (int(2), int(yourNumber)):
if int(yourNumber)%int(primeCheck) == 0:
isPrime = 1
break
else:
isPrime = 0
if isPrime == 0:
print(yourNumber,'is a prime number')
else:
print(yourNumber,'is not a prime number')
<强>建议:强>
int(2), int(yourNumber), int(primeCheck)
您不需要每次转换yourNumber
(input
将自动执行此功能),primeCheck
和2
至int
if yourNumber == 1:
如果您想要消除0
,if yourNumber == 0 or yourNumber == 1
第二个程序
numberPrimes = 0
startNumber = 0
currentNumber = startNumber
isPrime = 0
while numberPrimes < 1000:
if currentNumber == 1:
currentNumber = currentNumber + 1
else:
for primeCheck in range (int(2), int(currentNumber)):
if int(currentNumber)%primeCheck == 0:
isPrime = 1
break
else:
isPrime = 0
if isPrime == 0:
print(currentNumber, 'is prime')
numberPrimes = numberPrimes + 1
currentNumber == currentNumber + 1
else:
currentNumber == currentNumber + 1
<强>建议强>
currentNumber == currentNumber + 1
未将递增值分配回currentNumber
,但它正在进行比较。因此,实际执行此操作的方法是currentNumber = currentNumber + 1
答案 2 :(得分:0)
<强>算法逐强>
0和1是特殊情况。它们既不是素数也不是复合物。像数学家一样做并避免它们。从2开始currentNumber
,让你的程序像这样工作。
<强>错误逐强>
==
表示“比较”。如果给定行上的唯一内容是(something) == (something else)
,则该行通常不执行任何操作。
<强>程序逐强>
你是新人,所以这是有帮助的。当你谈论应该是True或False(布尔值)的事情时,请使用Python关键字True
和False
而不是1和0.它使您的程序更清晰。
考虑一下这个程序中的数据类型;你在int()
一直都在使用int
函数。如果您确定它是int
,请不要施放它,如果您不确定,请在设置之前投射它。
考虑您在第一个程序中处理的特殊情况。首先测试输入是否为1,如果不是,则进行车轮分解(好)。如果删除第一个测试会发生什么?由于2大于1,range
将返回一个空集。