Write a Python function squareprime(l) - python-3.x
Write a Python function squareprime(l) that takes a non-empty list of integers and returns True if the elements of l alternate between perfect squares and prime numbers, and returns False otherwise. Note that the alternating sequence of squares and primes may begin with a square or with a prime.
Here are some examples to show how your function should work.
>>> primesquare([4])
True
>>> primesquare([4,5,16,101,64])
True
>>> primesquare([5,16,101,36,27])
False
Function prime_checker checks if a number is prime or not.
Function is_square checks if a number is prefect_square or not.
If the number at index 0 is square, then the chain is like [square, prime, square...]
else the sequence goes like [prime, square, prime, square..]
If the input sequence is not either of the two, then it is not a valid sequence and it will return False.
import math
def prime_checker(num):
flag = True
if num == 2:
return True
elif num < 2:
return False
else:
for i in range(2, int(num/2)):
if num % i == 0:
flag = False
break
return flag
def is_square(integer):
if integer == 0:
return false
root = math.sqrt(integer)
if int(root + 0.5) ** 2 == integer:
return True
return False`
def primesquare(list_nums):
if len(list_nums) == 0:
return False
if len(list_nums) == 1:
if (is_square(list_nums[0]) or prime_checker(list_nums[0])):
return True
else:
return False
else:
flag = True
if is_square(list_nums[0]):
check_for = 'prime'
elif prime_checker(list_nums[0]):
check_for = 'square'
else:
return False
for i in range(1,len(list_nums)):
if (check_for == 'prime' and prime_checker(list_nums[i])):
check_for = 'square'
elif (check_for == 'square' and is_square(list_nums[i])):
check_for = 'prime'
else:
flag = False
break
if flag:
return True
else:
return False
Update:
As the element at the 0th index has already been checked, we are not concerned about that number anymore. Hence, if the 0th element is a prime number, then the sequence will be [prime, square, prime, square,...].
If it is a perfect square, then the sequence will be [square, prime, square, prime...].
If it is neither of the two, then it is not a valid sequence and hence, false is returned.
Now, if the first number was either of the two, and the length of the list is greater than 1, then we will iterate over the remaining elements and check if they are similar to what we expected, but changing the value of check_for variable.
If the value of check_for is prime and the value that we encountered is also prime, then we know that the next number of the sequence should be a square number for the sequence to be a valid sequence. The similar thing happens when a square number is encountered.
from math import sqrt
def square(n):
if(sqrt(n) % 1 == 0):
return True
else:
return False
def isprime(n):
for i in range(2,int(n**0.5)+1):
if n%i==0:
return False
return True
def primesquare(list_nums):
if len(list_nums) == 0:
return False
if len(list_nums) == 1:
if (square(list_nums[0]) or isprime(list_nums[0])):
return True
else:
return False
else:
flag = True
if square(list_nums[0]):
check_for = 'prime'
elif isprime(list_nums[0]):
check_for = 'square'
else:
return False
for i in range(1,len(list_nums)):
if (check_for == 'prime' and isprime(list_nums[i])):
check_for = 'square'
elif (check_for == 'square' and square(list_nums[i])):
check_for = 'prime'
else:
flag = False
break
if flag:
return True
else:
return False
from math import sqrt
def isprime(n):
for i in range(2,int(n**0.5)+1):
if n%i==0:
return False
return True
def primesquare(l):
flag=0
if len(l)==1:
n=l[0]
if(sqrt(n)%1==0):
return True
else:
for i in range(0,len(l)):
if(sqrt(l[i])%1==0):
if(i==0):
if(isprime(l[i+1])==True):
flag=1
else:
if(isprime(l[i-1])==True):
if(isprime[i+1]==True):
flag=1
else:
flag=0
else:
flag=0
if(flag==0):
return False
else:
return True
from math import sqrt
def square(n):
if(sqrt(n) % 1 == 0):
return True
else:
return False
def isprime(n):
if (n == 1):
return(False)
for i in range(2,int(n**0.5)+1):
if n%i==0:
return False
return True
def squareprime(l):
s=l[0]
if(isprime(s)):
for i in range(0,len(l),2):
if(isprime(l[i])==False):
return False
for i in range(1,len(l),2):
if(square(l[i])==False):
return False
return True
elif(square(s)):
for i in range(0,len(l),2):
if(square(l[i])==False):
return False
for i in range(1,len(l),2):
if(isprime(l[i])==False):
return False
return True
else:
return False
Related
How to create a perfect number function using lists
My perfect number function is not working as intended :(. It prints false even though it should print true :( def perfect_check(number): z = [] for i in range(1, number): if number % i == 0: z.append(i) if sum(z) == number: return True else: return False print(perfect_check(6))
def perfect_check(number): z = [] for i in range(1, number): if number % i == 0: z.append(i) if sum(z) == number: return True else: return False print(perfect_check(6)) You have put the if-else statement inside your for loop. It should be outside the for loop. Then, your code will work correctly.
How to solve this hsl to rgb vise versa color conversion error in python?
yesterday I tried to made a simple library to convert HSL to RGB color space and vise-versa program in python. but when I tried to run everything seems normal but sometimes on some input they miss by the one digit difference. here is my code and result. import re # helper hsl functions hslString=r'^hsl\((\d+)\,(\d+)%\,(\d+)%\)$' hslaString=r'^hsla\((\d+)\,(\d+)%\,(\d+)%\,(0?\.?\d+)\)$' wrongHslaString=r'^hsl\((\d+)\,(\d+)%\,(\d+)%\,(0?\.?\d+)\)$' wrongHslString=r'^hsla\((\d+)\,(\d+)%\,(\d+)%\)$' def hasall(obj,*args): return False if False in [True if i in obj else False for i in args] else True def ishsl(*hsl): rl=len(hsl) if rl==1: arg=hsl[0] if isinstance(arg,dict): a=hasall(arg,'h','s','l','a') or hasall(arg,'h','s','l') return [*arg.values()] if a else False elif isinstance(arg,str): values=re.findall(hslaString,arg) or re.findall(hslString,arg) or re.findall(wrongHslaString,arg) or re.findall(wrongHslString,arg) return [float(v) for v in values[0]] if values else False elif isinstance(arg,(list,tuple)): return [*arg] if len(arg) in [3,4] else False elif rl in [3,4]: return [*hsl] return False def typehsl(*hsl): check=ishsl(*hsl) if check: return 'hsla' if len(check)==4 else 'hsl' else: return False # helper rgb functions rgbString=r'^rgb\(\s*?(\-?\d+)\s*?\,\s*?(\-?\d+)\s*?\,\s*?(\-?\d+)\s*?\)$' rgbaString=r'^rgba\(\s*(\-?\d+)\s*\,\s*(\-?\d+)\s*\,\s*(\-?\d+)\s*\,(\-?0?\.?\d+)\)$' wrongRgbaString=r'^rgba\(\s*(\-?\d+)\s*\,\s*(\-?\d+)\s*\,\s*(\-?\d+)\)$' wrongRgbString=r'^rgb\(\s*(\-?\d+)\s*\,\s*(\-?\d+)\s*\,\s*(\-?\d+)\s*\,(\-?0?\.?\d+)\)$' # sampleRgbString='rgb(150,150,252)' # compiled=re.compile(rgbString).findall(sampleRgbString) def hasall(obj,*args): """check if given object has all property name or not""" value=False for i in args: if obj.get(i): value=True else: value=False return value def getinorder(obj,*args): all=hasall(obj,*args) vals=[] if all: for i in args: vals.append(obj.get(i)) return vals def isrgb(*rgb): rl=len(rgb) if rl==1: arg=rgb[0] if isinstance(arg,dict): a=hasall(arg,'r','g','b','a') or hasall(arg,'r','g','b') values = getinorder(arg,'r','g','b','a') or getinorder(arg,'r','g','b') return [int(v) for v in values] if a else False elif isinstance(arg,str): values=re.findall(rgbaString,arg) or re.findall(rgbString,arg) or re.findall(wrongRgbaString,arg) or re.findall(wrongRgbString,arg) return [int(v) for v in values[0]] if values else False elif isinstance(arg,(list,tuple)): return [*arg] if len(arg) in [3,4] else False elif rl in [3,4]: return [*rgb] return False def typergb(*rgb): check=isrgb(*rgb) if check: rl=len(check) return 'rgba' if rl==4 else 'rgb' if rl==3 else False def RGB2HSL(*rgb): check=isrgb(*rgb) if check: h=s=l=0 tr=typergb(check) A=float(check.pop()) if tr=='rgba' else False check=[0 if v<0 else 255 if v>255 else v for v in check] r,g,b=[int(v)/255 for v in check] maxi,mini=max(r,g,b),min(r,g,b) l=(maxi+mini)/2 if maxi==mini: h=s=0 return [h,s,l,A] if tr=='rgba' else [h,s,l] else: s=(maxi-mini)/(1-abs(2*l-1)) if maxi==r: h=((g-b)/(maxi-mini))%6 if maxi==g: h=(b-r)/(maxi-mini)+2 if maxi==b: h=(r-g)/(maxi-mini)+4 h=cr(h*60) return [h,s,l,A] if tr=='rgba' else [h,s,l] else:return False def cr(n): from math import ceil,floor return floor(n) if (n-floor(n))<0.5 else ceil(n) def HSL2RGB(*hsl): check=ishsl(*hsl) if check: r=g=b=0 tl=typehsl(check) A=float(check.pop()) if len(check)==4 else False h,s,l=[v for v in check] s,l=s if s<=1 else s/100,l if l<=1 else l/100 c=(1-abs((2*l)-1))*s x=c*(1-abs((h/60)%2-1)) m=l-(c/2) if h>=0 and h<60: r,g,b=c,x,0 elif h>=60 and h<120: r,g,b=x,c,0 elif h>=120 and h<180: r,g,b=0,c,x elif h>=180 and h<240: r,g,b=0,x,c elif h>=240 and h<300: r,g,b=x,0,c elif h>=300 and h<360: r,g,b=c,0,x R,G,B=(r+m)*255,(g+m)*255,(b+m)*255 R,G,B=[cr(v) for v in [R,G,B]] return [R,G,B,A] if tl=='hsla' else [R,G,B] print(HSL2RGB(RGB2HSL(6,50,90))) I think the result should be [6,50,90] but it print [6,49,90]. Why? how can I solve this?
Exercise in python is returning None
I need to write a recursive function that receives a list and a target element and returns True if the element is in the list and False, otherwise. EXAMPLES: busca ([1,2,3], 2) -> returns True busca ([], 49) -> returns False I can't use Python's "x in list" command. I've developed code, but it returns None for some cases. For others, it works correctly. def busca(lista, alvo): if len(lista) == 0: return False if alvo == lista[0]: return True if len(lista) == 1: return False else: nova = lista[1:] busca(nova, alvo) # busca([3, 2, 1], 3)
Your function returns None when it ends in the following condition: else: nova = lista[1:] busca(nova, alvo) # even when this execution return True/False it's not returned by calling function Did you mean? else: nova = lista[1:] return busca(nova, alvo)
I don't understand why you return False when the length of the list is equal to 1. I mean 2 in [2] => True despite len([2]) => 1 and: busca([2], 2) => True This makes more sense to me: def busca(lst, tgt): if len(lst) !=0: if lst[0] == tgt: return True else: return busca(lst[1:], tgt) else: return False Can you explain?
Recursive palindrome check - having issues when recalling the function
The problem is simple, check if palindrome or not using recursion. They also provided a template so I can't change that. The template: def isPalindrome(s): # Wrapper function def isPalindromeRec(s,low,high): """ Recursive function which checks if substring s[low ... high] is palindrome returns a True/False value""" n = len(s) return isPalindromeRec(s,0,n-1) I am nearly there but I think I am having trouble understanding how recursion exactly works. (especially how the values changes in the recursion) My code: def isPalindrome(s): # Wrapper function def isPalindromeRec(s,low,high): if len(s)<=1: return True else: if s[0]==s[len(s)-1]: return isPalindromeRec(s[low+1:high],low+1,high-1) else: return False n = len(s) return isPalindromeRec(s,0,n-1) print(isPalindrome("anna")) print(isPalindrome("civic")) print(isPalindrome("a")) print(isPalindrome("tx1aa1xt")) print(isPalindrome("")) print(isPalindrome("Civic")) print(isPalindrome("ab")) this is the output: runfile('/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 7/Problem2.py', wdir='/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 7') True True True False True False False the first false should be True. Thank you for your help!
Rewrote it: def isPalindrome(s): def isPalindromeRec(s,low,high): if (low == high): return True if (s[low] != s[high]) : return False if (low < high + 1) : return isPalindromeRec(s, low + 1, high - 1); return True n = len(s) if (n == 0) : return True return isPalindromeRec(s, 0, n - 1); print(isPalindrome("anna")) print(isPalindrome("civic")) print(isPalindrome("a")) print(isPalindrome("tx1aa1xt")) print(isPalindrome("")) print(isPalindrome("Civic")) print(isPalindrome("ab")) output: True True True True True False False
Validation of Enter Fields
Interactively validating Entry widget content in tkinter the link above explains how to do validation. I am trying to do the same thing. But somehow i am not able to do it. It is a 10 digit string. The first two being alphabets, the next two numbers then again the next two will be alphabets and then the rest all numbers. for example MH02UH2012. Other question which i have is when i run this the print of S and i is coming for the first three inputs only after that there is no print. and sometimes it prints only the first entered variable. I am not able to understand what is the issue import tkinter tk=tkinter.Tk() def only_numeric_input(P,S,i): i = int(i) print (i, S) if S == " ": return False elif i < 2: if not S.isdigit(): return True elif i > 5: if S.isdigit(): return True else: return False elif i > 9: return False e1=tkinter.Entry(tk) e1.grid(row=0,column=0) c=tk.register(only_numeric_input) e1.configure(validate="key",validatecommand=(c,'%P', "%S", "%i")) tk.mainloop()
There are issues in the condition statements of the only_numeric_input function. Try the below only_numeric_input function instead. def only_numeric_input(P,S,i): i = int(i) print (i, S) if S == " ": return False if i < 2 or (i>3 and i<6): if S.isalpha() and S.isupper(): return True else: return False elif i<10: if S.isdigit(): return True else: return False elif i > 9: return False