Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 3 years ago.
Improve this question
For this function, I must find all the "Egyptian fractions" that add up to a fraction using a greedy algorithm. All Egyptian fractions have a numerator value of 1, they are distinct, and the sum = (numerator/denominator). I understand how to find one using division and math.ceil. However, the function never seems to resolve after I try with values for numerator and denominator. Is there a way to re-write my code using no division (i.e. no ceiling, division, or floor), just multiplication and subtraction? I can assume the numerator is always < denominator, and both are positive integers.
def egypt(numerator, denominator):
fracs = []
while numerator != 0:
n = int(numerator)
d = int(denominator)
c = math.ceil(d / n)
fracs.append(c)
n = (c*n) - d
d = c*d
return fracs
math.ceil is OK. The problem is that you reinitialize the cycle each time. Here is the fixed function:
def egypt(numerator, denominator):
fracs = []
n = int(numerator)
d = int(denominator)
while n != 0:
c = math.ceil(d / n)
fracs.append(c)
n = (c*n) - d
d = c*d
return fracs
Related
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
This is the code I came up with. It is not iterating after the second input, it's only printing after 3rd, why is it so?
smallest = None
while True:
num = input('Enter a number:')
if smallest is None:
smallest = num
continue
elif num < smallest:
smallest = num
print(smallest)
elif num == "done":
break
The problem with your code is that you are taking input.
input() function in python takes input as a string, so you need to typecast this. I am assuming you wanted to compare the integral values so for that, you should use instead int(input("YOUR MSSG")) or if you want to typecast to float then just replace int with float.
Scenarios where your code will show awkward behavior: -
-> Let's say that you want to compare 11 and 2, then if you consider this as an integer, obviously 11 > 2 but when you consider the same thing as a string and do a string comparison then you will see that "11" < "2". As the code in the question is taking the inputs as string and doing the string comparison that's why you are not getting the expected result.
The below code should work perfectly for you: -
smallest = None
while True:
num = int(input('Enter a number:'))
if smallest is None:
smallest = num
continue
elif num < smallest:
smallest = num
print(smallest)
elif num == "done":
break
You can modify the code as per your requirement.
As Brian said input returns a string, so you would have to pass elif int(num) < int(smallest): to allow it to compare the values as numbers.
If you do this however I would recommend moving elif num == "done": before that statement as int("done") will otherwise cause an error.
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
I am looking for a program that will find all the possible values of A and B, suppose they could be anywhere from -Infinity to +Infinity. Is there any way I could find all the possible values that A and B could be? Eg, I mean if A and B could be anywhere from 1 to 3:
A = 1, B = 1;
A = 2, B = 2;
A = 3, B = 3;
A = 1, B = 2;
A = 1, B = 3;
A = 2, B = 1;
A = 2, B = 3;
A = 3, B = 1;
A = 3, B = 2;
Can I do this in python, just with A and B having no limit other than being whole numbers?
Your help is appreciated.
Try this:
from itertools import permutations
low, high = 1, 3 # whatever numbers you want
all_possible_pairs = permutations([i for i in range(low, high, 1)], 2)
You can check out the itertools module here
If you're asking for all pairs from -inf to positive inf, then no, this is mathematically impossible - there is literally an infinite number of pairs.
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 2 years ago.
Improve this question
Doing some exercises from Think like a CS with Python 3:
Have a task:
Overload the necessary operator(s) that instead of having to write
if t1.after(t2):...
we can use the more convenient
if t1 > t2: ...
How I can do it? Have no ideas.
You need to override the t1.__gt__(t2) method of your class. I would suggest overriding all of the following __gt__ __lt__ __le__ __ge__ special functions.
For example
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
def __lt__(self,other):
self_mag = (self.x ** 2) + (self.y ** 2)
other_mag = (other.x ** 2) + (other.y ** 2)
return self_mag < other_mag
will allow you to write expressions like p1 < p2 but not p1 > p2. But it can be done trivially.
edit: turns out that simply overriding the __eq__ and __lt__ on top of using functools.#total_ordering gives the desired result.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 4 years ago.
Improve this question
I'm trying to create a function that receive as argument a number and return an array of 3 numbers max.
I have 3 tokens. 1 unit, 5 unit and 25 unit.
calculateUnit(4) should = [4,0,0]
calculateUnit(7) should = [2,1,0] (because 2 unit of 1 and 1 unit of 5 = 7)
calculateUnit(36) should = [1,2,1] (because 1 unit of 1, 2 unit of 5 and 1 unit of 25 = 36)
I have a basic code and I think I need to use modulo division, I already tried to search here and every other resources I have but I may not use the correct terms.
You can reduce your solution to:
def convertInToken(am):
return [am//25, (am%25)//5, am%5]
This leverages integer-division (3.x upwards, also named floor division) and modulo division.
Floor division returns the full integer that woud have been returned if you did a normal division and floored it.
Modulu division returns the "remainder" of a division.
I managed to do that, but thanks anyway :)
# your code goes here
import math
def convertInToken(am):
result = [];
#need to use 25
if am >= 25:
amount25 = math.floor((am/25))
amount5 = math.floor((am-(amount25*25))/5)
amount1 = math.floor(((am-(amount25*25)-(amount5*5))/1))
result = result+[amount1]
result = result+[amount5]
result = result+[amount25]
#need to use 5
elif am >= 5:
amount5 = math.floor((am/5))
amount1 = math.floor(((am-(amount5*5))/1))
result = result+[amount1]
result = result+[amount5]
result = result+[0]
#need to use 1
elif am < 5:
result = result+[am]
result = result+[0]
result = result+[0]
return result
print(convertInToken(4))
print(convertInToken(7))
print(convertInToken(12))
print(convertInToken(37))
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
A positive integer n is said to be perfect if the sum of the factors of n, other than n itself, add up to n. For instance 6 is perfect since the factors of 6 are {1,2,3,6} and 1+2+3=6. Likewise, 28 is perfect because the factors of 28 are {1,2,4,7,14,28} and 1+2+4+7+14=28.
Write a Python function perfect(n) that takes a positive integer argument and returns True if the integer is perfect, and False otherwise.
Here are some examples to show how your function should work.
perfect(6)
True
perfect(12)
False
perfect(28)
True
def perfect(x):
factor_sum = 0
for i in range(1, x-1):
if x % i == 0:
factor_sum = factor_sum + i
if(factor_sum == x):
return True
return False
print perfect(6) #Prints True
print perfect(12) #Prints False
print perfect(28) #Prints True