Coding exclusions in a for loop (python) [duplicate] - python

This question already has answers here:
Sieve of Eratosthenes in Python
(3 answers)
Closed 6 years ago.
i'm trying to figure out how to exclude certain numbers (numbers that aren't prime) in my program. For example, I don't want 15 to be printed so I used the modulo to exclude numbers divisible by 5 but that eliminates 5, which is a prime number. Any help on how to code this would be huge help! Thank you...
start = int(input("Start number: "))
end = int(input("End number: "))
while start < 0 or end < 0:
print ("Start and end number must be positive. Try again.")
start = int(input("Start number: "))
end = int(input("End number: "))
while start > end:
print ("End number must be greater than start number. Try again.")
for x in range (start, end):
is_prime = True
for x in range (start, end):
trial = x % 2
trial1 = x % 5
trial2 = x % 3
if trial != 0 and trial1 != 0 and trial2 != 0:
print (x, "is a prime number")
x = x + 1
else:
is_prime = False

You can create a list of numbers you want to use in your loop let's call it loop_list and then simply use for x in loop_list, that avoid you setting up exclusions

If you want to be sure that N is a prime number, you have to check for all number to squareroot(N) if N%number != 0.
Are you looking for optimisation? If no, you just need that.

You can try this prime number logic :-
def check_prime(num):
notPrimeFlag = 'N'
for i in range(2, num):
if num % i == 0:
notPrimeFlag = 'Y'
break
if notPrimeFlag == 'N':
print("Prime number")

Related

Write a python script to print all Prime numbers between two given numbers (both values inclusive)

Write a python script to print all Prime numbers between two given numbers (both values inclusive)
can anyone please tell what am I doing wrong here ?
a = int(input("Enter the value of a : "))
b = int(input("Enter the value of b : "))
for k in range(a,b):
for i in range(2,k):
if k%i!=0:
if k!=i:
continue
elif k==i:
print(k)
break
elif k!=i:
break
you are checking if a number is prime the wrong way there are many
unhandled cases in your code for example if a is larger than b
you will start looping from "a" anyway
and even if the values are sat up correctly the algorithm is not right
here is my optimal solution hope it will help
a = int(input("Enter the value of a : "))
b = int(input("Enter the value of b : "))
def is_prime(n):
# negative numbers cannot be primes 1 and 0 are also not primes
if n <= 1:
return False
# since 2 is the first prime we will start looping from it
# until n since you mentioned that n is included
for i in range(2, n + 1):
# if n is cleanly divisible by any number less than n
# that means that n is not prime
if n % i == 0 and n != i:
return False
return True
for k in range(a,b):
if a > b:
print ("a cannot be bigger than b")
if is_prime(k):
print(k)
Here's the solution. I added some comments to explain what the code does.
a = int(input("Enter the value of a : "))
b = int(input("Enter the value of b : "))
# Include b in the range by adding 1
for num in range(a, b + 1):
# Prime numbers are greater than 1
if num > 1:
for i in range(2, num):
# If the number is divisible, it is not prime
if num % i == 0:
# Check if the number is equal to the number itself
if num != i:
break
else:
# If the loop was not broken, the number isn't divisible
# by other numbers except itself and 1, so it's prime
print(num)
Well, a prime is "a number that is divisible only by itself and 1", so to actually first I would go only to range(2, k-1). This approach you have is one of the most straightforward ways of doing it, and is not computationally friendly. There are algorithms that specialize in this kind of prime number finding.
I have fixed the code, simplifying the expressions and adding like already mentioned +1 for inclusivity.
a = int(input("Enter the value of a : "))
b = int(input("Enter the value of b : "))
for k in range(a,b+1):
for i in range(2,k+1):
if k==i:
print(k)
elif k%i!=0:
continue
else: # is divisible and isn't 1 or the number
break
I encourage you to see this post, how they do it.
An other way of doing it would be:
#Check only 1 number at time:
def check_prime(check):
if check > 1:
for i in range(2, check):
if check % i == 0:
return False
return True
return False
#then check your numbers in a loop
list_prime = []
for i in range(50, 250):
if check_prime(i):
list_prime.append(i)
print(list_prime)
That way you can check 1 possible prime number at time.
If you need numbers in between just put it in loop.
Usually, when generating prime numbers utilizing some form of the "Sieve of Erotosthenes" algorithm, it is only necessary to check for denominator values up to the square root of the number being evaluated. With that in mind, here is one more possible take on your prime number loop test.
import math
a = int(input("Enter the value of a : "))
b = int(input("Enter the value of b : "))
for k in range(a,b):
if k == 2 or k == 3: # Pick up the prime numbers whose square root value is less than 2
print(k)
x = int(math.sqrt(k) + 1) # Need only check up to the square root of your test number
for i in range(2,x):
if k%i!=0:
if x-1 > i:
continue
else:
print(k)
else: # If the remainder is zero, this is not a prime number
break
Another version to try.

