I am a python beginner. I am trying to accept inputs from the user as long as he/she wishes. The program should stop accepting inputs when the enter key alone is pressed.
That is
25
65
69
32 #stop here since the enter key was pressed without any inputI came up with the following code of doing that....
a = []
while 1: b = input("->") if(len(b)>0): a.append(b) else: breakIs there any other efficient 'pythonic' ways of doing this ?
While this works perfectly with python 3.3 it doesnt work with python 2.7 (with input() replaced by the raw_input() function). The screen just stays dumb without any response. Why is that?
Is there any inbuilt function with which i can convert strings back to integers!?
3 Answers
Your approach is mostly fine. You could write it like this:
a = []
prompt = "-> "
line = input(prompt)
while line: a.append(int(line)) line = input(prompt)
print(a)NB: I have not included any error handling.
As to your other question(s):
raw_input()should work similarly in Python 2.7int()-- Coerves the given argument to an integer. It will fail with aTypeErrorif it can't.
For a Python 2.x version just swap input() for raw_input().
Just for the sake of education purposes, you could also write it in a Functional Style like this:
def read_input(prompt): x = input(prompt) while x: yield x x = input(prompt)
xs = list(map(int, read_input("-> ")))
print(xs) 5 Probably the slickest way that I know (with no error handling, unfortunately, which is why you don't see it too often in production):
>>> lines = list(iter(input, ''))
abc
def
.
g
>>> lines
['abc', 'def', '.', 'g']This uses the two-parameter call signature for iter, which calls the first argument (input) until it returns the second argument (here '', the empty string).
Your way's not too bad, although it's more often seen under the variation
a = []
while True: b = input("->") if not b: break a.append(b)Actually, use of break and continue is one of the rare cases where many people do a one-line if, e.g.
a = []
while True: b = input("->") if not b: break a.append(b)although this is Officially Frowned Upon(tm).
- idk, this code looks good for me.
- it works perfectly on my python 2.7.5, with raw_input()
- just use int() function: for example, int('121') returns 121 as integer