首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找质数(缺少3!)

查找质数(缺少3!)
EN

Stack Overflow用户
提问于 2019-02-12 01:21:53
回答 1查看 59关注 0票数 0

我想出了这个解决方案来计算用户定义的骰子侧面质数的概率。但出于某种原因,它不喜欢只包含数字3。有人能告诉我为什么它讨厌3号吗?

输出如下:[2, 5, 7, 11, 13, 17, 19, 23] --> Missing 3!

代码语言:javascript
复制
def cal_probability (event, sample_space):
    return len(event)/ len(sample_space)

def cal_prime_numbers (s_space):
    count = 0
    prime_nums = []
    for num in s_space:
        for i in s_space:
            if num % i == 0:
                count += 1
            else:
                continue
        if count == 2:
            prime_nums.append (num)
        else:
            count = 0
            continue
    return prime_nums

if __name__ == '__main__':
    sides = input ('Enter the number of sides: ')
    sample_space = list (range (1, int(sides)+1))
    print (sample_space)
    event = cal_prime_numbers (sample_space)
    print (event)
    p = cal_probability (event, sample_space)
    print ('The probabilty of prime numbers to happen in {0} sides die is: {1}%'.format (sides, p*100))

然而,我期望:[2, 3, 5, 7, 11, 13, 17, 19, 23]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-12 01:27:39

当你找到一个素数时,你不能在这里重置计数:

代码语言:javascript
复制
if count == 2:
    prime_nums.append (num)
else:
    count = 0
    continue

这意味着你不能在一行中找到两个素数。这个杠杆会影响3,因为2是唯一的质数。无论你是否找到一个素数来修复它,只要将count设置回0即可。您可以删除else,并且不需要continue

代码语言:javascript
复制
if count == 2:
    prime_nums.append (num)
count = 0

您也不需要在内部for循环中使用elsecontinue,因为它与正常的循环行为没有任何不同:

代码语言:javascript
复制
def cal_prime_numbers (s_space):
    count = 0
    prime_nums = []
    for num in s_space:        
        for i in s_space:    
            if num % i == 0:
                count += 1
        if count == 2:
            prime_nums.append (num)
        count = 0
    return prime_nums
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54635882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档