#python #command-line
#питон #командная строка
Вопрос:
Я пытаюсь написать программу, которая принимает числа 1, 2, 3, 5, 7, 101 в качестве аргументов команды вычислите логарифм, синус, квадрат и косинус этих чисел и запишите результаты в CSV-файл. Я продолжаю получать ошибку ValueError, которая находится внизу. Это то, что у меня есть до сих пор:
import sys
import math
import csv
print("the name of the program is ", sys.argv[0])
n = len(sys.argv[1])
a = sys.argv[1][1:n-1]
a = a.split('; ')
for i in a:
print(i)
def main():
# reading only the numbers from command line
# and storing it in the list num_list
str_num = sys.argv[1::] # ['1', '2', '3', '5', '7', '101']
num_list = [int(num) for num in str_num] # [1, 2, 3, 5, 7, 101]
with open('results.csv', mode = 'w') as output_file:
output_writer = csv.writer(output_file, delimiter = ';')
for num in num_list:
row = []
row.append(math.log(num))
row.append(pow(num, 2))
row.append(math.sin(num))
row.append(math.cos(num))
output_writer.writerow(row)
main()
Ошибка:
ValueError Traceback (most recent call last)
<ipython-input-5-738df23d937b> in <module>
38 output_writer.writerow(row)
39
---> 40 main()
<ipython-input-5-738df23d937b> in main()
19
20 # converting string array to int array
---> 21 num_list = [int(num) for num in str_num] # [1, 2, 3, 5, 7, 101]
22
23 # open 'results.csv' with write mode
<ipython-input-5-738df23d937b> in <listcomp>(.0)
19
20 # converting string array to int array
---> 21 num_list = [int(num) for num in str_num] # [1, 2, 3, 5, 7, 101]
22
23 # open 'results.csv' with write mode
ValueError: invalid literal for int() with base 10: '-f'
Комментарии:
1. Какие аргументы вы передаете программе?
2. Math.sin(num), math.log(num), math.cos(num), pow(num,2). Должен ли я был включить его ранее в код?
3. Я имею в виду через командную строку. Ошибка, которую вы получаете, говорит о том, что вы передаете строку
-f
int()
, такstr_num
что это может быть не то, что вы думаете.4. Я думаю то же самое с @montgomery-watts. Проверьте тип и формат вашего
str_num
документа с помощью печати или другим способом. Может быть, тоже попробоватьnum_list = int(num.strip())