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
Related
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: '))
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 am trying to have the user input a series of numbers (separated by commas) to receive the total of them.
I have tried (with no luck):
values = input("Input some comma seprated numbers: ")
numbersSum = sum(values)
print ("sum of list element is : ", numbersSum)
values = input("Input some comma seprated numbers: ")
list = values.split(",")
sum(list)
print ("The total sum is: ", sum)
If the user inputs 5.5,6,5.5 the expected output will be 17.
You're almost there.
After splitting, the values will still be strings, so you have to map them to float.
values = "5.5,6,5.5" # input("Input some comma seprated numbers: ")
L = list(map(float, values.split(",")))
print ("The total sum is: ", sum(L))
Output:
The total sum is: 17.0
Side note: Please don't name your variables list or sum, otherwise you will shadow the python built-ins!
After you split the values by comma into a list, you need to convert them from strings to numbers. You can do that with
values = input("Input some comma seprated numbers: ")
lst = values.split(",")
lst = [float(x) for x in lst]
total = sum(lst)
print("The total sum is: ", total)
For reference, see List Comprehensions in Python.
(Also, you shouldn't use list as a variable name, since that's a function in Python.)
You have to convert the inputs to float:
numbers = input("Input some comma seprated numbers: ")
result = sum([float(n) for n in numbers.split(',')])
print(result)
You have to convert to numbers before adding them together.
For example, you could convert them all into floats:
input_str = input("Input some comma seprated numbers: ")
# Option1: without error checking
number_list = [float(s) for s in input_str.split(',')]
# Option2: with error checking, if you are not sure if the user will input only valid numbers
number_list = []
for s in input_str.split(','):
try:
n = float(s)
number_list.append(n)
except ValueError:
pass
print("The list of valid numbers is:", number_list)
print("The sum of the list is:", sum(number_list))
# empty list to store the user inputs
lst = []
# a loop that will keep taking input until the user wants
while True:
# ask for the input
value = input("Input a number: ")
# append the value to the list
lst.append(value)
# if the user wants to exit
IsExit = input("enter exit to exit")
if 'exit' in IsExit:
break
# take the sum of each element (casted to float) in the lst
print("The sum of the list: {} ".format(sum([float(x) for x in lst])))
OUTPUT:
Input a number: 5.5
enter exit to exitno
Input a number: 6
enter exit to exitno
Input a number: 5.5
enter exit to exitexit
The sum of the list: 17.0
It's hard to know what went wrong w\o a sample of the error\output code.
I think the issue is in getting the sum of list (very bad name btw) when it's a list of strings.
please try the following
values = input("Input some comma seprated numbers: ")
lst = values.split(",")
lst = [int(curr) for curr in lst]
sum(lst)
print ("The total sum is: ", sum)
This code will work when expecting integers, if you want floats then change the list comprehension.
Try not to name objects with the same name of standard objects such as list,int,str,float etc...
use below
print('sum of input is :',sum(list(map(float,input('Input some comma separated numbers: ').split(',')))))
Hello friends of the internet,
I just began working in Python a few days ago and I am trying to create a starter program. All I am looking to do is create something that can take an input set of numbers (non-negative), from the user, and print the value of the highest number in the set.
I have read a few things about recursion functions that may be able to accomplish this task, but like I said, I'm a newby! If any of you professionals can show me something that can do just that I would be incredibly grateful.
def Max(list):
if len(list) == 1:
return list[0]
else:
m = Max(list[1:])
return m if m > list[0] else list[0]
def main():
list = eval(raw_input(" please enter a list of numbers: "))
print("the largest number is: ", Max(list))
main()
You have few issues in the code:
Don't use Python keywords like list as variable names
Don't use eval() when taking input from user
You can use built-in max() unless you want to create the function for educational purposes
So heres a better version of your code:
def main():
my_list = raw_input(" please enter a list of numbers: ").split()
my_list = map(int, my_list) # convert each item to int
print("the largest number is: ", max(my_list))
main()
If you are using Python3 change raw_input() to input() and if you are using Python2 change print('item1', 'item2') to print 'item1', 'item2'
EDIT:
You can use a generator expression with max() to do that too as the following:
def main():
my_list = raw_input(" please enter a list of numbers: ").split()
max_num = max(int(x) for x in my_list)
print("the largest number is: {}".format(max_num))
main()
Single line answer:
print (max(list(map(int,input().split()))))
Explanation:
a=raw_input() #Take input in string.
b=a.split() #Split string by space.
c=map(int,b) # Convert each token into int.
d=max(c) #Evalute max element from list using max function.
print (d)
Edit:
print (max(map(int,input().split())))
I'm a beginner and taking an intro Python course. The first part of my lab assignment asks me to create a list with numbers entered by the user. I'm a little confused. I read some other posts here that suggest using "a = [int(x) for x in input().split()]" but I'm not sure how to use it or why, for that matter. The code I wrote before based on the things I've read in my textbook is the following:
while True:
num = int(input('Input a score (-99 terminates): '))
if num == -99:
break
Here's the problem from the professor:
Your first task here is to input score values to a list called scores and you
will do this with a while loop. That is, prompt user to enter value for scores
(integers) and keep on doing this until user enters the value of -99.
Each time you enter a value you will add the score entered to list scores. The
terminating value of -99 is not added to the list
Hence the list scores should be initialized as an empty list first using the
statement:
scores = []
Once you finish enter the values for the list, define and called a find called
print_scores() that will accept the list and then print each value in the list in
one line separate by space.
You should use a for-loop to print the values of the list.
So yeah, you want to continually loop a scan, asking for input, and check the input every time. If it's -99, then break. If its not, append it to the list. Then pass that to the print function
def print_list(l):
for num in l:
print(num, ' ', end='')
l = []
while True:
s = scan("enter some number (-99 to quit)")
if s == "-99":
break
l.append(int(s))
print_list(l)
the print(num, ' ', end='') is saying "print num, a space, and not a newline"
I think this will do the job:
def print_scores(scores):
for score in scores:
print(str(score), end = " ")
print("\n")
scores = []
while True:
num = int(input('Input a score (-99 terminates)'))
if num == -99:
break
scores.append(num)
print_scores(scores)
scores = [] creates an empty array and scores.append() adds the element to the list.
print() will take end = ' ' so that it separates each result with a space instead of a newline (\n') all while conforming to the requirement to use a loop for in the assignment. str(score) ensures the integer is seen as a string, but it's superfluous here.
This is actually not an elegant way to print the scores, but the teacher probably wanted to not rush things.