Как читать stdin в скрипте? - PullRequest
2 голосов
/ 25 апреля 2019
import sys

def optimal_summands(n):
    summands = []
    sum = n
    i = 0
    while (sum > 0):
        if 2*(i+1) < sum:
            i+=1
            summands.append(i)
            sum-=i
        else:
            summands.append(sum)
            sum=0
    return summands

if __name__ == '__main__':
    input = sys.stdin.read()
    n = int(input)
    summands = optimal_summands(n)
    print(len(summands))
    for x in summands:
        print(x, end=' ')

У меня проблема с запуском моего собственного ввода.Я иду к своему терминалу и набираю

(ykp) y9@Y9Acer:~/practice$ python optimal_summands.py 15

, и ничего не происходит.

Как мне запустить собственный код на пользовательских входах?Это кажется чем-то простым, но я не видел ни одного примера того, как это сделать, в документации.

1 Ответ

3 голосов
/ 25 апреля 2019

Я полагаю, что вы можете использовать sys.argv или другие функции, которые вы можете выбрать argparse .

Пример использования sys.argv

if __name__ == '__main__':
    filename = sys.argv[0]
    passed_args = map(int, sys.argv[1:]) # if you're expecting all args to be int.
    # python3 module.py 1 2 3
    # passed_args = [1, 2, 3]

Пример использования argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("n", type=int, help="Example help text here.")

    args = parser.parse_args()
    n = args.n
    print(isinstance(n, int)) # true

Вы также можете использовать argparse для предоставления помощи пользователю, как показано ниже:

scratch.py$ python3 scratch.py -h
usage: scratch.py [-h] n

positional arguments:
  n           Example help text here.

optional arguments:
  -h, --help  show this help message and exit

Вышеприведенное не включает операторы импорта import sys и import argparse. Необязательные аргументы в argparse начинаются с префикса с двойным дефисом, пример, показанный ниже, как показано в документации python.

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true",
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:
    print("the square of {} equals {}".format(args.square, answer))
else:
    print(answer)

Если вы просто смотритеожидать ввода через CLI;Вы можете использовать input_val = input('Question here').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...