简体   繁体   中英

How to make it run through my whole range?

def isprimelike(n):
    for a in range(2,n-1):
        if pow(a,n,n) == a%n:
            return True
        else:
            return False

When I check n for a given value it just check 2 , then decides if it is true or false and doesn't check the rest of the range. Not sure how to make it check the rest of the range.

That's because you're using a return inside the if-else block. You might want to change the return statement by a print one indicating if it is a prime number or not.

If you want it to return True if all are prime-like or False if at least one is not, then do the following:

def isprimelike(n):
    for a in range(2,n-1):
        if pow(a,n,n) != a%n:
            print('One element is false')
            return False
    return True

The print statement is just to show something, but it's not relevant.

I would try making a list and allow your for loop to append the results of the range into the list then return the list as a whole so you can have access to all the results.

edit: Complely missed the point of your question. Here's the edit.

import sys
def isprimelike(n):
    resultlist = []
    for a in range(2,int(n)-1):
        if pow(a,int(n),int(n)) == a%int(n):
            result.append(True)
        else:
            result.append(False)
    return resultlist

n = sys.argv[1]
resultlist = isprimelike(n)
if True in resultlist:
    if False in resultlist:
        print('List contains both True and False')
        sys.exit(1)
    else:
        print('List is all True')
        sys.exit(1)
if False in resultlist:
    if True in resultlist:
        print('List contains both True and False')
    else:
        print('List is all False')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM