From a044f92ca66f34f8c24d01c3989fb85c51444597 Mon Sep 17 00:00:00 2001 From: mukund26 Date: Mon, 31 Jul 2017 22:37:22 +0530 Subject: [PATCH 1/5] this is first commit --- ...thon challenging programming exercises.txt | 2376 +++++++++++++++++ README | 0 python contents.docx | Bin 0 -> 76306 bytes python contents.txt | 188 ++ 4 files changed, 2564 insertions(+) create mode 100644 100+ Python challenging programming exercises.txt create mode 100644 README create mode 100644 python contents.docx create mode 100644 python contents.txt diff --git a/100+ Python challenging programming exercises.txt b/100+ Python challenging programming exercises.txt new file mode 100644 index 00000000..66c00215 --- /dev/null +++ b/100+ Python challenging programming exercises.txt @@ -0,0 +1,2376 @@ +100+ Python challenging programming exercises + +1. Level description +Level Description +Level 1 Beginner means someone who has just gone through an introductory Python course. He can solve some problems with 1 or 2 Python classes or functions. Normally, the answers could directly be found in the textbooks. +Level 2 Intermediate means someone who has just learned Python, but already has a relatively strong programming background from before. He should be able to solve problems which may involve 3 or 3 Python classes or functions. The answers cannot be directly be found in the textbooks. +Level 3 Advanced. He should use Python to solve more complex problem using more rich libraries functions and data structures and algorithms. He is supposed to solve the problem using several Python standard packages and advanced techniques. + +2. Problem template + +#----------------------------------------# +Question +Hints +Solution + +3. Questions + +#----------------------------------------# +Question 1 +Level 1 + +Question: +Write a program which will find all such numbers which are divisible by 7 but are not a multiple of 5, +between 2000 and 3200 (both included). +The numbers obtained should be printed in a comma-separated sequence on a single line. + +Hints: +Consider use range(#begin, #end) method + +Solution: +l=[] +for i in range(2000, 3201): + if (i%7==0) and (i%5!=0): + l.append(str(i)) + +print ','.join(l) +#----------------------------------------# + +#----------------------------------------# +Question 2 +Level 1 + +Question: +Write a program which can compute the factorial of a given numbers. +The results should be printed in a comma-separated sequence on a single line. +Suppose the following input is supplied to the program: +8 +Then, the output should be: +40320 + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +def fact(x): + if x == 0: + return 1 + return x * fact(x - 1) + +x=int(raw_input()) +print fact(x) +#----------------------------------------# + +#----------------------------------------# +Question 3 +Level 1 + +Question: +With a given integral number n, write a program to generate a dictionary that contains (i, i*i) such that is an integral number between 1 and n (both included). and then the program should print the dictionary. +Suppose the following input is supplied to the program: +8 +Then, the output should be: +{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64} + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. +Consider use dict() + +Solution: +n=int(raw_input()) +d=dict() +for i in range(1,n+1): + d[i]=i*i + +print d +#----------------------------------------# + +#----------------------------------------# +Question 4 +Level 1 + +Question: +Write a program which accepts a sequence of comma-separated numbers from console and generate a list and a tuple which contains every number. +Suppose the following input is supplied to the program: +34,67,55,33,12,98 +Then, the output should be: +['34', '67', '55', '33', '12', '98'] +('34', '67', '55', '33', '12', '98') + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. +tuple() method can convert list to tuple + +Solution: +values=raw_input() +l=values.split(",") +t=tuple(l) +print l +print t +#----------------------------------------# + +#----------------------------------------# +Question 5 +Level 1 + +Question: +Define a class which has at least two methods: +getString: to get a string from console input +printString: to print the string in upper case. +Also please include simple test function to test the class methods. + +Hints: +Use __init__ method to construct some parameters + +Solution: +class InputOutString(object): + def __init__(self): + self.s = "" + + def getString(self): + self.s = raw_input() + + def printString(self): + print self.s.upper() + +strObj = InputOutString() +strObj.getString() +strObj.printString() +#----------------------------------------# + +#----------------------------------------# +Question 6 +Level 2 + +Question: +Write a program that calculates and prints the value according to the given formula: +Q = Square root of [(2 * C * D)/H] +Following are the fixed values of C and H: +C is 50. H is 30. +D is the variable whose values should be input to your program in a comma-separated sequence. +Example +Let us assume the following comma separated input sequence is given to the program: +100,150,180 +The output of the program should be: +18,22,24 + +Hints: +If the output received is in decimal form, it should be rounded off to its nearest value (for example, if the output received is 26.0, it should be printed as 26) +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +#!/usr/bin/env python +import math +c=50 +h=30 +value = [] +items=[x for x in raw_input().split(',')] +for d in items: + value.append(str(int(round(math.sqrt(2*c*float(d)/h))))) + +print ','.join(value) +#----------------------------------------# + +#----------------------------------------# +Question 7 +Level 2 + +Question: +Write a program which takes 2 digits, X,Y as input and generates a 2-dimensional array. The element value in the i-th row and j-th column of the array should be i*j. +Note: i=0,1.., X-1; j=0,1,¡­Y-1. +Example +Suppose the following inputs are given to the program: +3,5 +Then, the output of the program should be: +[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]] + +Hints: +Note: In case of input data being supplied to the question, it should be assumed to be a console input in a comma-separated form. + +Solution: +input_str = raw_input() +dimensions=[int(x) for x in input_str.split(',')] +rowNum=dimensions[0] +colNum=dimensions[1] +multilist = [[0 for col in range(colNum)] for row in range(rowNum)] + +for row in range(rowNum): + for col in range(colNum): + multilist[row][col]= row*col + +print multilist +#----------------------------------------# + +#----------------------------------------# +Question 8 +Level 2 + +Question: +Write a program that accepts a comma separated sequence of words as input and prints the words in a comma-separated sequence after sorting them alphabetically. +Suppose the following input is supplied to the program: +without,hello,bag,world +Then, the output should be: +bag,hello,without,world + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +items=[x for x in raw_input().split(',')] +items.sort() +print ','.join(items) +#----------------------------------------# + +#----------------------------------------# +Question 9 +Level 2 + +Question£º +Write a program that accepts sequence of lines as input and prints the lines after making all characters in the sentence capitalized. +Suppose the following input is supplied to the program: +Hello world +Practice makes perfect +Then, the output should be: +HELLO WORLD +PRACTICE MAKES PERFECT + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +lines = [] +while True: + s = raw_input() + if s: + lines.append(s.upper()) + else: + break; + +for sentence in lines: + print sentence +#----------------------------------------# + +#----------------------------------------# +Question 10 +Level 2 + +Question: +Write a program that accepts a sequence of whitespace separated words as input and prints the words after removing all duplicate words and sorting them alphanumerically. +Suppose the following input is supplied to the program: +hello world and practice makes perfect and hello world again +Then, the output should be: +again and hello makes perfect practice world + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. +We use set container to remove duplicated data automatically and then use sorted() to sort the data. + +Solution: +s = raw_input() +words = [word for word in s.split(" ")] +print " ".join(sorted(list(set(words)))) +#----------------------------------------# + +#----------------------------------------# +Question 11 +Level 2 + +Question: +Write a program which accepts a sequence of comma separated 4 digit binary numbers as its input and then check whether they are divisible by 5 or not. The numbers that are divisible by 5 are to be printed in a comma separated sequence. +Example: +0100,0011,1010,1001 +Then the output should be: +1010 +Notes: Assume the data is input by console. + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +value = [] +items=[x for x in raw_input().split(',')] +for p in items: + intp = int(p, 2) + if not intp%5: + value.append(p) + +print ','.join(value) +#----------------------------------------# + +#----------------------------------------# +Question 12 +Level 2 + +Question: +Write a program, which will find all such numbers between 1000 and 3000 (both included) such that each digit of the number is an even number. +The numbers obtained should be printed in a comma-separated sequence on a single line. + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +values = [] +for i in range(1000, 3001): + s = str(i) + if (int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0): + values.append(s) +print ",".join(values) +#----------------------------------------# + +#----------------------------------------# +Question 13 +Level 2 + +Question: +Write a program that accepts a sentence and calculate the number of letters and digits. +Suppose the following input is supplied to the program: +hello world! 123 +Then, the output should be: +LETTERS 10 +DIGITS 3 + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +s = raw_input() +d={"DIGITS":0, "LETTERS":0} +for c in s: + if c.isdigit(): + d["DIGITS"]+=1 + elif c.isalpha(): + d["LETTERS"]+=1 + else: + pass +print "LETTERS", d["LETTERS"] +print "DIGITS", d["DIGITS"] +#----------------------------------------# + +#----------------------------------------# +Question 14 +Level 2 + +Question: +Write a program that accepts a sentence and calculate the number of upper case letters and lower case letters. +Suppose the following input is supplied to the program: +Hello world! +Then, the output should be: +UPPER CASE 1 +LOWER CASE 9 + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +s = raw_input() +d={"UPPER CASE":0, "LOWER CASE":0} +for c in s: + if c.isupper(): + d["UPPER CASE"]+=1 + elif c.islower(): + d["LOWER CASE"]+=1 + else: + pass +print "UPPER CASE", d["UPPER CASE"] +print "LOWER CASE", d["LOWER CASE"] +#----------------------------------------# + +#----------------------------------------# +Question 15 +Level 2 + +Question: +Write a program that computes the value of a+aa+aaa+aaaa with a given digit as the value of a. +Suppose the following input is supplied to the program: +9 +Then, the output should be: +11106 + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +a = raw_input() +n1 = int( "%s" % a ) +n2 = int( "%s%s" % (a,a) ) +n3 = int( "%s%s%s" % (a,a,a) ) +n4 = int( "%s%s%s%s" % (a,a,a,a) ) +print n1+n2+n3+n4 +#----------------------------------------# + +#----------------------------------------# +Question 16 +Level 2 + +Question: +Use a list comprehension to square each odd number in a list. The list is input by a sequence of comma-separated numbers. +Suppose the following input is supplied to the program: +1,2,3,4,5,6,7,8,9 +Then, the output should be: +1,3,5,7,9 + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +values = raw_input() +numbers = [x for x in values.split(",") if int(x)%2!=0] +print ",".join(numbers) +#----------------------------------------# + +Question 17 +Level 2 + +Question: +Write a program that computes the net amount of a bank account based a transaction log from console input. The transaction log format is shown as following: +D 100 +W 200 +¡­ +D means deposit while W means withdrawal. +Suppose the following input is supplied to the program: +D 300 +D 300 +W 200 +D 100 +Then, the output should be: +500 + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: +import sys +netAmount = 0 +while True: + s = raw_input() + if not s: + break + values = s.split(" ") + operation = values[0] + amount = int(values[1]) + if operation=="D": + netAmount+=amount + elif operation=="W": + netAmount-=amount + else: + pass +print netAmount +#----------------------------------------# + +#----------------------------------------# +Question 18 +Level 3 + +Question: +A website requires the users to input username and password to register. Write a program to check the validity of password input by users. +Following are the criteria for checking the password: +1. At least 1 letter between [a-z] +2. At least 1 number between [0-9] +1. At least 1 letter between [A-Z] +3. At least 1 character from [$#@] +4. Minimum length of transaction password: 6 +5. Maximum length of transaction password: 12 +Your program should accept a sequence of comma separated passwords and will check them according to the above criteria. Passwords that match the criteria are to be printed, each separated by a comma. +Example +If the following passwords are given as input to the program: +ABd1234@1,a F1#,2w3E*,2We3345 +Then, the output of the program should be: +ABd1234@1 + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solutions: +import re +value = [] +items=[x for x in raw_input().split(',')] +for p in items: + if len(p)<6 or len(p)>12: + continue + else: + pass + if not re.search("[a-z]",p): + continue + elif not re.search("[0-9]",p): + continue + elif not re.search("[A-Z]",p): + continue + elif not re.search("[$#@]",p): + continue + elif re.search("\s",p): + continue + else: + pass + value.append(p) +print ",".join(value) +#----------------------------------------# + +#----------------------------------------# +Question 19 +Level 3 + +Question: +You are required to write a program to sort the (name, age, height) tuples by ascending order where name is string, age and height are numbers. The tuples are input by console. The sort criteria is: +1: Sort based on name; +2: Then sort based on age; +3: Then sort by score. +The priority is that name > age > score. +If the following tuples are given as input to the program: +Tom,19,80 +John,20,90 +Jony,17,91 +Jony,17,93 +Json,21,85 +Then, the output of the program should be: +[('John', '20', '90'), ('Jony', '17', '91'), ('Jony', '17', '93'), ('Json', '21', '85'), ('Tom', '19', '80')] + +Hints: +In case of input data being supplied to the question, it should be assumed to be a console input. +We use itemgetter to enable multiple sort keys. + +Solutions: +from operator import itemgetter, attrgetter + +l = [] +while True: + s = raw_input() + if not s: + break + l.append(tuple(s.split(","))) + +print sorted(l, key=itemgetter(0,1,2)) +#----------------------------------------# + +#----------------------------------------# +Question 20 +Level 3 + +Question: +Define a class with a generator which can iterate the numbers, which are divisible by 7, between a given range 0 and n. + +Hints: +Consider use yield + +Solution: +def putNumbers(n): + i = 0 + while ilen2: + print s1 + elif len2>len1: + print s2 + else: + print s1 + print s2 + + +printValue("one","three") + + + +#----------------------------------------# +2.10 + +Question: +Define a function that can accept an integer number as input and print the "It is an even number" if the number is even, otherwise print "It is an odd number". + +Hints: + +Use % operator to check if a number is even or odd. + +Solution +def checkValue(n): + if n%2 == 0: + print "It is an even number" + else: + print "It is an odd number" + + +checkValue(7) + + +#----------------------------------------# +2.10 + +Question: +Define a function which can print a dictionary where the keys are numbers between 1 and 3 (both included) and the values are square of keys. + +Hints: + +Use dict[key]=value pattern to put entry into a dictionary. +Use ** operator to get power of a number. + +Solution +def printDict(): + d=dict() + d[1]=1 + d[2]=2**2 + d[3]=3**2 + print d + + +printDict() + + + + + +#----------------------------------------# +2.10 + +Question: +Define a function which can print a dictionary where the keys are numbers between 1 and 20 (both included) and the values are square of keys. + +Hints: + +Use dict[key]=value pattern to put entry into a dictionary. +Use ** operator to get power of a number. +Use range() for loops. + +Solution +def printDict(): + d=dict() + for i in range(1,21): + d[i]=i**2 + print d + + +printDict() + + +#----------------------------------------# +2.10 + +Question: +Define a function which can generate a dictionary where the keys are numbers between 1 and 20 (both included) and the values are square of keys. The function should just print the values only. + +Hints: + +Use dict[key]=value pattern to put entry into a dictionary. +Use ** operator to get power of a number. +Use range() for loops. +Use keys() to iterate keys in the dictionary. Also we can use item() to get key/value pairs. + +Solution +def printDict(): + d=dict() + for i in range(1,21): + d[i]=i**2 + for (k,v) in d.items(): + print v + + +printDict() + +#----------------------------------------# +2.10 + +Question: +Define a function which can generate a dictionary where the keys are numbers between 1 and 20 (both included) and the values are square of keys. The function should just print the keys only. + +Hints: + +Use dict[key]=value pattern to put entry into a dictionary. +Use ** operator to get power of a number. +Use range() for loops. +Use keys() to iterate keys in the dictionary. Also we can use item() to get key/value pairs. + +Solution +def printDict(): + d=dict() + for i in range(1,21): + d[i]=i**2 + for k in d.keys(): + print k + + +printDict() + + +#----------------------------------------# +2.10 + +Question: +Define a function which can generate and print a list where the values are square of numbers between 1 and 20 (both included). + +Hints: + +Use ** operator to get power of a number. +Use range() for loops. +Use list.append() to add values into a list. + +Solution +def printList(): + li=list() + for i in range(1,21): + li.append(i**2) + print li + + +printList() + +#----------------------------------------# +2.10 + +Question: +Define a function which can generate a list where the values are square of numbers between 1 and 20 (both included). Then the function needs to print the first 5 elements in the list. + +Hints: + +Use ** operator to get power of a number. +Use range() for loops. +Use list.append() to add values into a list. +Use [n1:n2] to slice a list + +Solution +def printList(): + li=list() + for i in range(1,21): + li.append(i**2) + print li[:5] + + +printList() + + +#----------------------------------------# +2.10 + +Question: +Define a function which can generate a list where the values are square of numbers between 1 and 20 (both included). Then the function needs to print the last 5 elements in the list. + +Hints: + +Use ** operator to get power of a number. +Use range() for loops. +Use list.append() to add values into a list. +Use [n1:n2] to slice a list + +Solution +def printList(): + li=list() + for i in range(1,21): + li.append(i**2) + print li[-5:] + + +printList() + + +#----------------------------------------# +2.10 + +Question: +Define a function which can generate a list where the values are square of numbers between 1 and 20 (both included). Then the function needs to print all values except the first 5 elements in the list. + +Hints: + +Use ** operator to get power of a number. +Use range() for loops. +Use list.append() to add values into a list. +Use [n1:n2] to slice a list + +Solution +def printList(): + li=list() + for i in range(1,21): + li.append(i**2) + print li[5:] + + +printList() + + +#----------------------------------------# +2.10 + +Question: +Define a function which can generate and print a tuple where the value are square of numbers between 1 and 20 (both included). + +Hints: + +Use ** operator to get power of a number. +Use range() for loops. +Use list.append() to add values into a list. +Use tuple() to get a tuple from a list. + +Solution +def printTuple(): + li=list() + for i in range(1,21): + li.append(i**2) + print tuple(li) + +printTuple() + + + +#----------------------------------------# +2.10 + +Question: +With a given tuple (1,2,3,4,5,6,7,8,9,10), write a program to print the first half values in one line and the last half values in one line. + +Hints: + +Use [n1:n2] notation to get a slice from a tuple. + +Solution +tp=(1,2,3,4,5,6,7,8,9,10) +tp1=tp[:5] +tp2=tp[5:] +print tp1 +print tp2 + + +#----------------------------------------# +2.10 + +Question: +Write a program to generate and print another tuple whose values are even numbers in the given tuple (1,2,3,4,5,6,7,8,9,10). + +Hints: + +Use "for" to iterate the tuple +Use tuple() to generate a tuple from a list. + +Solution +tp=(1,2,3,4,5,6,7,8,9,10) +li=list() +for i in tp: + if tp[i]%2==0: + li.append(tp[i]) + +tp2=tuple(li) +print tp2 + + + +#----------------------------------------# +2.14 + +Question: +Write a program which accepts a string as input to print "Yes" if the string is "yes" or "YES" or "Yes", otherwise print "No". + +Hints: + +Use if statement to judge condition. + +Solution +s= raw_input() +if s=="yes" or s=="YES" or s=="Yes": + print "Yes" +else: + print "No" + + + +#----------------------------------------# +3.4 + +Question: +Write a program which can filter even numbers in a list by using filter function. The list is: [1,2,3,4,5,6,7,8,9,10]. + +Hints: + +Use filter() to filter some elements in a list. +Use lambda to define anonymous functions. + +Solution +li = [1,2,3,4,5,6,7,8,9,10] +evenNumbers = filter(lambda x: x%2==0, li) +print evenNumbers + + +#----------------------------------------# +3.4 + +Question: +Write a program which can map() to make a list whose elements are square of elements in [1,2,3,4,5,6,7,8,9,10]. + +Hints: + +Use map() to generate a list. +Use lambda to define anonymous functions. + +Solution +li = [1,2,3,4,5,6,7,8,9,10] +squaredNumbers = map(lambda x: x**2, li) +print squaredNumbers + +#----------------------------------------# +3.5 + +Question: +Write a program which can map() and filter() to make a list whose elements are square of even number in [1,2,3,4,5,6,7,8,9,10]. + +Hints: + +Use map() to generate a list. +Use filter() to filter elements of a list. +Use lambda to define anonymous functions. + +Solution +li = [1,2,3,4,5,6,7,8,9,10] +evenNumbers = map(lambda x: x**2, filter(lambda x: x%2==0, li)) +print evenNumbers + + + + +#----------------------------------------# +3.5 + +Question: +Write a program which can filter() to make a list whose elements are even number between 1 and 20 (both included). + +Hints: + +Use filter() to filter elements of a list. +Use lambda to define anonymous functions. + +Solution +evenNumbers = filter(lambda x: x%2==0, range(1,21)) +print evenNumbers + + +#----------------------------------------# +3.5 + +Question: +Write a program which can map() to make a list whose elements are square of numbers between 1 and 20 (both included). + +Hints: + +Use map() to generate a list. +Use lambda to define anonymous functions. + +Solution +squaredNumbers = map(lambda x: x**2, range(1,21)) +print squaredNumbers + + + + +#----------------------------------------# +7.2 + +Question: +Define a class named American which has a static method called printNationality. + +Hints: + +Use @staticmethod decorator to define class static method. + +Solution +class American(object): + @staticmethod + def printNationality(): + print "America" + +anAmerican = American() +anAmerican.printNationality() +American.printNationality() + + + + +#----------------------------------------# + +7.2 + +Question: +Define a class named American and its subclass NewYorker. + +Hints: + +Use class Subclass(ParentClass) to define a subclass. + +Solution: + +class American(object): + pass + +class NewYorker(American): + pass + +anAmerican = American() +aNewYorker = NewYorker() +print anAmerican +print aNewYorker + + + + +#----------------------------------------# + + +7.2 + +Question: +Define a class named Circle which can be constructed by a radius. The Circle class has a method which can compute the area. + +Hints: + +Use def methodName(self) to define a method. + +Solution: + +class Circle(object): + def __init__(self, r): + self.radius = r + + def area(self): + return self.radius**2*3.14 + +aCircle = Circle(2) +print aCircle.area() + + + + + + +#----------------------------------------# + +7.2 + +Define a class named Rectangle which can be constructed by a length and width. The Rectangle class has a method which can compute the area. + +Hints: + +Use def methodName(self) to define a method. + +Solution: + +class Rectangle(object): + def __init__(self, l, w): + self.length = l + self.width = w + + def area(self): + return self.length*self.width + +aRectangle = Rectangle(2,10) +print aRectangle.area() + + + + +#----------------------------------------# + +7.2 + +Define a class named Shape and its subclass Square. The Square class has an init function which takes a length as argument. Both classes have a area function which can print the area of the shape where Shape's area is 0 by default. + +Hints: + +To override a method in super class, we can define a method with the same name in the super class. + +Solution: + +class Shape(object): + def __init__(self): + pass + + def area(self): + return 0 + +class Square(Shape): + def __init__(self, l): + Shape.__init__(self) + self.length = l + + def area(self): + return self.length*self.length + +aSquare= Square(3) +print aSquare.area() + + + + + + + + +#----------------------------------------# + + +Please raise a RuntimeError exception. + +Hints: + +Use raise() to raise an exception. + +Solution: + +raise RuntimeError('something wrong') + + + +#----------------------------------------# +Write a function to compute 5/0 and use try/except to catch the exceptions. + +Hints: + +Use try/except to catch exceptions. + +Solution: + +def throws(): + return 5/0 + +try: + throws() +except ZeroDivisionError: + print "division by zero!" +except Exception, err: + print 'Caught an exception' +finally: + print 'In finally block for cleanup' + + +#----------------------------------------# +Define a custom exception class which takes a string message as attribute. + +Hints: + +To define a custom exception, we need to define a class inherited from Exception. + +Solution: + +class MyError(Exception): + """My own exception class + + Attributes: + msg -- explanation of the error + """ + + def __init__(self, msg): + self.msg = msg + +error = MyError("something wrong") + +#----------------------------------------# +Question: + +Assuming that we have some email addresses in the "username@companyname.com" format, please write program to print the user name of a given email address. Both user names and company names are composed of letters only. + +Example: +If the following email address is given as input to the program: + +john@google.com + +Then, the output of the program should be: + +john + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Hints: + +Use \w to match letters. + +Solution: +import re +emailAddress = raw_input() +pat2 = "(\w+)@((\w+\.)+(com))" +r2 = re.match(pat2,emailAddress) +print r2.group(1) + + +#----------------------------------------# +Question: + +Assuming that we have some email addresses in the "username@companyname.com" format, please write program to print the company name of a given email address. Both user names and company names are composed of letters only. + +Example: +If the following email address is given as input to the program: + +john@google.com + +Then, the output of the program should be: + +google + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Hints: + +Use \w to match letters. + +Solution: +import re +emailAddress = raw_input() +pat2 = "(\w+)@(\w+)\.(com)" +r2 = re.match(pat2,emailAddress) +print r2.group(2) + + + + +#----------------------------------------# +Question: + +Write a program which accepts a sequence of words separated by whitespace as input to print the words composed of digits only. + +Example: +If the following words is given as input to the program: + +2 cats and 3 dogs. + +Then, the output of the program should be: + +['2', '3'] + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Hints: + +Use re.findall() to find all substring using regex. + +Solution: +import re +s = raw_input() +print re.findall("\d+",s) + + +#----------------------------------------# +Question: + + +Print a unicode string "hello world". + +Hints: + +Use u'strings' format to define unicode string. + +Solution: + +unicodeString = u"hello world!" +print unicodeString + +#----------------------------------------# +Write a program to read an ASCII string and to convert it to a unicode string encoded by utf-8. + +Hints: + +Use unicode() function to convert. + +Solution: + +s = raw_input() +u = unicode( s ,"utf-8") +print u + +#----------------------------------------# +Question: + +Write a special comment to indicate a Python source code file is in unicode. + +Hints: + +Solution: + +# -*- coding: utf-8 -*- + +#----------------------------------------# +Question: + +Write a program to compute 1/2+2/3+3/4+...+n/n+1 with a given n input by console (n>0). + +Example: +If the following n is given as input to the program: + +5 + +Then, the output of the program should be: + +3.55 + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Hints: +Use float() to convert an integer to a float + +Solution: + +n=int(raw_input()) +sum=0.0 +for i in range(1,n+1): + sum += float(float(i)/(i+1)) +print sum + + +#----------------------------------------# +Question: + +Write a program to compute: + +f(n)=f(n-1)+100 when n>0 +and f(0)=1 + +with a given n input by console (n>0). + +Example: +If the following n is given as input to the program: + +5 + +Then, the output of the program should be: + +500 + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Hints: +We can define recursive function in Python. + +Solution: + +def f(n): + if n==0: + return 0 + else: + return f(n-1)+100 + +n=int(raw_input()) +print f(n) + +#----------------------------------------# + +Question: + + +The Fibonacci Sequence is computed based on the following formula: + + +f(n)=0 if n=0 +f(n)=1 if n=1 +f(n)=f(n-1)+f(n-2) if n>1 + +Please write a program to compute the value of f(n) with a given n input by console. + +Example: +If the following n is given as input to the program: + +7 + +Then, the output of the program should be: + +13 + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Hints: +We can define recursive function in Python. + + +Solution: + +def f(n): + if n == 0: return 0 + elif n == 1: return 1 + else: return f(n-1)+f(n-2) + +n=int(raw_input()) +print f(n) + + +#----------------------------------------# + +#----------------------------------------# + +Question: + +The Fibonacci Sequence is computed based on the following formula: + + +f(n)=0 if n=0 +f(n)=1 if n=1 +f(n)=f(n-1)+f(n-2) if n>1 + +Please write a program using list comprehension to print the Fibonacci Sequence in comma separated form with a given n input by console. + +Example: +If the following n is given as input to the program: + +7 + +Then, the output of the program should be: + +0,1,1,2,3,5,8,13 + + +Hints: +We can define recursive function in Python. +Use list comprehension to generate a list from an existing list. +Use string.join() to join a list of strings. + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: + +def f(n): + if n == 0: return 0 + elif n == 1: return 1 + else: return f(n-1)+f(n-2) + +n=int(raw_input()) +values = [str(f(x)) for x in range(0, n+1)] +print ",".join(values) + + +#----------------------------------------# + +Question: + +Please write a program using generator to print the even numbers between 0 and n in comma separated form while n is input by console. + +Example: +If the following n is given as input to the program: + +10 + +Then, the output of the program should be: + +0,2,4,6,8,10 + +Hints: +Use yield to produce the next value in generator. + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: + +def EvenGenerator(n): + i=0 + while i<=n: + if i%2==0: + yield i + i+=1 + + +n=int(raw_input()) +values = [] +for i in EvenGenerator(n): + values.append(str(i)) + +print ",".join(values) + + +#----------------------------------------# + +Question: + +Please write a program using generator to print the numbers which can be divisible by 5 and 7 between 0 and n in comma separated form while n is input by console. + +Example: +If the following n is given as input to the program: + +100 + +Then, the output of the program should be: + +0,35,70 + +Hints: +Use yield to produce the next value in generator. + +In case of input data being supplied to the question, it should be assumed to be a console input. + +Solution: + +def NumGenerator(n): + for i in range(n+1): + if i%5==0 and i%7==0: + yield i + +n=int(raw_input()) +values = [] +for i in NumGenerator(n): + values.append(str(i)) + +print ",".join(values) + + +#----------------------------------------# + +Question: + + +Please write assert statements to verify that every number in the list [2,4,6,8] is even. + + + +Hints: +Use "assert expression" to make assertion. + + +Solution: + +li = [2,4,6,8] +for i in li: + assert i%2==0 + + +#----------------------------------------# +Question: + +Please write a program which accepts basic mathematic expression from console and print the evaluation result. + +Example: +If the following string is given as input to the program: + +35+3 + +Then, the output of the program should be: + +38 + +Hints: +Use eval() to evaluate an expression. + + +Solution: + +expression = raw_input() +print eval(expression) + + +#----------------------------------------# +Question: + +Please write a binary search function which searches an item in a sorted list. The function should return the index of element to be searched in the list. + + +Hints: +Use if/elif to deal with conditions. + + +Solution: + +import math +def bin_search(li, element): + bottom = 0 + top = len(li)-1 + index = -1 + while top>=bottom and index==-1: + mid = int(math.floor((top+bottom)/2.0)) + if li[mid]==element: + index = mid + elif li[mid]>element: + top = mid-1 + else: + bottom = mid+1 + + return index + +li=[2,5,7,9,11,17,222] +print bin_search(li,11) +print bin_search(li,12) + + + + +#----------------------------------------# +Question: + +Please write a binary search function which searches an item in a sorted list. The function should return the index of element to be searched in the list. + + +Hints: +Use if/elif to deal with conditions. + + +Solution: + +import math +def bin_search(li, element): + bottom = 0 + top = len(li)-1 + index = -1 + while top>=bottom and index==-1: + mid = int(math.floor((top+bottom)/2.0)) + if li[mid]==element: + index = mid + elif li[mid]>element: + top = mid-1 + else: + bottom = mid+1 + + return index + +li=[2,5,7,9,11,17,222] +print bin_search(li,11) +print bin_search(li,12) + + + + +#----------------------------------------# +Question: + +Please generate a random float where the value is between 10 and 100 using Python math module. + + + +Hints: +Use random.random() to generate a random float in [0,1]. + + +Solution: + +import random +print random.random()*100 + +#----------------------------------------# +Question: + +Please generate a random float where the value is between 5 and 95 using Python math module. + + + +Hints: +Use random.random() to generate a random float in [0,1]. + + +Solution: + +import random +print random.random()*100-5 + + +#----------------------------------------# +Question: + +Please write a program to output a random even number between 0 and 10 inclusive using random module and list comprehension. + + + +Hints: +Use random.choice() to a random element from a list. + + +Solution: + +import random +print random.choice([i for i in range(11) if i%2==0]) + + +#----------------------------------------# +Question: + +Please write a program to output a random number, which is divisible by 5 and 7, between 0 and 10 inclusive using random module and list comprehension. + + + +Hints: +Use random.choice() to a random element from a list. + + +Solution: + +import random +print random.choice([i for i in range(201) if i%5==0 and i%7==0]) + + + +#----------------------------------------# + +Question: + +Please write a program to generate a list with 5 random numbers between 100 and 200 inclusive. + + + +Hints: +Use random.sample() to generate a list of random values. + + +Solution: + +import random +print random.sample(range(100), 5) + +#----------------------------------------# +Question: + +Please write a program to randomly generate a list with 5 even numbers between 100 and 200 inclusive. + + + +Hints: +Use random.sample() to generate a list of random values. + + +Solution: + +import random +print random.sample([i for i in range(100,201) if i%2==0], 5) + + +#----------------------------------------# +Question: + +Please write a program to randomly generate a list with 5 numbers, which are divisible by 5 and 7 , between 1 and 1000 inclusive. + + + +Hints: +Use random.sample() to generate a list of random values. + + +Solution: + +import random +print random.sample([i for i in range(1,1001) if i%5==0 and i%7==0], 5) + +#----------------------------------------# + +Question: + +Please write a program to randomly print a integer number between 7 and 15 inclusive. + + + +Hints: +Use random.randrange() to a random integer in a given range. + + +Solution: + +import random +print random.randrange(7,16) + +#----------------------------------------# + +Question: + +Please write a program to compress and decompress the string "hello world!hello world!hello world!hello world!". + + + +Hints: +Use zlib.compress() and zlib.decompress() to compress and decompress a string. + + +Solution: + +import zlib +s = 'hello world!hello world!hello world!hello world!' +t = zlib.compress(s) +print t +print zlib.decompress(t) + +#----------------------------------------# +Question: + +Please write a program to print the running time of execution of "1+1" for 100 times. + + + +Hints: +Use timeit() function to measure the running time. + +Solution: + +from timeit import Timer +t = Timer("for i in range(100):1+1") +print t.timeit() + +#----------------------------------------# +Question: + +Please write a program to shuffle and print the list [3,6,7,8]. + + + +Hints: +Use shuffle() function to shuffle a list. + +Solution: + +from random import shuffle +li = [3,6,7,8] +shuffle(li) +print li + +#----------------------------------------# +Question: + +Please write a program to shuffle and print the list [3,6,7,8]. + + + +Hints: +Use shuffle() function to shuffle a list. + +Solution: + +from random import shuffle +li = [3,6,7,8] +shuffle(li) +print li + + + +#----------------------------------------# +Question: + +Please write a program to generate all sentences where subject is in ["I", "You"] and verb is in ["Play", "Love"] and the object is in ["Hockey","Football"]. + +Hints: +Use list[index] notation to get a element from a list. + +Solution: + +subjects=["I", "You"] +verbs=["Play", "Love"] +objects=["Hockey","Football"] +for i in range(len(subjects)): + for j in range(len(verbs)): + for k in range(len(objects)): + sentence = "%s %s %s." % (subjects[i], verbs[j], objects[k]) + print sentence + + +#----------------------------------------# +Please write a program to print the list after removing delete even numbers in [5,6,77,45,22,12,24]. + +Hints: +Use list comprehension to delete a bunch of element from a list. + +Solution: + +li = [5,6,77,45,22,12,24] +li = [x for x in li if x%2!=0] +print li + +#----------------------------------------# +Question: + +By using list comprehension, please write a program to print the list after removing delete numbers which are divisible by 5 and 7 in [12,24,35,70,88,120,155]. + +Hints: +Use list comprehension to delete a bunch of element from a list. + +Solution: + +li = [12,24,35,70,88,120,155] +li = [x for x in li if x%5!=0 and x%7!=0] +print li + + +#----------------------------------------# +Question: + +By using list comprehension, please write a program to print the list after removing the 0th, 2nd, 4th,6th numbers in [12,24,35,70,88,120,155]. + +Hints: +Use list comprehension to delete a bunch of element from a list. +Use enumerate() to get (index, value) tuple. + +Solution: + +li = [12,24,35,70,88,120,155] +li = [x for (i,x) in enumerate(li) if i%2!=0] +print li + +#----------------------------------------# + +Question: + +By using list comprehension, please write a program generate a 3*5*8 3D array whose each element is 0. + +Hints: +Use list comprehension to make an array. + +Solution: + +array = [[ [0 for col in range(8)] for col in range(5)] for row in range(3)] +print array + +#----------------------------------------# +Question: + +By using list comprehension, please write a program to print the list after removing the 0th,4th,5th numbers in [12,24,35,70,88,120,155]. + +Hints: +Use list comprehension to delete a bunch of element from a list. +Use enumerate() to get (index, value) tuple. + +Solution: + +li = [12,24,35,70,88,120,155] +li = [x for (i,x) in enumerate(li) if i not in (0,4,5)] +print li + + + +#----------------------------------------# + +Question: + +By using list comprehension, please write a program to print the list after removing the value 24 in [12,24,35,24,88,120,155]. + +Hints: +Use list's remove method to delete a value. + +Solution: + +li = [12,24,35,24,88,120,155] +li = [x for x in li if x!=24] +print li + + +#----------------------------------------# +Question: + +With two given lists [1,3,6,78,35,55] and [12,24,35,24,88,120,155], write a program to make a list whose elements are intersection of the above given lists. + +Hints: +Use set() and "&=" to do set intersection operation. + +Solution: + +set1=set([1,3,6,78,35,55]) +set2=set([12,24,35,24,88,120,155]) +set1 &= set2 +li=list(set1) +print li + +#----------------------------------------# + +With a given list [12,24,35,24,88,120,155,88,120,155], write a program to print this list after removing all duplicate values with original order reserved. + +Hints: +Use set() to store a number of values without duplicate. + +Solution: + +def removeDuplicate( li ): + newli=[] + seen = set() + for item in li: + if item not in seen: + seen.add( item ) + newli.append(item) + + return newli + +li=[12,24,35,24,88,120,155,88,120,155] +print removeDuplicate(li) + + +#----------------------------------------# +Question: + +Define a class Person and its two child classes: Male and Female. All classes have a method "getGender" which can print "Male" for Male class and "Female" for Female class. + +Hints: +Use Subclass(Parentclass) to define a child class. + +Solution: + +class Person(object): + def getGender( self ): + return "Unknown" + +class Male( Person ): + def getGender( self ): + return "Male" + +class Female( Person ): + def getGender( self ): + return "Female" + +aMale = Male() +aFemale= Female() +print aMale.getGender() +print aFemale.getGender() + + + +#----------------------------------------# +Question: + +Please write a program which count and print the numbers of each character in a string input by console. + +Example: +If the following string is given as input to the program: + +abcdefgabc + +Then, the output of the program should be: + +a,2 +c,2 +b,2 +e,1 +d,1 +g,1 +f,1 + +Hints: +Use dict to store key/value pairs. +Use dict.get() method to lookup a key with default value. + +Solution: + +dic = {} +s=raw_input() +for s in s: + dic[s] = dic.get(s,0)+1 +print '\n'.join(['%s,%s' % (k, v) for k, v in dic.items()]) + +#----------------------------------------# + +Question: + +Please write a program which accepts a string from console and print it in reverse order. + +Example: +If the following string is given as input to the program: + +rise to vote sir + +Then, the output of the program should be: + +ris etov ot esir + +Hints: +Use list[::-1] to iterate a list in a reverse order. + +Solution: + +s=raw_input() +s = s[::-1] +print s + +#----------------------------------------# + +Question: + +Please write a program which accepts a string from console and print the characters that have even indexes. + +Example: +If the following string is given as input to the program: + +H1e2l3l4o5w6o7r8l9d + +Then, the output of the program should be: + +Helloworld + +Hints: +Use list[::2] to iterate a list by step 2. + +Solution: + +s=raw_input() +s = s[::2] +print s +#----------------------------------------# + + +Question: + +Please write a program which prints all permutations of [1,2,3] + + +Hints: +Use itertools.permutations() to get permutations of list. + +Solution: + +import itertools +print list(itertools.permutations([1,2,3])) + +#----------------------------------------# +Question: + +Write a program to solve a classic ancient Chinese puzzle: +We count 35 heads and 94 legs among the chickens and rabbits in a farm. How many rabbits and how many chickens do we have? + +Hint: +Use for loop to iterate all possible solutions. + +Solution: + +def solve(numheads,numlegs): + ns='No solutions!' + for i in range(numheads+1): + j=numheads-i + if 2*i+4*j==numlegs: + return i,j + return ns,ns + +numheads=35 +numlegs=94 +solutions=solve(numheads,numlegs) +print solutions + +#----------------------------------------# + + diff --git a/README b/README new file mode 100644 index 00000000..e69de29b diff --git a/python contents.docx b/python contents.docx new file mode 100644 index 0000000000000000000000000000000000000000..184715d814c85e59372e9ab4b76325af610ca75a GIT binary patch literal 76306 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΋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

