简体   繁体   中英

Python input multiple lines and spaces

Im trying to solve one of the a2oj problems " given three numbers a, b and c. print the total sum of the three numbers added to itself. "

I came with this

import sys

numbers = [int(x) for x in sys.stdin.read().split()]

print(numbers[0] + numbers[1] + numbers[2])

I saw many topics but I cant figure out how to read just 3 values from input. I know I can stop this procces by typing CTRL+D, but is there any possibility to make it automatic (after reaching third value)?

Thanks

// Thanks for very quick answers, I made mistake and posted only Problem Statement without Input Format: "three numbers separated by bunch of spaces and/or new lines"

So for example input should look like this:

2                  

1                  4

// Ok thanks to you guys finally I made this:

n = []

while len(n) < 3:
    s=input()
    i = s.split()       
    [n.append(int(j)) for j in i]

print(2 * sum(n))

It's working but when I sent my results I got Runtime Error . I have no idea why: Link: https://a2oj.com/p?ID=346

You could just use:

sys.argv

  import sys
  numbers = [int(x) for x in sys.argv[1:4]]
  print(numbers)
  print(sum(numbers))

After seeing the update from the question author and linked the online judge question description , the tweak to his code needed is below. It's worth noting that the expected output is in float and has precision set to 6 and the output is 2 * sum of all inputs , not just sum . There is no description on this in the online judge question and you've to understand from the input vs output .

n = []

while len(n) < 3:
    s = input()
    i = s.split()
    n.extend(float(j) for j in i)

print(format(2 * sum(n), '.6f'))

Screenshot below

工作解决方案

But the first version of this answer is still valid to the first version of this question. Keeping them if anyone else is looking for the following scenarios.

To separate inputs by enter aka New lines :

numbers_List = []

for i in range(3):
    number = int(input())
    numbers_List.append(number)

print("Sum of all numbers: ", sum(numbers_List))

Screenshot:

输入分隔输入

To separate inputs by space aka Bunch of spaces :

Use map before taking input. I'd suggest using input as well instead of sys.stdin.read() to get input from users, separated by space , and ended by pressing Enter key.

Very easy implementation below for any number of inputs and to add using sum function on a list:

numbers = list(map(int, input("Numbers: ").split())) 
print("Sum of all numbers: ", sum(numbers))

The screenshot below and link to the program is here

添加以空格分隔的所有输入

Read Python's Built-in Functions documentation to know more about all the functions I used above.

I am not sure what you are looking for, but it seems that you are looking for is the input function, from python's builtins:

 x=input()

This reads any input from the user, as a string. You have then to convert it to a number if needed.

You can read three values:

numbers=[]
while (you have less than 3 numbers):
    (input one line and add the numbers to your list)
(print the sum of your numbers)

As you have now specified more precisely the problem statement, I edit my answer:

In your case, this is not very complicated. I am not going to give you the answer straight away, as it would defeat the point, but the idea is to wrap the input inside a while loop. Something like:

 numbers=[] while (you have less than 3 numbers): (input one line and add the numbers to your list) (print the sum of your numbers)

That way you are waiting for as many inputs as you need until you reach 3 numbers. By the way, depending on your input, you might have to check whether you do not get more than 3 numbers.

  1. When inputs are given line by line.
from sys import stdin
sum = 0
for num in stdin.readline(4):
    sum = sum + int(num)
print(sum)
  1. When inputs are given on CLI.
from sys import argv
sum = 0
for num in argv[1:4]:
    sum = sum + int(num)
print(sum)

Use Python strip() and split() functions as per your usecases

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM