Как исправить ошибку TypeError? - PullRequest
0 голосов
/ 30 ноября 2018

Итак, я тщательно изучил, как это сделать, но даже тогда я сталкиваюсь с проблемами.Это одна ошибка за другой.Например

Traceback (most recent call last):
  File "C:/Users/Owner.OWNER-PC/AppData/Local/Programs/Python/Python37-32/lab 5 maybe.py", line 41, in <module>
    main()
  File "C:/Users/Owner.OWNER-PC/AppData/Local/Programs/Python/Python37-32/lab 5 maybe.py", line 8, in main
    rand_gen(myfile)
  File "C:/Users/Owner.OWNER-PC/AppData/Local/Programs/Python/Python37-32/lab 5 maybe.py", line 19, in rand_gen
    my_file.write(line +'\n')
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Я получаю эту ошибку с этим кодом.И я понятия не имею, как исправить ошибку типа.И я занимаюсь этим уже несколько часов, и каждое изменение, которое я делаю, создает больше проблем.Я прочитал книгу, и она ничего не предложила.Я получаю некоторые вещи, но это просто не работает для меня вообще.Я неустанно рыскал по форумам.В основном нужно попросить пользователя назвать файл для записи, который работает.Также необходимо передать аргументы, когда другие функции вызываются либо для записи в файл, либо для чтения из него.Вторая функция записывает последовательность случайных чисел в файл в диапазоне от 1 до 500, а также должна спросить, сколько случайных чисел нужно сделать, что работает (то есть позволяет пользователю запрашивать число), после чего выдает ошибку.наконец, третья функция должна показывать количество сгенерированных чисел, сумму чисел и среднее число чисел!Заранее спасибо.

import random
import math


def main():
    myfile = str(input("Enter file name here "))
    with open(myfile, 'w+') as f:
        rand_gen(myfile)

    return f
    myfile.close

    disp_stats()

def rand_gen(myfile):
    my_file = open(myfile, 'w')
    for count in range(int(input('How many random numbers should we use?'))):
        line = random.randint(1,500)
        my_file.write(line +'\n')
    my_file.close()

def disp_stats():
    myfile = open(f,"r")
    total = 0
    count = 0
    print('The numbers are: ')
    for line in myfile:
        number = int(line)
        total += number
        count += 1
        print(number)

    average = total / count
    data = np.loadtxt(f)
    print('The count is ',count,)
    print('The sum is',total,)
    print('The average is ',format(average, '.2f'))

    myfile.close
main()

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Как объясняется в сообщении об ошибке, TypeError: unsupported operand type(s) for +: 'int' and 'str'.Вы не можете объединить "целое число" (line, то есть random.randint(1,500) со "строкой" '\n'.

. Вы можете сделать следующее:

my_file.write(str(line) +'\n')
0 голосов
/ 30 ноября 2018

Когда вы получаете ошибку трассировки, посмотрите на последнюю строку, чтобы увидеть причину ошибки верхнего уровня.

my_file.write(line +'\n') & TypeError: unsupported operand type(s) for +: 'int' and 'str'

Ясно, что это намекает на выражение line +'\n'

Оператор + ожидает, что оба аргумента имеют одинаковый тип. (Он не может найти любое определение перегруженной функции, которое принимает int и строку.

Это потому, что строка являетсяцелое число (генерируемое randint), в то время как '\ n' является строкой.

Таким образом, введите строку в строку line -> str(line).

Новая правильная строка должна быть my_file.write(str(line) +'\n')

...