D_X_?c44Z$cnW#<5YCLyqghxfUKr#ekZ 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 +Python Object Types, Numeric Types, Data Structures, Control Structures, Scopes and Arguments +2 1. Your first program +2. Declaring Functions +3. Python Data types vs Other Languages +4. Documenting Functions +5. Everything is an Object +6. The Import Search Path +7. What is an Object ? +8. Indenting Code +9. Testing Modules +10. Native Datatypes +1. Dictionaries +2. List +3. Tuples +11. Variables & referencing 1. Data Structures 1. Types and Objects +2. Operators and Expressions +3. Program Structure and Control Flow +4. Functions and Functional Programming +5. Classes and Object Oriented Programming +6. Modules, Packages and Distribution +7. Input and Output +8. Execution Environment +9. Testing, Debugging, Profiling and Tuning + +Data Structures, Algorithms & Code simplification +String & Text Handling 1. Python Overview +1. Built-in Data types +2. Control Structures +3. Module +4. OOPs +2. Basics +1. Lists +2. Dictionaries +3. Tuple +4. Sets +5. Strings +6. Control Flow +3. Functions +4. Modules and Scoping Rules +5. Python Programs 1. Introducing Python Object Types +1. Why use built-in Types ? +2. Core data types +3. Numbers, Lists, Dictionaries, Tuples, Files, Other Core Types +4. User Defined Classes +2. Numeric Types +1. Literals, Built-in tools, expression operators +2. Formats, Comparisons, Division, Precision +3. Complex Numbers +4. Hexadecimal, Octal & Binary +5. Bitwise Operations +6. Decimal, Fraction, Sets, Booleans + +1. Statements & Syntax +2. Assignments, Expressions & Syntax +3. If Tests & Syntax Rules +4. Scopes +5. Arguments +Built-in functions, Function Design, Recursive Functions, Introspection, Annotations, Lambda, Filter and Reduce +3 1. Power of Introspection +1. Optional and Named Arguments +2. type, str, dir and other built-in functions +3. Object References with getattr +4. Filtering Lists +5. Lambda Functions +6. Real world Lambda functions + None 1. Built-in functions +2. Python run-time services None Built-in functions are covered as part of the topic above but from a numeric perspective +1. Advanced Function Topics +1. Function Design +2. Recursive Functions +3. Attributes and Annotation +4. Lambda +5. Mapping Functions over sequences +6. Filter and Reduce + +Special Class Attributes +Display Tool +OOPS, Modules +4 1. Objects and Object Orientation +1. Importing Modules +2. Defining Classes +3. Initializing and Coding Classes +4. Self & __init__ +5. Instantiating Classes +6. Garbage Collection +7. Wrapper Classes +8. Special Class Methods +9. Advanced Class Methods +10. Class Attributes +11. Private Functions None Covered partially section 2 1. Packages +2. Data Types and Objects +3. Advanced Object Oriented Features 1. Modules +1. Why use Modules ? +2. Program Architecture +3. Module Search Path +4. Module Creation & Usage +5. Namespaces +6. Reloading Modules +7. Packages +2. Advanced Module Topics +1. Data Hiding in Modules +2. as Extension for import and from +3. Modules are Objects: Metaprograms +4. Transitive Module Reloads +5. Module Design Concepts +6. Module Gotchas +3. OOP +1. Why use classes ? +2. Classes & Instances +3. Attribute Inheritance Search +4. Class Method Calls +5. Class Trees +6. Class Objects & Default Behavior +7. Instance Objects are Concrete Items +8. Intercepting Python Operators +9. Classes Vs. Dictionaries +10. Class customization by Inheritance +11. Operator Overloading +12. Subclasses +13. Polymorphism in Action +14. Designing with Classes +15. Mix-in Classes +Advanced Class Topics +5 None None None None 1. Advanced Class Topics +1. Extending Types by Embedding +2. Extending Types by Subclassing +3. Static and Class Methods +4. Decorators and Metaclasses +5. Class Gotchas +Exceptions +6 1. Exceptions and File Handling +1. Handling Exceptions +2. Using exceptions for other purposes 1. Exceptions 1. Exceptions Basics +1. Why use Exceptions ? +2. Default Exception Handler +3. User-Defined Exceptions +4. Class Based Exceptions +5. Designing with Exceptions +XML, HTTP, SOAP, Network Programming, I18N, Unicode +7 1. Regular Expressions +2. Parsing / Processing Mark-up languages (HTML, XML) +1. Unicode +3. HTTP Web Services +1. Headers +2. Debugging +4. SOAP Web Services 1. Networking +2. Internet +3. Email +4. Internationalization and Localization 1. Network Programming and Sockets +2. Internet Application Programming +3. Web Programming +4. Internet Data Handling & Encoding 1. Network, web programming 1. Unicode and Bytes Strings +Miscellaneous +8 None 1. Algorithms +2. Cryptography +3. Data compression and archiving +4. Processes and Threads +5. Data persistence & exchange 1. Extending & Embedding Python 1. GUI None From ed89b7365e57105a7bf89107a452ebb970810138 Mon Sep 17 00:00:00 2001 From: mukund26 Date: Mon, 31 Jul 2017 23:29:55 +0530 Subject: [PATCH 2/5] Added one question --- ...thon challenging programming exercises.txt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/100+ Python challenging programming exercises.txt b/100+ Python challenging programming exercises.txt index 66c00215..c9a1bb70 100644 --- a/100+ Python challenging programming exercises.txt +++ b/100+ Python challenging programming exercises.txt @@ -2372,5 +2372,25 @@ solutions=solve(numheads,numlegs) print solutions #----------------------------------------# +Question: + +The Doctor needs some stuff for his next adventure. He is currently on an alien planet and doesn't have any currency of that planet. But, he has a valuable gem that he found few days back on a planet when he was on his last adventure. The gem has some value N. He can get some coins with value 2 and some with 3 in exchange of the gem. Also, the sum of values of the coins will be equal to the value of the gem. Also, he wants to have maximum number of 3 valued coins as he'll have to carry less number of coins.Your task is to calculate the maximum number of 3 valued coins that he can get. + +Hint: +use modulus of 3 + +Solution: + +t=int(raw_input()) +while(t): + n=int(raw_input()) + r=n/3 + y=n-r*3 + if y==1: + r-=1 + print r + t-=1 + +#----------------------------------------------------------------------------------------------------------------------------------------------# From fe24267710994d1232627a3ae973cedb070ac469 Mon Sep 17 00:00:00 2001 From: mukund26 Date: Tue, 1 Aug 2017 01:03:07 +0530 Subject: [PATCH 3/5] removed # --- 100+ Python challenging programming exercises.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/100+ Python challenging programming exercises.txt b/100+ Python challenging programming exercises.txt index c9a1bb70..017cb264 100644 --- a/100+ Python challenging programming exercises.txt +++ b/100+ Python challenging programming exercises.txt @@ -2391,6 +2391,5 @@ while(t): print r t-=1 -#----------------------------------------------------------------------------------------------------------------------------------------------# From 551f3e8dc48198c1d7a0102c877e843f51d0a072 Mon Sep 17 00:00:00 2001 From: mukund26 Date: Tue, 1 Aug 2017 01:06:54 +0530 Subject: [PATCH 4/5] remade change --- 100+ Python challenging programming exercises.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/100+ Python challenging programming exercises.txt b/100+ Python challenging programming exercises.txt index 017cb264..c9a1bb70 100644 --- a/100+ Python challenging programming exercises.txt +++ b/100+ Python challenging programming exercises.txt @@ -2391,5 +2391,6 @@ while(t): print r t-=1 +#----------------------------------------------------------------------------------------------------------------------------------------------# From 39346083f31a78011e532875e16deba04c0e5d45 Mon Sep 17 00:00:00 2001 From: mukund26 Date: Wed, 30 Aug 2017 01:44:12 +0530 Subject: [PATCH 5/5] made changes --- 100+ Python challenging programming exercises.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/100+ Python challenging programming exercises.txt b/100+ Python challenging programming exercises.txt index 4c4e725b..c3095654 100644 --- a/100+ Python challenging programming exercises.txt +++ b/100+ Python challenging programming exercises.txt @@ -2372,7 +2372,7 @@ solutions=solve(numheads,numlegs) print solutions #----------------------------------------# -<<<<<<< HEAD + Question: The Doctor needs some stuff for his next adventure. He is currently on an alien planet and doesn't have any currency of that planet. But, he has a valuable gem that he found few days back on a planet when he was on his last adventure. The gem has some value N. He can get some coins with value 2 and some with 3 in exchange of the gem. Also, the sum of values of the coins will be equal to the value of the gem. Also, he wants to have maximum number of 3 valued coins as he'll have to carry less number of coins.Your task is to calculate the maximum number of 3 valued coins that he can get. @@ -2393,7 +2393,6 @@ while(t): t-=1 #----------------------------------------------------------------------------------------------------------------------------------------------# -======= ->>>>>>> 81b147ad8286a29eb20fddbf6e2959b533a086d1 +