Сообщение об ошибке: аргумент типа 'type' не повторяется - PullRequest
4 голосов
/ 18 апреля 2020

Я только начинаю с Python и у меня короткий вопрос.

import sys

# Function creates a list [1,3,5..99]
def createlist():
    list = []
    for i in range(1, 100, 2):
        list.append(i)
    return(list)

# Function asks for an odd integer between 1..100
def numberinsert():
    n = int(input("Please enter an odd number between 1 and 100: "))
    if n in list:
        return(n)
    else:
        sys.exit("Number does not match requirements!")

def main():
    createlist()
    numberinsert()

Это дает мне следующее: TypeError: аргумент типа 'type' не повторяется

Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 18 апреля 2020

Вы пытаетесь получить доступ к локальной переменной функции createlist из другой функции numberinsert, и это невозможно (локальные переменные доступны только в той области, в которой они определены). Я бы порекомендовал вам изменить ваш код следующим образом:

import sys

# Function creates a list [1,3,5..99]
def createlist():
    odd_list = []
    for i in range(1, 100, 2):
        odd_list.append(i)
    return(odd_list)

# Function asks for an odd integer between 1..100
def numberinsert():
    num_list = createlist()
    n = int(input("Please enter an odd number between 1 and 100: "))
    if n in num_list:
        return(n)
    else:
        sys.exit("Number does not match requirements!")

def main():
    numberinsert()

В качестве примечания постарайтесь избегать именования ваших переменных именами встроенных функций (например, list).

Вы также можете написать свой код более компактным способом, используя range(1, 100, 2) непосредственно в вашей функции numberinsert:

# Function asks for an odd integer between 1..100
def numberinsert():
    n = int(input("Please enter an odd number between 1 and 100: "))
    if n in range(1, 100, 2):
        return(n)
    else:
        sys.exit("Number does not match requirements!")

def main():
    numberinsert()
1 голос
/ 18 апреля 2020

Вы назвали свой список как список. Список - это имя типа данных (я имею в виду его ключевое слово). list1 или другое имя решает эту ошибку. И я глобализировал вашу переменную list1. Я не уверен, что глобализирую часть, но если я ошибся, пожалуйста, предупредите меня. Это мой первый ответ.

import sys

# Function creates a list [1,3,5..99]


def createlist():
    global list1
    list1 = []
    for i in range(1, 100, 2):
        list1.append(i)
    return list1


# Function asks for an odd integer between 1..100


def numberinsert():
    n = int(input("Please enter an odd number between 1 and 100: "))
    if n in list1:
        return n
    else:
        sys.exit("Number does not match requirements!")


def main():
    createlist()
    numberinsert()


main()
...