hailstone program in python

i have to write a hailstone program in python
you pick a number, if it's even then half it, and if it's odd then multiply it by 3 and add 1 to it. it says to continue this pattern until the number becomes 1.
the program will need methods for the following:
accepting user input
when printing the sequence, the program should loop until the number 1.
print a count for the number of times the loop had to run to make the sequence.
here's a sample run:
prompt (input)
Enter a positive integer (1-1000). To quit, enter -1: 20
20 10 5 16 8 4 2 1
The loop executed 8 times.
Enter a positive integer (1-1000). To quit, enter -1: 30
30 15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
The loop executed 19 times.
Enter a positive integer (1-1000). To quit, enter -1: -1
Thank you for playing Hailstone.
right now i have this:
count = 0
def hailstone(n):
if n > 0
print(n)
if n > 1:
if n % 2 == 0:
hailstone(n / 2)
else:
hailstone((n * 3) + 1)
count = count + 1
i don't know what to do after this
Try to think in a modular way, make two functions: check_number() and user_call(). Check_number will verify if the current number in the loop is odd or even and the user_call() just wraps it to count how many times the loop did iterate.
I found the exercise in a great book called Automate Boring Stuff with Python, you have to check it out, if you don't know it already.
Here's my code. Try to use what serves you the best.
from sys import exit
def check_number(number):
if number % 2 ==0:
print(number // 2)
return(number // 2)
else:
print(number*3+1)
return number*3+1
def user_call(number):
count = 0
while number != 1:
count += 1
number = check_number(number)
return count
if __name__ == "__main__":
try:
number = int(input('Give a number \n'))
count = user_call(number)
print('count ',count)
except Exception as e:
exit()
you can use global
visit https://www.programiz.com/python-programming/global-keyword to learn more
import sys
res = []
def hailstone(number):
global res
if number > 1:
if number % 2 == 0:
res.append( number // 2 )
hailstone(res[len(res)-1])
else:
res.append(number * 3 + 1)
hailstone(res[len(res)-1])
return res
number = int(input('Enter a positive integer. To quit, enter -1: '))
if number <= 0 or number == 0:
print('Thank you for playing Hailstone.')
sys.exit()
else:
answers = hailstone(number)
for answer in answers:
print(answer)
print('The loop executed {} times.'.format(len(answers) + 1))
I used recursion to solve the problem.
Heres my code:
Edit: All criteria met
count = 0
list_num = []
def input_check():
number = int(input("Enter a positive integer (1-1000). To quit, enter -1: "))
if number >= 1 and number <= 1000:
hailstone_game(number)
elif number == -1:
return
else:
print("Please type in a number between 1-1000")
input_check()
def hailstone_game(number):
global count
while number != 1:
count += 1
list_num.append(number)
if number % 2 == 0:
return hailstone_game(int(number/2))
else:
return hailstone_game(int(number*3+1))
list_num.append(1) # cheap uncreative way to add the one
print(*list_num, sep=" ")
print(f"The loop executed {count} times.")
return
input_check()
Additional stuff that could be done:
- Catching non-integer inputs using try / except
Keep in mind when programming it is a good habit to keep different functions of your code separate, by defining functions for each set of 'commands'. This leads to more readable and easier to maintain code. Of course in this situation it doesn't matter as the code is short.
Your recursive function is missing a base/terminating condition so it goes into an infinite loop.
resultArray = [] #list
def hailstone(n):
if n <= 0: # Base Condition
return
if n > 0:
resultArray.append(n)
if n > 1:
if n % 2 == 0:
hailstone(int(n/2))
else:
hailstone((n * 3) + 1)
# function call
hailstone(20)
print(len(resultArray), resultArray)
Output
8 [20, 10, 5, 16, 8, 4, 2, 1]
Here's a recursive approach for the problem.
count=0
def hailstone(n):
global count
count+=1
if n==1:
print(n)
else:
if n%2==0:
print(n)
hailstone(int(n/2))
else:
print(n)
hailstone(3*n+1)
hailstone(21)
print(f"Loop executed {count} times")

Find all the divisors of a number using Python [duplicate]

This question already has answers here:
What is the best way to get all the divisors of a number?
(18 answers)
Closed 2 years ago.
I am trying to write a Python script that will find prime numbers. In the way that I am going about this, the script is going to take a number from a range, determine the factors, determine if the only two factors are 1 and itself, and return true if it's a prime number. I need help with my code to find the factors.
num = int(input("enter: "))
i = 1
while i < num:
if num % i == 0:
print(i)
i += 1
else:
pass
The i is set to 1 because you can't divide by 0. However, the return starts to work, however, it only returns a couple of numbers, not the full list that I am hoping for. For example, you input 20, it returns only 1 and 2.
You're only incrementing i in the "is even" case. This'd fix it:
num = int(input("enter: "))
i = 1
while i < num:
if num % i == 0:
print(i)
i += 1
However, it's better to use range() for iterating over a range of numbers:
num = int(input("enter: "))
for i in range(1, num):
if num % i == 0:
print(i)

Printing only nth number of prime sequence, python

I'm trying to write a program in python that can either print 1 through nth numbers of the prime number sequence, or print just the nth number of the prime number sequence. Here is the code.
import math
P = 2
X = raw_input('Choose a number: ')
Y = 1
def prime(P, Y):
Choice = raw_input('Select 1 to print X numbers of the Prime sequence. \nSelect 2 to print the Xth number in the Prime sequence. \nWhat is your choice: ')
if Choice == "1":
while Y <= int(X):
isprime = True
for x in range(2, int(P) - 1):
if P % x == 0:
isprime = False
break
if isprime:
print P
Y += 1
P += 1
elif Choice == "2":
prime(P, Y)
Basically, i have the first part down, so that it prints 1 through nth numbers of the prime sequence. However, I'm quite lost on how to make it calculate just the nth prime, where the nth prime is the given through raw input. It must be possible to do this in python, however, how would it be done, and what would be the best way to do so, without having to add too many new variables that i don't have here, (though i would be fine doing so). Help would be appreciated.
Add a condition so that if either the user wants to print all numbers, or you have reached the final prime number of the sequence, the number will be printed. (I have also replaced some of the variable names with more descriptive ones, and altered it so that the function is passed the number_of_primes as its only parameter, which would seem to make more sense.)
def print_primes(X):
choice = raw_input('Select 1 to print X numbers of the Prime sequence. \nSelect 2 to print the Xth number in the Prime sequence. \nWhat is your choice: ')
count = 1
n = 2
while count <= X:
is_prime = True
for i in range(2, int(n) - 1):
if n % i == 0:
is_prime = False
break
if is_prime:
if choice == "1" or count == X:
print n
count += 1
n += 1
number_of_primes = int(raw_input('Choose a number: '))
print_primes(number_of_primes)
Just only print if it's the Yth number:
if isprime:
Y += 1
if Y == X:
print P

Python, largest odd integer

I am new to coding and have been learning a few days now. I wrote this program in Python while following along in some MIT OpenCourseware lectures and a few books. Are there anyways to more easily express the program?
Finger exercise: Write a program that asks the user to input 10 integers, and then prints the largest odd number that was entered. If no odd number was entered, it should print a message to that effect.
a = int(raw_input('Enter your first integer: '))
b = int(raw_input('Enter your second integer: '))
c = int(raw_input('Enter your third integer: '))
d = int(raw_input('Enter your fourth integer: '))
e = int(raw_input('Enter your fifth integer: '))
f = int(raw_input('Enter your sixth integer: '))
g = int(raw_input('Enter your seventh integer: '))
h = int(raw_input('Enter your eighth integer: '))
i = int(raw_input('Enter your ninth integer: '))
j = int(raw_input('Enter your tenth integer: '))
if a%2 ==0:
a = 0
else:
a = a
if b%2 ==0:
b = 0
else:
b = b
if c%2 ==0:
c = 0
else:
c = c
if d%2 ==0:
d = 0
else:
d = d
if e%2 ==0:
e = 0
else:
e = e
if f%2 ==0:
f = 0
else:
f = f
if g%2 ==0:
g = 0
else:
g = g
if h%2 ==0:
h = 0
else:
h = h
if i%2 ==0:
i = 0
else:
i = i
if j%2 ==0:
j = 0
else:
j = j
value = a, b, c, d, e, f, g, h, i, j
max = max(value)
if max ==0:
print 'There are no odd numbers.'
else:
print max, 'is the largest odd integer.'
A more compact form would be:
from __future__ import print_function
try: # Python 2
raw_input
except NameError: # Python 3 compatibility
raw_input = input
largest = None
for i in range(1, 11):
number = int(raw_input('Enter integer #%d: ' % i))
if number % 2 != 0 and (not largest or number > largest):
largest = number
if largest is None:
print("You didn't enter any odd numbers")
else:
print("Your largest odd number was:", largest)
This uses a simple loop to track how many integers were entered, but only stores the largest odd number encountered so far.
numbers = [input('Enter a number: ') for i in range(10)]
odds = [x for x in numbers if x % 2 == 1]
if odds:
print max(odds)
else:
print 'No odd numbers input'
Explanation:
numbers = [input('Enter a number: ') for i in range(10)]
This line is using a list comprehension to ask a user for 10 numbers. These numbers will be in the list object numbers
odds = [x for x in numbers if x % 2 == 1]
Next we are using another list comprehension to filter out all numbers in numbers that are not odd. Since odd numbers modulo 2 always equal 1, we are given a new list (odd) that only contains odd numbers.
if odds:
This is using python's truthy way of testing. Particularly, if a list is empty, this is False. If the list is not empty, it is True.
print max(odds)
Finally, if the above was True, we print the max value in the odds list
else:
print 'No odd numbers input'
If the if statement was False (there are no odds) we tell the user
A running copy looks like this:
Enter a number: 10
Enter a number: 12
Enter a number: 14
Enter a number: 15
Enter a number: 16
Enter a number: 17
Enter a number: 1
Enter a number: 2
Enter a number: 19
Enter a number: 2
19
Python has objects called list and tuple which represent a sequence of numbers—they serve many of the same purposes as "arrays" in other programming languages. An example of a list is [1,2,3,4,5]
Like most popular programming languages, Python also has the concept of a for loop.
myList = [1,2,3,4,5]
for x in myList:
print(x)
Python also has a somewhat unusual but very useful construct called a "list comprehension" which combines for loop, list, and an optional conditional in one neat syntax—check out these examples and see if you can understand how the result relates to the code
myNewList = [x+1 for x in myList]
myNewSelectiveList = [x+1 for x in myList if x >= 3]
and here's an example that's particularly useful in your exercise:
userInputs = [int(raw_input('Enter a number:')) for i in range(10)]
Finally, there's a function max which can take a list as its argument and which returns the largest item in the list. Once you have your 10 inputs in a list, you should be able to use these ingredients to find the highest odd number in one pretty short line (max over a list comprehension with an if conditional in it) .
I'm also studying Guttag's book from scratch. I came with the following solution:
list = []
odds = False
print('You will be asked to enter 10 integer numbers, one at a time.')
for i in range(1,11):
i = int(input('Number: '))
list.append(i)
list = sorted(list, reverse = True)
for j in list:
if j%2 == 1:
print('The largest odd number is', j, 'from', list)
odds = True
break
if odds == False:
print('There is no odd number from', list)
I went through a long(er) version similar to the OP, but since the reading list for MIT 6.00x explicitly suggested studying topic 3.2 alongside chapter 2, I thought that lists would be an acceptable answer.
The code above should allow for negatives and zero.
I'm also working through Guttag's book, this solution uses some of the above code but might have a different spin on things. I filtered out the user input right away to include only odd integer input. If all of the input is even, then the list is empty, the code checks for an empty list, then sorts whatever is left (odd integers) and returns the last one. Please let me know if there are any hidden problems in this (I'm rather new to writing algorithms as well).
arr = []
max = 0
while max < 10:
userNum = int(input('enter an int: '))
if userNum %2 != 0:
arr.append(userNum)
max = max + 1
if len(arr) == 0:
print('all are even')
oddArr = sorted(arr)
print(oddArr[-1])
I just find this question while looking for alternative answers here is my code :
Note:I changed the code a bit so I can decide how many numbers I want to enter
alist=[]
olist=[]
num=int(input("how many numbers ? : "))
for n in range(num):
numbers=int(input())
alist.append(numbers)
for n in range(len(alist)):
while alist[n]%2 != 0 :
olist.append(alist[n])
break
else:
n +=1
olist.sort()
if len(olist) != 0:
print("biggest odd number: ",olist[-1])
else:
print("there is no odd number ")
The question is very early in the book and assumes no knowledge of lists, or indeed the Nonetype (it has mentioned it but not explained how it is used). Also, some solutions here will not work if the highest odd is negative because they initialise largest = 0 before the loop.
This works:
iters = 10
largest = "spam"
while iters != 0:
user_num = int(input("Enter an integer: "))
if user_num % 2 != 0:
if largest == "spam" or user_num > largest:
largest = user_num
iters -= 1
if largest == "spam":
print("You did not enter an odd integer")
else:
print("The largest odd integer was", largest)
itersLeft = 10 #define number of integers
x=0 #creating a variable for storing values
max=0 #creating a variable for defining max
while itersLeft!=0:
x=int(input())
itersLeft = itersLeft-1
if x%2!=0 and x>max:
max=x
if max!=0:
print(max)
elif max==0:
print("No odd number was entered")
*Note: works only for non-negative numbers
The other answers and comments suggesting lists and loops are much nicer, but they're not the only way to change and shorten your code.
In your tests, the else: a = a sections are doing nothing, assigning a to itself is no change, so they can all be removed, and the if tests brought onto one line each:
a = int(raw_input('Enter your first integer: '))
b = int(raw_input('Enter your second integer: '))
c = int(raw_input('Enter your third integer: '))
d = int(raw_input('Enter your fourth integer: '))
e = int(raw_input('Enter your fifth integer: '))
f = int(raw_input('Enter your sixth integer: '))
g = int(raw_input('Enter your seventh integer: '))
h = int(raw_input('Enter your eighth integer: '))
i = int(raw_input('Enter your ninth integer: '))
j = int(raw_input('Enter your tenth integer: '))
if a%2 == 0: a = 0
if b%2 == 0: b = 0
if c%2 == 0: c = 0
if d%2 == 0: d = 0
if e%2 == 0: e = 0
if f%2 == 0: f = 0
if g%2 == 0: g = 0
if h%2 == 0: h = 0
if i%2 == 0: i = 0
if j%2 == 0: j = 0
value = a, b, c, d, e, f, g, h, i, j
max = max(value)
if max ==0:
print 'There are no odd numbers.'
That's the most obvious change that makes it easier to follow, without fundamentally changing the pattern of what you are doing.
After that, there are ways you could rewrite it - for example, staying with math only, even numbers divide by 2 with remainder 0 and odd numbers have remainder 1. So doing (x % 2) * x will change even numbers into 0, but keep odd numbers the same.
So you could replace all the if tests, with no test, just an assignment:
a = (a % 2) * a
b = (b % 2) * b
c = (c % 2) * c
...
if e%2 == 0: e = 0
if f%2 == 0: f = 0
The lines get slightly shorter, and if you're OK with how that works, you could merge those into the value line, and put that straight into max to get:
a = int(raw_input('Enter your first integer: '))
b = int(raw_input('Enter your second integer: '))
c = int(raw_input('Enter your third integer: '))
d = int(raw_input('Enter your fourth integer: '))
e = int(raw_input('Enter your fifth integer: '))
f = int(raw_input('Enter your sixth integer: '))
g = int(raw_input('Enter your seventh integer: '))
h = int(raw_input('Enter your eighth integer: '))
i = int(raw_input('Enter your ninth integer: '))
j = int(raw_input('Enter your tenth integer: '))
largest = max(a%2*a, b%2*b, c%2*c, d%2*d, e%2*e, f%2*f, g%2*g, h%2*h, i%2*i, j%2*j)
if largest == 0:
print 'There are no odd numbers.'
else:
print largest, 'is the largest odd integer.'
There isn't really a way to shorten assigning ten variables without some kind of loop, and it's arguable whether any of this is 'more easily expressing the program', but it does take 58 lines down to 17, remove 10 conditional tests, 10 else/no-op assignments and 1 variable while keeping approximately the same structure / workings.
PS. I changed max = max() because calling your variable by the same name as the function is a bad idea - you can't use the function again, and it's confusing to other Python programmers reading your code who already know what 'max' does, if you've reused that name for something else.
Edit: A commentor suggests negative numbers matter. The above writing answers "here's my code, how could I express it more easily?" without introducing any new Python or changing the behaviour, but it cannot handle negative odd numbers; max() will always choose a zero over a negative odd number, and the program will wrongly answer that "there are no odd numbers".
I don't think that's fixable without introducing any new concepts at all. And if introducing new concepts is happening, use lists and loops. Andy's suggestion to build a list that includes only the odd numbers, and then take the max value of that, for example.
But, doing something to handle them without lists -- there is another approach that hardly changes the shape of the code at all, introducing the boolean OR operation, which compares two true/false values and returns false if they are both false, otherwise true.
Python does a lot of automagic behind-the-scenes conversion to true/false to make logical operators work well. Variables with no value (zero, empty containers, empty strings) are all "false" and variables with some value are all "true".
From earlier, we have one bit that knocks even numbers to zero (a%2*a) and now we want to knock zero off the numberline completely:
-3 or None -> -3
-1 or None -> -1
0 or None -> None
1 or None -> 1
3 or None -> 3
5 or None -> 5
Introducing: a%2*a or None. It's magical, ugly, hard to follow, but valid Python -- and I'm chuffed because it's like solving a puzzle and it works, you know? Change the max line and the test to:
largest = max(a%2*a or None, b%2*b or None, c%2*c or None, d%2*d or None, e%2*e or None,
f%2*f or None, g%2*g or None, h%2*h or None, i%2*i or None, j%2*j or None)
if largest == None:
Evens get squished to zeros, zeros get squished to nothing, odds come through unchanged. Max now only has odd numbers to work with so it can now pick a negative odd number as the answer. Case closed. btw. use lists.
Compare 10 inputs and print the highest odd number
y = 0
for counter in range(10):
x = int(input("Enter a number: "))
if (x%2 == 1 and x > y):
y = x
if (y == 0):
print("All are even")
else:
print(y, "is the largest odd number")
Try the following -
def largest_odd():
q = int(input('Please enter a number: '))
w = int(input('Please enter a number: '))
e = int(input('Please enter a number: '))
lis = []
if q%2 != 0:
lis.insert (q,q)
if w%2 != 0:
lis.insert (w,w)
if e%2 != 0:
lis.insert (e,e)
Great = max(lis)
print(Great)
I am on the same exercise just now, and came up with the following solution, which seems to work just fine and is in line with the topics taught in the book so far(variable assignments, conditionals, and while loop):
EXERCISE:
Write a program that asks the user to input 10 integers, and
then prints the largest odd number that was entered. If no odd number was entered, it should print a message to that effect.
from __future__ import print_function
try: # Python 2
raw_input
except NameError: # Python 3 compatibility
raw_input = input
numbers_count = 0
next_input = 0
max_odd_number = None
while numbers_count < 10:
numbers_count += 1
next_input = raw_input("Please enter a number: " + str(numbers_count) +
" of 10\n")
if int(next_input)%2 != 0:
# on the entry of first number, we check max_odd_number - if it is of
# type None, it means no value has been assigned to it so far thus the
# first odd number entry becomes the first maximum odd number, be it
# positive or negative.
if max_odd_number == None:
max_odd_number = int(next_input)
if int(next_input) > max_odd_number:
max_odd_number = int(next_input)
if max_odd_number == None:
print ("None of the numbers entered were odd!")
else:
print ("Maximum odd number you entered is: " + str(max_odd_number))
Any comments would be appreciated.
Thanks,
A
A simple answer is :
x = 0
result = None;
while(x < 10):
inputx = raw_input('Enter integer #%d: ' % x)
inputx = int(inputx)
if (inputx % 2 == 1):
if(inputx > result):
result = inputx
x += 1
if result is None:
print 'no odd number was entered'
else:
print result
Note: if enter a String like '3f',it will throw a ValueError:
invalid literal for int() with base 10: '3f'
So finally ,the best anwser is
result = None
x = 0
while(x < 10):
inputx = raw_input('Enter integer #%d: ' % x)
try:
inputx = int(inputx)
except ValueError:
print'you enter value ',inputx,' is not a Integer. please try again!'
continue
if (inputx % 2 == 1):
if(inputx > result):
result = inputx
x+=1
if result is None:
print 'no odd number was entered'
else:
print 'the largest odd number is: ',result
The question if introduced in the book just after giving knowledge to if condition and while iteration statement.
Though there are lot many datatypes that could be used in python to get easy solution, we need to use only primitives that too the very basics.
The code below takes 10 user inputs(only odd) and outputs the largest of the 10 numbers.
Answer to the question:(Code)
a1= int(input("Enter the number1: "))
while a1%2 ==0:
print("Entered number is not an odd number.")
a1= int(input("Enter the number1: "))
a2= int(input("Enter the number2: "))
while a2%2 ==0:
print("Entered number is not an odd number.")
a2= int(input("Enter the number2: "))
a3= int(input("Enter the number3: "))
while a3%2 ==0:
print("Entered number is not an odd number.")
a3= int(input("Enter the number3: "))
a4= int(input("Enter the number4: "))
while a4%2 ==0:
print("Entered number is not an odd number.")
a4= int(input("Enter the number4: "))
a5= int(input("Enter the number5: "))
while a5%2 ==0:
print("Entered number is not an odd number.")
a5= int(input("Enter the number5: "))
a6= int(input("Enter the number6: "))
while a6%2 ==0:
print("Entered number is not an odd number.")
a6= int(input("Enter the number6: "))
a7= int(input("Enter the number7: "))
while a7%2 ==0:
print("Entered number is not an odd number.")
a7= int(input("Enter the number7: "))
a8= int(input("Enter the number8: "))
while a8%2 ==0:
print("Entered number is not an odd number.")
a8= int(input("Enter the number8: "))
a9= int(input("Enter the number9: "))
while a9%2 ==0:
print("Entered number is not an odd number.")
a9= int(input("Enter the number9: "))
a10= int(input("Enter the number10: "))
while a10%2 ==0:
print("Entered number is not an odd number.")
a10= int(input("Enter the number10: "))
if a1>a2 and a1>a3 and a1>a4 and a1>a5 and a1>a6 and a1>a7 and a1>a8 and a1>a9 and a1>a10:
print(str(a1) +" is the largest odd number.")
elif a2>a1 and a2>a3 and a2>a4 and a2>a5 and a2>a6 and a2>a7 and a2>a8 and a2>a9 and a2>a10:
print(str(a2) +" is the largest odd number.")
elif a3>a1 and a3>a2 and a3>a4 and a3>a5 and a3>a6 and a3>a7 and a3>a8 and a3>a9 and a3>a10:
print(str(a3) +" is the largest odd number.")
elif a4>a1 and a4>a2 and a4>a3 and a4>a5 and a4>a6 and a4>a7 and a4>a8 and a4>a9 and a4>a10:
print(str(a4) +" is the largest odd number.")
elif a5>a1 and a5>a2 and a5>a3 and a5>a4 and a5>a6 and a5>a7 and a5>a8 and a5>a9 and a5>a10:
print(str(a5) +" is the largest odd number.")
elif a6>a1 and a6>a2 and a6>a3 and a6>a4 and a6>a5 and a6>a7 and a6>a8 and a6>a9 and a6>a10:
print(str(a6) +" is the largest odd number.")
elif a7>a1 and a7>a2 and a7>a3 and a7>a4 and a7>a5 and a7>a6 and a7>a8 and a7>a9 and a7>a10:
print(str(a7) +" is the largest odd number.")
elif a8>a1 and a8>a2 and a8>a3 and a8>a4 and a8>a5 and a8>a6 and a8>a7 and a8>a9 and a8>a10:
print(str(a8) +" is the largest odd number.")
elif a9>a1 and a9>a2 and a9>a3 and a9>a4 and a9>a5 and a9>a6 and a9>a7 and a9>a8 and a9>a10:
print(str(a9) +" is the largest odd number.")
else:
print(str(a10) +" is the largest odd number.")
Hope this helps.
In my experience the way to more easily express the program is with a function.
This would have been my answer in Syntax tested for Python 3.7.6:
'''
Finger exercise:
Write a program that asks the user to input 10 integers,
and then prints the largest odd number that was entered.
If no odd number was entered, it should print a message to that effect.
'''
def LargestOdd(numbers=[]):
'''
Parameters
----------
numbers : list, whcih should contain 10 integers.
DESCRIPTION. The default is [].
Returns
-------
The largest odd integer in the list number.
'''
odd_numbers=[]
if len(numbers)==10:
for n in numbers:
if n%2 != 0:
odd_numbers.append(n)
max_numb=max(odd_numbers)
print('The largest odd number is '+str(max_numb))
else:
print('Please, enter 10 numbers')
LargestOdd([1,2,3,7,45,8,9,10,30,33])
Output: The largest odd number is 45
n = int(input("Enter the no of integers:"))
lst = []
count = 1
while count <=n:
no = int(input("Enter an integer:"))
count = count +1
if (no%2!=0):
lst.append(no)
print ("The list of odd numbers",lst)
print("The maximum number from the list of odd number is:",max(lst))
Here is my solution:
def max_odd():
"""Returns largest odd number from given 10 numbers by the use.
if the input is not valid, the message is displayed to enter valid numbers"""
x = [input('Enter a value: ') for i in range(10)]
x = [int(i) for i in x if i]
if x:
try:
x = [i for i in x if i%2 != 0]
return(max(x))
except:
return('All even numbers provided.')
else:
return('Please enter a valid input')
I started learning coding from Guttag's book. And since this is in the 2nd chapter, the solution follows only basic if condition and while loop
#input 10 integers
n1 = int(input('Enter 1st integer: '))
n2 = int(input('Enter 2nd integer: '))
n3 = int(input('Enter 3rd integer: '))
n4 = int(input('Enter 4th integer: '))
n5 = int(input('Enter 5th integer: '))
n6 = int(input('Enter 6th integer: '))
n7 = int(input('Enter 7th integer: '))
n8 = int(input('Enter 8th integer: '))
n9 = int(input('Enter 9th integer: '))
n10 = int(input('Enter 10th integer: '))
#create list from input
list = [n1,n2,n3,n4,n5,n6,n7,n8,n9,n10]
largest = list[0] #Assign largest to the first integer
x = 1 #index starts at 1
while x < len(list):
if list[x]%2 != 0:
if list[x] > largest:
largest = list[x]
x += 1
if largest%2 == 0:
print('All numbers are even')
else:
print('Largest odd number is', largest)
#This is the simplest program for this question
a=[input('Enter a number: ') for i in range(10)]
#This gets 10 inputs from the user and stores it as a string in a list
b=[int(a[i]) for i in range(10)]
#Here the string values were converted into integer values
for i in range(10):
if max(b)%2==0:
b.remove(max(b))
#Now the loop checks for the max number and if it's even it deletes it.
c=max((b),default='Nil')
if c=="Nil":
print("Please enter an odd number")
else:
print(c,"Is the Largest Odd Number")
#Now the largest number left is an odd number and we finally print it!!!!
This code should work work as well. Syntax tested for python 2.7
def tenX(): #define function
ten = [] #empty list for user input
odds = [] #empty list for odd numbers only
counter = 10
ui = 0
while counter > 0 :
ui = raw_input('Enter a number: ')
ten.append(int(ui)) #add every user input to list after int conversion
counter -= 1
for i in ten:
if i % 2 != 0:
odds.append(i)
print "The highest number is", max(odds) #max() returns highest value in a list
>>> tenX() #call function

Categories