def take_info(arr2,arr, number):
arr[0] = number
name = input()
arr[1] = name
grade = int(input())
arr[2] = grade
second_grade = int(input())
arr[3] = second_grade
arr2. append(arr)
def main():
number = int(input())
arr = [0] * 4
count =1
arr2 = // ? I dont know how to do it, range must be equal to count but how? Thats the point 1.
while number>0:
take_info(arr2,arr,number)
count +=1
number = int(input())
main()
take_info function must return while ' number >0 ', when the number is 0 or less than 0 loop would end. And I want to add these values and name to a list and the other list's each element should be list. Could anyone can help me ?
Any time you're repeating something, you probably want to use a loop. If you're using a loop to build a list, you probably want to use a list comprehension.
arr = [input() for _ in range(3)]
Given your updated question, I might do it like this:
def take_info(number):
return [number, input(), int(input()), int(input())]
def main():
return [take_info(number) for number in range(int(input()))]
print(main())
If it's important that the numbers count down instead of up, you can do that by modifying the range call so that it goes from N-1 to 0 instead of 0 to N-1.
Alternatively, if you want to have space separated inputs in one line, you can use this:
my_list = list(map(str,input().split()))
for i in range(len(my_list)):
if (isinstance(my_list(i), int)):
temp = int(my_list(i))
my_list.pop(i)
my_list.insert(i, temp)
Input: Car Hockey Cricket
my_list = ['Car', 'Hockey', 'Cricket']
Ofcourse, the data type would be the same here. You'd need to make changes after appending incase of int, float, etc.
The stereotype of Python is that “everything is a dict”. Your application might be such a case.
One way to organize the data you have coming in might be a dict where each entry is also a dict.
def take_info():
record = dict()
record['name'] = input('Name: ')
record['grade'] = int(input('Grade: '))
record['second_grade'] = int(input('Second grade: '))
return record
def main():
course_records = dict()
count = 0
number = int(input('ID number: '))
while number > 0:
course_records[number] = take_info()
count +=1
number = int(input('ID number: '))
i recently started to learn python and i wrote this code to sort numbers least to greatest inputted by the user but after the second number, i get the error "NameError: name 'minimum' is not defined" any help is appreciated. also, I cannot use any built-in functions to sort the numbers as this is a challenge for a class
unsorted_list = []
sorted_list = []
while True:
unsortednum = input("enter a number or 0 to stop: ")
if unsortednum == 0:
while unsorted_list:
minimum = unsorted_list[0]
for item in unsorted_list:
if item < minimum:
minimum = item
sorted_list.append(minimum)
unsorted_list.remove(minimum)
print(sorted_list)
else:
unsorted_list.append(unsortednum)
This is one way to do it.
sorted_list = []
while True:
# The input you get is a string so you need to convert it to int
unsortednum = int(input("enter a number or 0 to stop: "))
# Use break to exit if the user input's 0
if unsortednum == 0:
break
else:
# This first creates a list of all numbers lesser than equal to unsortednum then joins the first list with a second list
# that only contains unsortednum. After that a third list with all numbers greater than unsortednum is joined as well.
sorted_list = [i for i in sorted_list if i <= unsortednum] + [unsortednum] + [i for i in sorted_list if i > unsortednum];
print("Current => ",sorted_list)
print("Final => ",sorted_list)
Doing the least amount of editing to your code:
unsorted_list = []
sorted_list = []
while True:
unsortednum = int(input("enter a number or 0 to stop: "))
if unsortednum == 0:
while unsorted_list:
minimum = unsorted_list[0]
for item in unsorted_list[1:]:
if item < minimum:
minimum = item
sorted_list.append(minimum)
unsorted_list.remove(minimum)
print(sorted_list)
else:
unsorted_list.append(unsortednum)
The only thing missing was assigning unsortednum as an int done by unsortednum = int(input())
Also, in order to not check a value with itself, in the for loop I changed unsorted_list to unsorted_list[1:], representing every value in the list except unsorted_list[0]
def recursiveSum(lst):
if len(lst) == 0:
return 0
else:
#print(str(type(lst))+'\n')
num = lst[len(lst)-1]
return recursiveSum(lst.pop()) + num
size = int(input("How many number do you want to enter? = "))
lst=[]
for i in range(size):
lst.append(input("Enter number "+str(i+1)+" = " ))
print(recursiveSum(lst))
In this code i am trying to find sum of list of numbers recursively , this is my first attempt with recursions , i think my approach and algorithm was correct , the list when passed to the recursiveSum() function somehow makes it string in the else part , the commented line when executed ends up printing
class 'list'
class 'str'
I don't understand how the print statement prints both list and str.
Can someone explain this ?
I think you forgot to type cast to int when input:
lst.append(int(input("Enter number "+str(i+1)+" = " )))
Two problems:
you do not convert your inputs into numerics/integers
you recurse using the popped element not the remaining list
Fix:
def recursiveSum(lst):
if len(lst) == 0:
return 0
else:
num = lst[0] # use the first one
return recursiveSum(lst[1:]) + num # and recurse on the remaining slice
size = int(input("How many number do you want to enter? = "))
lst=[]
for i in range(size):
lst.append(int(input("Enter number "+str(i+1)+" = " )))
print(recursiveSum(lst))
list.pop() returns the element popped from the list - not the list-remainder.
I'm working on this task in python, but I'm not sure if I'm adding the elements to a list the right way. So basically I'm suppose to create a create_list function the takes the size of the list and prompt the user for that many values and store each value into the list. The create_list function should return this newly created list. Finally the main() function should prompt the user for the number of values to be entered, pass that value to the create_list function to set up the list, and then call the get_total function to print the total of the list. Please tell me what I'm missing or doing wrong. Thank you so much in advance.
def main():
# create a list
myList = []
number_of_values = input('Please enter number of values: ')
# Display the total of the list elements.
print('the list is: ', create_list(number_of_values))
print('the total is ', get_total(myList))
# The get_total function accepts a list as an
# argument returns the total sum of the values in
# the list
def get_total(value_list):
total = 0
# calculate the total of the list elements
for num in value_list:
total += num
#Return the total.
return total
def create_list(number_of_values):
myList = []
for num in range(number_of_values):
num = input('Please enter number: ')
myList.append(num)
return myList
main()
In main you created empty list, but didn't assign create_list result to it. Also you should cast user input to int:
def main():
number_of_values = int(input('Please enter number of values: ')) # int
myList = create_list(number_of_values) # myList = function result
total = get_total(myList)
print('the list is: ', myList)
print('the total is ', total)
def get_total(value_list):
total = 0
for num in value_list:
total += num
return total
def create_list(number_of_values):
myList = []
for _ in range(number_of_values): # no need to use num in loop here
num = int(input('Please enter number: ')) # int
myList.append(num)
return myList
if __name__ == '__main__': # it's better to add this line as suggested
main()
You must convert inputs to integer. input() returns a string object. Just do
number_of_values = int(input('Please enter number of values: '))
And with every input you want to use as integer.
First Problem is you are not passing myList to create_list function, so myList inside of main is not going to get updated.
If you want to create a list inside the function and return it, and then get a total for that list, you need to first store the list somewhere. parse the inputs as integer, also, always do if __name__ == '__main__':. The Following code should work and print the correct result :)
def main():
number_of_values = int(input('Please enter number of values: '))
myList = create_list(number_of_values)
print('the list is: ', myList)
print('the total is ', get_total(myList))
def get_total(value_list):
total = 0
for num in value_list:
total += num
return total
def create_list(number_of_values):
myList = []
for num in range(number_of_values):
num = int(input('Please enter number: '))
myList.append(num)
return myList
if __name__ == '__main__':
main()
An alternative method to the posted solutions could be to have one function that creates your said list and finds the total of that list. In the solution, the map function goes through all the values given to it and only keeps the integers (The split method is used to remove commas and spaces from the values). This solution will print your list and values, but will not return any said value, so it will produce a NoneType, if you were to examine the function at the end.
def main():
aListAndTotal()
#Creates list through finding the integers and removing the commas
#For loop iterates through list and finds the total
#Does not return a value, but prints what's stored in the variables
def aListAndTotal():
myList = map(int, input("Please enter number of values: ").split(","))
total = 0
for num in myList:
total += num
print ("The list is: ", myList)
print ("The total is: ", total)
if __name__ == "__main__":
main()
List is one of the most important data structure in python where you can add any type of element to the list.
a=[1,"abc",3.26,'d']
To add an element to the list, we can use 3 built in functions:
a) insert(index,object)
This method can be used to insert the object at the preferred index position.For eg, to add an element '20' at the index 1:
a.index(1,20)
Now , a=[1,20,'abc',3.26,'d']
b)append(object)
This will add the object at the end of the list.For eg, to add an element "python" at the end of the list:
a.append("python")
Now, a=[1,20,'abc',3.26,'d','python']
c)extend(object/s)
This is used to add the object or objects to the end of the list.For eg, to add a tuple of elements to the end of the list:
b=(1.2, 3.4, 4.5)
a.extend(b)
Now , a=[1,20,'abc',3.26,'d','python',1.2, 3.4, 4.5]
If in the above case , instead of using extend, append is used ,then:
a.append(b)
Now , a=[1,20,'abc',3.26,'d','python',(1.2, 3.4, 4.5)]
Because append takes only one object as argument and it considers the above tuple to be a single argument that needs to be appended to the end of the list.
You need to assign the return value of create_list() to a variable and pass that into get_total()
myList = create_list()
total = get_total(myList)
print("list " + str(myList))
print("total " + str(total))
Adding an element to an existing list in python is trivial.
Assume who have a list names list1
>>> list1 = ["one" , "two"]
>>> list1 = list1 + "three"
this last command will add the element "three" to the list. This is really simple, because lists are objects in python. When you print list1 you get:
["one" , "two" , "three"]
Done
I'm trying to make a program that will generate a random list, length being determined by user input, that will be sorted. I'm having a problem accessing/passing my randomly generated list to other functions. For example, below, I can't print my list x. I've also tried making a function specifically for printing the list, yet that won't work either. How can I pass the list x?
unsorted_list = []
sorted_list = []
# Random list generator
def listgen(y):
"""Makes a random list"""
import random
x = []
for i in range(y):
x.append(random.randrange(100))
i += 1
return x
def main():
y = int(input("How long would you like to make the list?: "))
listgen(y)
print(x)
main()
x = listgen(y)
def main():
y = int(input("How long would you like to make the list?: "))
x = listgen(y)
print(x)
x should be assigned based on return value of your function
l = listgen(y)
print(l)
The variable x is local to listgen(). To get the list inside of main(), assign the return value to a variable.
In your main, this:
def main():
y = int(input("How long would you like to make the list?: "))
listgen(y)
print(x)
should be:
def main():
y = int(input("How long would you like to make the list?: "))
x = listgen(y) # Must assign the value returned to a variable to use it
print(x)
Does that make sense?