Help please, why doesn't it show the next input?
Hey, I am very new to python, I am 13 years old. I want to be able to make a program the caculates the mean, meadian and mode. When i run the program, an input field pops up and says 'Does your list contain, a number or a string?' like I want it to, but when I type in something that is not one of valid field options: "String" or "string" or "STRING" or "s" or "S" or "str" or "Number" or "number" or "NUMBER" or "N" or "N" or "int" or "num", nothing happens, please tell me what I did wrong. Thanks :D Here is my code: #- Variables that I am using, including the list. -# #False means num #True means string num_or_string = "" amount_numbers = [] List = [] I = "Does your list contain, a number or a string?" #- Functions that I am using.-# input(I) def NOS(): if I == "String" or "string" or "STRING" or "s" or "S" or "str": pass elif I == "Number" or "number" or "NUMBER" or "N" or "N" or "int" or "num": pass else: global I I = "You did not enter a valid field, :P Sorry." input(I) -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
In William Bryant writes: > Hey, I am very new to python, I am 13 years old. I want to be able to make = > a program the caculates the mean, meadian and mode. When i run the program,= > an input field pops up and says 'Does your list contain, a number or a str= > ing?' like I want it to, but when I type in something that is not one of va= > lid field options: "String" or "string" or "STRING" or "s" or "S" or "str" = > or "Number" or "number" or "NUMBER" or "N" or "N" or "int" or "num", nothin= > g happens, please tell me what I did wrong. Thanks :D Here is my code: > #- Variables that I am using, including the list. --= > ---# > #False means num > #True means string > num_or_string =3D "" > amount_numbers =3D [] > List =3D [] > I =3D "Does your list contain, a number or a string?" > #- Functions that I am using.-= > # > input(I) > def NOS(): > if I =3D=3D "String" or "string" or "STRING" or "s" or "S" or "str": > pass > elif I =3D=3D "Number" or "number" or "NUMBER" or "N" or "N" or "int" o= > r "num": > pass > else: > global I > I =3D "You did not enter a valid field, :P Sorry." > input(I) First of all, you haven't given us your whole program. I know this because while you've defined the NOS function, it isn't actually called anywhere. You must have left that part out. Anyway, I think you're doing two things wrong: 1. You aren't capturing the user's input. The input() function returns the user's input, but you aren't assigning this to a variable; it's just being thrown away. You should call input() like this: user_input = input(I) (Also, it would probably be clearer to use a name like "prompt" instead of "I".) 2. You aren't using the compound "if" statement correctly. You can't do this (well, you CAN, but it won't do what you want): if a == 1 or 2 or 3: You should fully spell out each condition, like this: if a == 1 or a == 2 or a == 3: -- John Gordon A is for Amy, who fell down the stairs gor...@panix.com B is for Basil, assaulted by bears -- Edward Gorey, "The Gashlycrumb Tinies" -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
On Wednesday, September 11, 2013 5:11:23 PM UTC+12, John Gordon wrote: > In William Bryant > writes: > > > > > Hey, I am very new to python, I am 13 years old. I want to be able to make = > > > a program the caculates the mean, meadian and mode. When i run the program,= > > > an input field pops up and says 'Does your list contain, a number or a str= > > > ing?' like I want it to, but when I type in something that is not one of va= > > > lid field options: "String" or "string" or "STRING" or "s" or "S" or "str" = > > > or "Number" or "number" or "NUMBER" or "N" or "N" or "int" or "num", nothin= > > > g happens, please tell me what I did wrong. Thanks :D Here is my code: > > > > > #- Variables that I am using, including the list. --= > > > ---# > > > > > #False means num > > > #True means string > > > num_or_string =3D "" > > > amount_numbers =3D [] > > > List =3D [] > > > I =3D "Does your list contain, a number or a string?" > > > > > #- Functions that I am using.-= > > > # > > > input(I) > > > > > def NOS(): > > > if I =3D=3D "String" or "string" or "STRING" or "s" or "S" or "str": > > > pass > > > elif I =3D=3D "Number" or "number" or "NUMBER" or "N" or "N" or "int" o= > > > r "num": > > > pass > > > else: > > > global I > > > I =3D "You did not enter a valid field, :P Sorry." > > > input(I) > > > > First of all, you haven't given us your whole program. I know this because > > while you've defined the NOS function, it isn't actually called anywhere. > > You must have left that part out. > > > > Anyway, I think you're doing two things wrong: > > > > 1. You aren't capturing the user's input. The input() function returns > > the user's input, but you aren't assigning this to a variable; it's just > > being thrown away. You should call input() like this: > > > > user_input = input(I) > > > > (Also, it would probably be clearer to use a name like "prompt" instead > > of "I".) > > > > 2. You aren't using the compound "if" statement correctly. You can't > >do this (well, you CAN, but it won't do what you want): > > > >if a == 1 or 2 or 3: > > > >You should fully spell out each condition, like this: > > > >if a == 1 or a == 2 or a == 3: > > > > -- > > John Gordon A is for Amy, who fell down the stairs > > gor...@panix.com B is for Basil, assaulted by bears > > -- Edward Gorey, "The Gashlycrumb Tinies" Thanks so much for putting your time into helping me!! It worked! Could you tell me if I did anything wrong this time? :) #- Variables that I am using, including the list. -# num_or_string = "" amount_numbers = [] List = [] prompt = "Does your list contain, a number or a string?" #- Functions that I am using.-# user_input1 = input(prompt) user_input1 def NOS(): if user_input1 == "String" or user_input1 == "string" or user_input1 == "STRING" or user_input1 == "s" or user_input1 == "S" or user_input1 == "str": print("a") elif user_input1 == "Number" or user_input1 == "number" or user_input1 == "NUMBER" or user_input1 == "N" or user_input1 == "N" or user_input1 == "int" or user_input1 == "num": print("a") else: global user_input2 global prompt prompt = "You did not enter a valid field, :P Sorry." user_input2 = input(prompt) user_input2 NOS2() def NOS2(): if user_input2 == "String" or user_input2 == "string" or user_input2 == "STRING" or user_input2 == "s" or user_input2 == "S" or user_input2 == "str": print("a") elif user_input2 == "Number" or user_input2 == "number" or user_input2 == "NUMBER" or user_input2 == "N" or user_input2 == "N" or user_input2 == "int" or user_input2 == "num": print("a") else: global user_input2 global prompt prompt = "You did not enter a valid field, :P Sorry." user_input2 = input(prompt) user_input2 NOS2() NOS() -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
Hello, William On 09/11/2013 06:39 AM, William Bryant wrote: > user_input1 = input(prompt) I take it you are using Python 3.x . If that's not the case, take a look at raw_input(). def NOS(): if user_input1 == "String" or user_input1 == "string" or user_input1 == "STRING" or user_input1 == "s" or user_input1 == "S" or user_input1 == "str": print("a") What if you create a list containing these, and then you check if the user_input is contained in that list. But before that, get the lower-case of it so you don't deal with String sTring string, s, S, etc... Something like this You add this to the variables you are using section string_list = ['string', 's'] When you want to check the check if user_input.lower() in string_list: {your_code_here} elif user_input1 == "Number" or user_input1 == "number" or user_input1 == "NUMBER" or user_input1 == "N" or user_input1 == "N" or user_input1 == "int" or user_input1 == "num": print("a") Same goes with that But some questions: 1 - Why does the user have to specify that, why doesn't the program itself tell if it is a string or a number ? You just give it the data and it's up to him to tell. 2 - What is it you are trying to accomplish: Maybe there are shortcuts or better ways to do things. -- ~Jugurtha Hadjar, -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
On 11/9/2013 01:39, William Bryant wrote: > On Wednesday, September 11, 2013 5:11:23 PM UTC+12, John Gordon wrote: >> In William Bryant >> writes: >> >> >> >> > Hey, I am very new to python, I am 13 years old. I want to be able to make >> > = >> >> > a program the caculates the mean, meadian and mode. When i run the >> > program,= >> >> > an input field pops up and says 'Does your list contain, a number or a >> > str= >> >> > ing?' like I want it to, but when I type in something that is not one of >> > va= >> >> > lid field options: "String" or "string" or "STRING" or "s" or "S" or "str" >> > = Thanks for quoting some context. However, since you're using buggy googlegroups, please either constrain your quoting to a couple of lines, or fix its display to NOT doublespace everything. See http://wiki.python.org/moin/GoogleGroupsPython > > Thanks so much for putting your time into helping me!! It worked! Could you > tell me if I did anything wrong this time? :) > > #- Variables that I am using, including the list. > -# > > num_or_string = "" > amount_numbers = [] > List = [] > prompt = "Does your list contain, a number or a string?" > > #- Functions that I am using. > -# > user_input1 = input(prompt) > user_input1 This last line does nothing useful. You may be confused because in the debugger, a lone expression getes its value printed. But that's a debugger feature not a language one. If you want to see what got input, you'd want to use print() function. Looks like the second function is identical to the first. if I'm right, then just change the NOS2 into NOS1, and save lots of redundancy. > > def NOS(): > if user_input1 == "String" or user_input1 == "string" or user_input1 == > "STRING" or user_input1 == "s" or user_input1 == "S" or user_input1 == "str": > print("a") > elif user_input1 == "Number" or user_input1 == "number" or user_input1 == > "NUMBER" or user_input1 == "N" or user_input1 == "N" or user_input1 == "int" > or user_input1 == "num": > print("a") > else: > global user_input2 > global prompt > prompt = "You did not enter a valid field, :P Sorry." > user_input2 = input(prompt) > user_input2 > NOS2() Here you're using the recursive call to NOS() to substitute for a loop. Recursion is very useful, but in this case, it hides what's really happening, and it prevents you from writing a conventional function with parameters and return value. I don't know what NOS is supposed to stand for, but it's generally useful if a function does a simply described single thing. In this case, it gets input from the user, and asks the user repeatedly till he/she gets it right. So the function should do its own input, and not expect the top-level code to already have asked once. Something like: SOMETHING = [ list of the valid inputs ] def query_user(prompt): while true: udata = input(prompt) ifudata.lower() in SOMETHING return udata print("Invalid field, sorry") And now you call this function the same way you would have called input() function: user_input1 = query_user("Does your list contain, a number or a string?") > > NOS() -- DaveA -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
@Dave Angel What is .lower() ? -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
@Jugurtha Hadjar What does user_input.lower() mean/do? -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
In William Bryant writes: > @Jugurtha Hadjar > What does user_input.lower() mean/do? String objects have a number of built-in functions, lower() being one of them. It returns a copy of the string with all uppercase letters converted to lowercase. Example: >>> x = "Hello There" >>> y = x.lower() >>> print y hello there -- John Gordon A is for Amy, who fell down the stairs gor...@panix.com B is for Basil, assaulted by bears -- Edward Gorey, "The Gashlycrumb Tinies" -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
On 11/9/2013 15:31, William Bryant wrote: > @Dave Angel > > What is .lower() ? It is a method on the str class. You could teach yourself. At the interpreter prompt, type help("test response".lower) Or on the web: http://docs.python.org/2/library/stdtypes.html#str.lower There are lots of other interesting methods in the str class, listed on that section of that page. -- DaveA -- https://mail.python.org/mailman/listinfo/python-list
RE: Help please, why doesn't it show the next input?
William Bryant wrote: > Sent: Wednesday, September 11, 2013 2:32 PM > To: python-list@python.org > Subject: Re: Help please, why doesn't it show the next input? > > @Dave Angel > > What is .lower() ? Thanks for bottom posting and trimming, but you should leave some content quoted for context. Otherwise people will not what you are referring to. You can find answers to questions like this in the API. http://docs.python.org/2/library/stdtypes.html#str.lower I would recommend taking time to get familiar with the Athena interpreter. It can also answer questions like this (but with less detail than the web API). You can use dir() to find the attributes on any object. help() will give you docstring for the attribute/class. >>> 'A'.lower() 'a' >>> help(''.lower) Help on built-in function lower: lower(...) S.lower() -> string Return a copy of the string S converted to lowercase. >>> help(dir) Help on built-in function dir in module __builtin__: dir(...) dir([object]) -> list of strings If called without an argument, return the names in the current scope. Else, return an alphabetized list of names comprising (some of) the attributes of the given object, and of attributes reachable from it. If the object supplies a method named __dir__, it will be used; otherwise the default dir() logic is used and returns: for a module object: the module's attributes. for a class object: its attributes, and recursively the attributes of its bases. for any other object: its attributes, its class's attributes, and recursively the attributes of its class's base classes. >>> dir('') ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem_\ _', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__\ ', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclass\ hook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expan\ dtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lo\ wer', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'starts\ with', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] If you want to see all the relevant information you can use help() on the class [e.g. help(str)]. I think help(class) will not show functions that start with _ unless they are python magic dunder functions (e.g. __str__). ~Ramit This email is confidential and subject to important disclaimers and conditions including on offers for the purchase or sale of securities, accuracy and completeness of information, viruses, confidentiality, legal privilege, and legal entity disclaimers, available at http://www.jpmorgan.com/pages/disclosures/email. -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
On 9/11/2013 3:31 PM, William Bryant wrote: What is .lower() ? The Python docs have a pretty good index that includes 'lower() (str method)'. Learn to use it. If you know that .lower is a str method, >>> help(str.lower) at interactive prompt prints a page. Learn to use help(ob) also. -- Terry Jan Reedy -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
On 09/11/2013 08:33 PM, William Bryant wrote: @Jugurtha Hadjar What does user_input.lower() mean/do? Hello, As did other people point out, it returns the lower case of a string. It's not user_input.lower(), it's any_string.lower() For example: Try this on your python prompt mystring = "ThIs Is ThE wAy SoMe StUpId PeOpLe WrItE i DoN't KnOw WhY!" mystring.lower() -- ~Jugurtha Hadjar, -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
On 09/12/2013 02:08 AM, Jugurtha Hadjar wrote: Try this on your python prompt mystring = "ThIs Is ThE wAy SoMe StUpId PeOpLe WrItE i DoN't KnOw WhY!" mystring.lower() This should return: "You shouldn't treat people of stupid, but I feel your pain", or let's be more realistic: "this is the way some stupid people write i don't know why!" -- ~Jugurtha Hadjar, -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
Thanks everyone for helping but I did listen to you :3 Sorry. This is my code, it works, I know it's not the best way to do it and it's the long way round but it is one of my first programs ever and I'm happy with it: '''#*''' #* Name:Mode-Median-Mean Calculator *# #**# #* Purpose: To calculate the mode, median and mean of a list of numbers *# #* and the mode of a list of strings because that is what we are *# #* learning in math atm in school :P *# #**# #* Author: William Bryant*# #**# #* Created: 11/09/2013*# #**# #* Copyright: (c) William 2013 *# #**# #* Licence: IDK :3*# '''**''' #-# ~~Import things I am using~~ #-# # | #| # \/ import time import itertools #-#~~Variables that I am using, including the list.~~#-# # | #| # \/ num_or_string = None amount_numbers = [] List = [] prompt = "Does your list contain, a number or a string? \nEnter: " user_inputHMNn = None user_inputHMNs = None #-# ~~Functions that I am using.~~ #-# # | #| # \/ user_inputNOS = input(prompt) user_inputNOS time.sleep(1.5) def NOS(): if user_inputNOS == "String" or user_inputNOS == "string" or user_inputNOS == "STRING" or user_inputNOS == "s" or user_inputNOS == "S" or user_inputNOS == "str": HMNs() elif user_inputNOS == "Number" or user_inputNOS == "number" or user_inputNOS == "NUMBER" or user_inputNOS == "N" or user_inputNOS == "N" or user_inputNOS == "int" or user_inputNOS == "num": HMNn() else: global user_inputNOS2 global prompt prompt = "You did not enter a valid field, :P Sorry. \nEnter: " user_inputNOS2 = input(prompt) user_inputNOS2 time.sleep(1.5) NOS2() def NOS2(): if user_inputNOS2 == "String" or user_inputNOS2 == "string" or user_inputNOS2 == "STRING" or user_inputNOS2 == "s" or user_inputNOS2 == "S" or user_inputNOS2 == "str": HMNs() elif user_inputNOS2 == "Number" or user_inputNOS2 == "number" or user_inputNOS2 == "NUMBER" or user_inputNOS2 == "N" or user_inputNOS2 == "N" or user_inputNOS2 == "int" or user_inputNOS2 == "num": HMNn() else: global prompt prompt = "You did not enter a valid field, :P Sorry. \nEnter: " user_inputNOS2 time.sleep(1.5) NOS2() def HMNs(): global TheStr, user_inputHMNs, List_input user_inputHMNs = input("You picked string. This program cannot calculate the mean or median, but it can calculate the mode. :D How many strings are you using in your list? (Can not be a decimal number) \nEnter: ") user_inputHMNs time.sleep(1.5) TheStr = int(user_inputHMNs) for i in range(TheStr): List_input = input("Enter your strings. (One in each input field): ") List.append(List_input) print("Your list -> ", List) def HMNn(): global TheNum, user_inputHMNn, List_input user_inputHMNn = input("You picked number. :D How many numbers are you using in your list? (Can not be a decimal number) \nEnter: ") user_inputHMNn time.sleep(1.5) TheNum = int(user_inputHMNn) for i in range(TheNum): List_input = input("Enter your numbers. (One in each input field): ") List.append(List_input) print("Your list -> ", List) #-# ~~The functions which need calling~~ #-# # | #| # \/ NOS() Not done. I'll finish it today! :) Oh and thanks so much for helping, you guys are really nice :D Thanks a lot. -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
On 12 September 2013 07:04, William Bryant wrote: > Thanks everyone for helping but I did listen to you :3 Sorry. This is my > code, it works, I know it's not the best way to do it and it's the long way > round but it is one of my first programs ever and I'm happy with it: Hi William, I'm glad you've solved your initial problem and I just wanted to make a couple of comments about how your program could be simplified or improved. The comments are below. > > '''#*''' > #* Name:Mode-Median-Mean Calculator > *# > #* > *# > #* Purpose: To calculate the mode, median and mean of a list of numbers > *# > #* and the mode of a list of strings because that is what we are > *# > #* learning in math atm in school :P > *# > #* > *# > #* Author: William Bryant > *# > #* > *# > #* Created: 11/09/2013 > *# > #* > *# > #* Copyright: (c) William 2013 > *# > #* > *# > #* Licence: IDK :3 > *# > '''**''' > > > > > #-# ~~Import things I am using~~ > #-# > > # | > #| > # \/ > > import time > import itertools > > > > #-#~~Variables that I am using, including the list.~~ > #-# > > # | > #| > # \/ > > num_or_string = None > amount_numbers = [] > List = [] > prompt = "Does your list contain, a number or a string? \nEnter: " > user_inputHMNn = None > user_inputHMNs = None Of the declarations above only List and prompt are needed. Actually though I wouldn't use either of those. List should really be a local variable inside the functions below. And it would be better to write prompt inline e.g.: answer = input("Does your list contain, a number or a string? \nEnter: ") That makes it easier to understand what's happening when you look at the code. So I would remove all of those variable declarations. In some other programming languages there are reasons to use declarations like those above but not in Python. > > #-# ~~Functions that I am using.~~ > #-# > > # | > #| > # \/ > > user_inputNOS = input(prompt) > user_inputNOS > time.sleep(1.5) > > def NOS(): > if user_inputNOS == "String" or user_inputNOS == "string" or > user_inputNOS == "STRING" or user_inputNOS == "s" or user_inputNOS == "S" or > user_inputNOS == "str": > HMNs() > elif user_inputNOS == "Number" or user_inputNOS == "number" or > user_inputNOS == "NUMBER" or user_inputNOS == "N" or user_inputNOS == "N" or > user_inputNOS == "int" or user_inputNOS == "num": > HMNn() > else: > global user_inputNOS2 > global prompt > prompt = "You did not enter a valid field, :P Sorry. \nEnter: " > user_inputNOS2 = input(prompt) > user_inputNOS2 > time.sleep(1.5) > NOS2() > > def NOS2(): > if user_inputNOS2 == "String" or user_inputNOS2 == "string" or > user_inputNOS2 == "STRING" or user_inputNOS2 == "s" or user_inputNOS2 == "S" > or user_inputNOS2 == "str": > HMNs() > elif user_inputNOS2 == "Number" or user_inputNOS2 == "number" or > user_inputNOS2 == "NUMBER" or user_inputNOS2 == "N" or user_inputNOS2 == "N" > or user_inputNOS2 == "int" or user_inputNOS2 == "num": > HMNn() > else: > global prompt > prompt = "You did not enter a valid field, :P Sorry. \nEnter: " > user_inputNOS2 > time.sleep(1.5) > NOS2() The functions above are almost identical. The main difference is just that NOS2() doesn't call input() which I assume is accidental. So you could simplify this by only having one function NOS() and having it call itself rather than NOS2() at the end. Then it would look like: def NOS(): # code here ... NOS() However this is not a common way to use recursive function calls. What this really does is repeat something forever in a loop. The common way to do this is to use a for-loop or a while-loop. For example you can get the same effect with: while True: # Loops forever (until the break) answer = input("Does your list contain, a number or a string? \nEnter: ") answer = answer.lower() if answe
Re: Help please, why doesn't it show the next input?
On Thursday, September 12, 2013 9:39:33 PM UTC+12, Oscar Benjamin wrote: > On 12 September 2013 07:04, William Bryant wrote: > > > Thanks everyone for helping but I did listen to you :3 Sorry. This is my > > code, it works, I know it's not the best way to do it and it's the long way > > round but it is one of my first programs ever and I'm happy with it: > > > > Hi William, I'm glad you've solved your initial problem and I just > > wanted to make a couple of comments about how your program could be > > simplified or improved. The comments are below. > Hello, I've done this so far but why doesn't the mode function work? '''#*''' #* Name:Mode-Median-Mean Calculator *# #**# #* Purpose: To calculate the mode, median and mean of a list of numbers *# #* and the mode of a list of strings because that is what we are *# #* learning in math atm in school :P *# #**# #* Author: William Bryant*# #**# #* Created: 11/09/2013*# #**# #* Copyright: (c) William 2013 *# #**# #* Licence: IDK :3*# '''**''' #-# ~~Import things I am using~~ #-# # | #| # \/ import time import itertools #-#~~Variables that I am using, including the list.~~#-# # | #| # \/ List = [] NumberOfXItems = [] Themode = [] #-# ~~Functions that I am using.~~ #-# # | #| # \/ def HMNs(): global TheStr, user_inputHMNs, List_input, List user_inputHMNs = input("You picked string. This program cannot calculate the mean or median, but it can calculate the mode. :D How many strings are you using in your list? (Can not be a decimal number) \nEnter: ") user_inputHMNs time.sleep(1.5) TheStr = int(user_inputHMNs) for i in range(TheStr): List_input = input("Enter your strings. (One in each input field): ") List.append(List_input) print("Your list -> ", List) if List.count == int(user_inputHMNs): break mode() def HMNn(): global TheNum, user_inputHMNn, List_input, List user_inputHMNn = input("You picked number. :D How many numbers are you using in your list? (Can not be a decimal number) \nEnter: ") user_inputHMNn time.sleep(1.5) TheNum = int(user_inputHMNn) for i in range(TheNum): List_input = input("Enter your numbers. (One in each input field): ") List_input = int(List_input) List.append(List_input) print("Your list -> ", List) if List.count == int(user_inputHMNn): break mode() def NOS(): while True: # Loops forever (until the break) answer = input("Does your list contain a number or a string? \nEnter: ") answer = answer.lower() if answer in ("string", "str", "s"): HMNs() break elif answer in ("number", "num", "n", "int"): HMNn() break elif answer in ("quit", "q"): break # Exits the while loop else: print("You did not enter a valid field, :P Sorry. \nEnter: ") time.sleep(1.5) def mode(): global NumberOfXItems, Themode for i in List: NumberOfXItems.append(i) NumberOfXItems.append(List.count(i)) Themode = max(NumberOfXItems) print(Themode) #-# ~~The functions which need calling~~ #-# # | #| # \/ NOS() -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
In <364bcdb3-fdd5-4774-b7d2-040e2ccb4...@googlegroups.com> William Bryant writes: > Hello, I've done this so far but why doesn't the mode function work? > def mode(): > global NumberOfXItems, Themode > for i in List: > NumberOfXItems.append(i) > NumberOfXItems.append(List.count(i)) > Themode = max(NumberOfXItems) > print(Themode) As far as I can see, you're appending each of the user's numbers onto NumberOfXItems, and you're also appending the number of times each number occurs. So, if the user had entered these numbers: 5 9 9 9 15 100 100 NumberOfXItems would end up looking like this: 5 1 9 3 9 3 9 3 15 1 100 2 100 2 The max is 100, but 9 is the most often-occuring number. Also, since NumberOfXItems mixes user input and the counts of that input, you risk getting a max that the user didn't even enter. For example if the user entered these numbers: 1 1 1 1 1 1 2 3 NumberOfXItems would end up looking like this: 1 6 1 6 1 6 1 6 1 6 1 6 2 1 3 1 The max is 6, which is a count, not user input. mode would be much better written like this: def mode(mylist): max_occurrences = 0 themode = None for i in mylist: thecount = mylist.count(i) if thecount > max_occurrences: max_occurrences = thecount themode = i print(themode) -- John Gordon A is for Amy, who fell down the stairs gor...@panix.com B is for Basil, assaulted by bears -- Edward Gorey, "The Gashlycrumb Tinies" -- https://mail.python.org/mailman/listinfo/python-list
Re: Help please, why doesn't it show the next input?
On 13/09/2013 23:12, William Bryant wrote: On Thursday, September 12, 2013 9:39:33 PM UTC+12, Oscar Benjamin wrote: On 12 September 2013 07:04, William Bryant wrote: > Thanks everyone for helping but I did listen to you :3 Sorry. This is my code, it works, I know it's not the best way to do it and it's the long way round but it is one of my first programs ever and I'm happy with it: Hi William, I'm glad you've solved your initial problem and I just wanted to make a couple of comments about how your program could be simplified or improved. The comments are below. Hello, I've done this so far but why doesn't the mode function work? '''#*''' #* Name:Mode-Median-Mean Calculator *# #**# #* Purpose: To calculate the mode, median and mean of a list of numbers *# #* and the mode of a list of strings because that is what we are *# #* learning in math atm in school :P *# #**# #* Author: William Bryant*# #**# #* Created: 11/09/2013*# #**# #* Copyright: (c) William 2013 *# #**# #* Licence: IDK :3*# '''**''' #-# ~~Import things I am using~~ #-# # | #| # \/ import time import itertools #-#~~Variables that I am using, including the list.~~#-# # | #| # \/ Global variables and no parameter passing: yuck! :-) List = [] NumberOfXItems = [] Themode = [] #-# ~~Functions that I am using.~~ #-# # | #| # \/ Your function names aren't meaningful. def HMNs(): global TheStr, user_inputHMNs, List_input, List user_inputHMNs = input("You picked string. This program cannot calculate the mean or median, but it can calculate the mode. :D How many strings are you using in your list? (Can not be a decimal number) \nEnter: ") This line doesn't do anything: user_inputHMNs time.sleep(1.5) This variable is an integer, yet it's called 'TheStr'. TheStr = int(user_inputHMNs) for i in range(TheStr): List_input = input("Enter your strings. (One in each input field): ") List.append(List_input) print("Your list -> ", List) Here you're comparing the list's .count method with an integer. It'll never be true! if List.count == int(user_inputHMNs): break mode() def HMNn(): global TheNum, user_inputHMNn, List_input, List user_inputHMNn = input("You picked number. :D How many numbers are you using in your list? (Can not be a decimal number) \nEnter: ") user_inputHMNn time.sleep(1.5) TheNum = int(user_inputHMNn) for i in range(TheNum): List_input = input("Enter your numbers. (One in each input field): ") List_input = int(List_input) List.append(List_input) print("Your list -> ", List) The same bug as above: if List.count == int(user_inputHMNn): break mode() def NOS(): while True: # Loops forever (until the break) answer = input("Does your list contain a number or a string? \nEnter: ") answer = answer.lower() if answer in ("string", "str", "s"): HMNs() break elif answer in ("number", "num", "n", "int"): HMNn() break elif answer in ("quit", "q"): break # Exits the while loop else: print("You did not enter a valid field, :P Sorry. \nEnter: ") time.sleep(1.5) def mode(): global NumberOfXItems, Themode for i in List: Here you're appending an item and then the number of times that the item occurs: NumberOfXItems.append(i) NumberOfXItems.append(List.count(i)) Here you're getting the maximum entry, be it an item or the number of times an item occurs (see above). Have a look at the Counter class from the collections module: Themode = max(NumberOfXItems) print(Themode) #-# ~~The functions which need calling~~ #-# # | #| # \/ NOS() -- https://mail.python.org/mailman/li
Re: Help please, why doesn't it show the next input?
Thanks for the contructive critisism - :D I'll try fix it up! -- https://mail.python.org/mailman/listinfo/python-list