Вопрос новичка Python о практической проблеме

#python #python-3.x

#python #python-3.x

Вопрос:

Я изучаю python и нуждаюсь в помощи, чтобы понять, что я делаю неправильно. Задача, которую я пытаюсь выполнить, — создать список целых чисел из 1-100, а затем создать два других списка на основе этих чисел и завершить, распечатав оба списка. Однако у меня возникли проблемы с получением второго списка для записи в файл с именем target list.txt . Может кто-нибудь сказать мне, что я делаю не так?

 num1 = input("Please Input a name for the file ending it with .txt. ")
numb_list = open(num1, "w")
mylist = []


def integer_list():
    for numbers in range(1, 101):
        mylist.append(numbers)
        numb_list.write(str(numbers)   "n")
        print(numbers, end="n")


integer_list()
print(mylist)
numb_list.close()


def target_list():
    for numbers2 in range(25, 75):
        mylist.append(numbers2)
        target_list.write(numbers2  "n")
        print(numbers2, end="n")


target_list()
print(mylist)
target_list.close()
 

Комментарии:

1. target_list.write(numbers2 "n") эта строка вызывает ошибку?, возможно, потому, что вы пытаетесь записать строку и целое число вместе, преобразуйте целое число в строку

2. Куда вы поместили target_list.write(numbers2 "n") , что вы ожидаете от этой строки кода? Вы говорите: «У меня возникли проблемы с получением второго списка для записи в файл с именем target list.txt «. Есть ли у вас какие-либо справочные материалы о том, как записывать в файлы? Я думаю, вам следует его просмотреть. Альтернативно: в верхней части вашей программы, где вы сделали numb_list = open(num1, "w") — по вашим собственным словам, какова цель этой строки?

Ответ №1:

  1. Вы не открыли второй файл. Вы использовали имя функции target_list вместо нового файла. Это то, что вызывает сбой вашей программы.
  2. Не используйте глобальное состояние в функциях. Вы можете return создавать новый список при каждом вызове. Это предотвращает влияние одного вызова функции на поведение следующего вызова.
  3. Используйте параметры функции, чтобы позволить функции действовать немного по-другому. Это делает функцию более удобной и позволяет избежать дублирования кода.
 def integer_list(start, end):
    file_name = input("Please Input a name for the file ending it with .txt. ")
    num_list = []
    num_file = open(file_name, "w")
    for num in range(start, end):
        num_list.append(num)
        num_file.write(str(num)   "n")
        print(num)
    num_file.close()
    return num_list


num_list1 = integer_list(1, 101)
print(num_list1)

num_list2 = integer_list(25, 75)
print(num_list2)
 

Комментарии:

1. Для меня это имело смысл. Спасибо за объяснение.

Ответ №2:

Вы не открыли второй файл. target_list.write здесь у вас возникает ошибка, и причина в том, что target_list это функция, а не файл.

Ответ №3:

У вас есть несколько проблем с областью действия.

Вот исправленный код:

 num1 = input("Please input a name for the file ending it with .txt ")
numb_list = open(num1, "w")

global mylist
mylist = []


def integer_list():
    for numbers in range(1, 101):
        mylist.append(numbers)
        numb_list.write(str(numbers)   "n")
        print(numbers)#, end="n")


integer_list()
print(mylist)
#numb_list.close()


def target_list():
    for numbers in range(25, 75):
        mylist.append(numbers)
        numb_list.write(str(numbers) "n") # Needed to be a string
        print(numbers)#, end="n")


target_list()
print(mylist)
numb_list.close()