我写了这个程序来检查天气。是否为质数,但它显示数字为质数倍。我该怎么解决
要检查天气数字是否是素数。
num = int(input("please enter the number you want to check\n"))
if num > 1:
for i in range(2, num):
if (num % i) == 0:
print("the number is not prime")
print(str(i) + " times " + str(num//i) + " is "+ str(num))
break
else:
print("the number is prime")
elif(num == 1):
print("the number is not prime")
else:
print('enter a positive value')
答案 0 :(得分:1)
您的问题是for循环的else
部分是错误的。每次除法检查失败时,您都打印"the number is prime"
,而不仅仅是在结束时打印。
我添加了一个isPrime
布尔值,用于跟踪单项检查是否失败。仅当其中没有一个失败时,您才能打印该数字为素数。
num = int(input("please enter the number you want to check\n"))
if num > 1:
isPrime = True
for i in range(2, num):
if (num % i) == 0:
print("the number is not prime")
print(str(i) + " times " + str(num//i) + " is "+ str(num))
isPrime = False
break
if isPrime:
print("the number is prime")
elif(num == 1):
print("the number is not prime")
else:
print('enter a positive value')
您可以使用名为for-else的python结构(归功于@TheGamer007)来进一步简化该操作:
num = int(input("please enter the number you want to check\n"))
if num > 1:
for i in range(2, num):
if (num % i) == 0:
print("the number is not prime")
print(str(i) + " times " + str(num//i) + " is "+ str(num))
break
else:
print("the number is prime")
elif(num == 1):
print("the number is not prime")
else:
print('enter a positive value')
它之所以有效,是因为Python的for
循环可以跟随else:
,只有在您不要 break
退出循环时才会触发。 / p>
这可能正是您要尝试执行的操作。在那种情况下,您做错的只是缩进。
而且,从算法的角度来看,还有很多更好的检查方法。第一个简单的改进就是您不需要检查range(2,num)
,而只需检查range(2, int(math.sqrt(num))+1)
答案 1 :(得分:1)
这是我的代码,用于检查数字是否为质数,希望对您有所帮助
# Program to Check whether given number is prime
def isPrime(number):
limit = int(number/2) # limit indicates how many times we need to run the loop
flag=0 # to keep track whether the number is prime or not
if number==0 or number==1:
print(f"The Given Number {number} is Not Prime")
return
for i in range(2,limit+1):
if number%i==0:
flag=1
break
if flag==0:
print(f"The Given Number {number} is Prime")
else:
print(f"The Given Number {number} is Not Prime")
isPrime(1)
答案 2 :(得分:0)
使用变量,例如标志,并将其初始化为0。如果数字不是素数,即i%2 == 0,则将标志设置为1并中断,否则标志= 0。
之后,从for块中出来,并在if条件显示的帮助下,数字是否为质数。也就是说,如果flag == 0,则数字是质数,否则不是。
答案 3 :(得分:0)
要确定一个数字是否为质数,您需要做的就是找到1个大于或等于2的数字以除以该数字。
在循环中,对于每个不除给定数字的数字,打印出一条消息,指出“数字是素数” 。
例如,如果要检查数字9是否为质数,则将所有数字从2循环到8,并检查它们是否可以除以9。因此在for循环中,例如数字5-> 9%5!= 0->出现“数字为素数”消息,这是错误的。
下面的代码显示了当数字不是素数时,如何使用布尔值升起一个标志。
num = int(input("please enter the number you want to check\n"))
isPrime = True
while num < 1:
int(input("enter a positive value\n"))
if num == 1:
print("the number is not prime")
return
for i in range(2, num):
if (num % i) == 0:
isPrime = False
break
print(str(num) + " is prime? " + str(isPrime))
答案 4 :(得分:0)
我建议以下实施方式
我们只需要检查/循环计算数字的平方根,而不是数字本身,因此速度更快。
for-else结构使您摆脱了原本需要的function getaddress($lat, $lng) {
$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' . trim($lat) . ',' . trim($lng) . '&sensor=false';
$json = @file_get_contents($url);
$data = json_decode($json);
$status = $data->status;
if ($status == "OK")
return $data->results[0]->formatted_address;
else
return false;
}
标志。这种工作方式是,如果循环正常结束而不中断(表示您尚未找到所需内容),它将进入isPrime
else
答案 5 :(得分:0)
一种方法:
def is_prime(n):
count = 0
if x > 1:
for i in range(1, n + 1):
if x % i == 0:
count += 1
return count == 2
number = int(input("Insert a number: "))
if is_prime(number):
print(str(number) + " is a prime number")
else:
print(str(number) + " is not a prime number!")
is_prime(7) # >> 返回真
工作原理:
质数 (n) 必须满足以下规则:
从 1 到 n 迭代执行取模运算。增加变量 count 每次结果都是 0。如果输入满足上面的第二个条件,那么 count 应该等于 2。如果 count 等于 2,那么这个数字就是素数。
例如:
is_prime(7): 7 % 1 = 0 (count += 1), 7 % 2 = 1, 7 % 3 = 1, 7 % 4 = 3, 7 % 5 = 2, 7 % 6 = 1, 7 % 7 = 0(计数 += 1); >> 7 是质数