I code a program to solve puzzle but i can't make it more dynamic. - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: I code a program to solve puzzle but i can't make it more dynamic. (/thread-25952.html) |
I code a program to solve puzzle but i can't make it more dynamic. - Shahmadhur13 - Apr-16-2020 # find the first number that is divided by 1 to 9 with 0 remainder for i in range (10000): x = i % 3 y = i % 4 z = i % 7 a = i % 5 b = i % 6 c = i % 8 d = i % 9 if x==y==z==a==b==c==d==0: print (i)As it mention, i wanted to find numbers which are divided by 1 to 9 numbers with 0 remainders. I tried to make it dynamic like instead of 1 to 9 what if i search numbers which are divided by 1 to 20 numbers. I have already repeated lots of code line for 1 to 9 numbers and i don't want to do that for more numbers. I tried to make a list of 1 to 20 numbers and with loop tried to iterate but failed. Thanks in advance. RE: I code a program to solve puzzle but i can't make it more dynamic. - bowlofred - Apr-16-2020 Maybe run two loops: one for the number to check, one for the division test. max_check = 10000 dividends = [3, 4, 7, 5, 6, 8, 9] for n in range(1,max_check): for dividend in dividends: if n % dividend: break else: print(f"{n} is evenly divided by {dividends}") break else: print(f"No numbers found evenly divisible by {dividends} that are less than {max_check}") RE: I code a program to solve puzzle but i can't make it more dynamic. - deanhystad - Apr-16-2020 There is no reason to test every value. If the result must be divisible for all numbers 1 through 9, the number will be divisible by 9. There is no reason to test 17 or 33 or 121. def find_number(first, last): """Find first number that is divisible by all numbers in range first..last""" num = last while True: for divisor in range(first, last): if num % divisor != 0: # Failed test. Try next num num += last break # break out of for loop else: # Gets called if for loop reaches end print(num) break; # Break out of while loop find_number(5, 13) RE: I code a program to solve puzzle but i can't make it more dynamic. - Shahmadhur13 - Apr-16-2020 Great! Thank you so much. The second nested 'for' loop with 'else' was the key that i missed. And of course learned that i should use 0 as a boolean even i was working with arithmetic. It optimized code so well. Thank you RE: I code a program to solve puzzle but i can't make it more dynamic. - buran - Apr-17-2020 you can use any() for number in range (1, 10000): if not any(number % divisor for divisor in range(3, 10)): print(number) break # break out of loop early else: print('no such number found')note that probably you need to find more elegant (from math perspective) solution, not trying to brute-force it RE: I code a program to solve puzzle but i can't make it more dynamic. - Shahmadhur13 - Apr-18-2020 Wow! TIL any() function. Thank you so much. |