2016-03-09 3 views
0

Я пытаюсь создать программу на python, чтобы делать манипуляции с списками/массивами. У меня возникли проблемы с ошибкой:Python Lists: .lower() error error

lowercase = names.lower
AttributeError: 'list' object has no attribute 'lower'

Мне действительно нужна помощь, чтобы исправить это!

names = [] #Declares an array 
print("Type menu(), to begin") 
def menu(): 

    print("----------------------------MENU-----------------------------") 
    print("Type: main() for core functions") 
    print("Type: delete() to delete a name") 
    print("Type: save() to save the code") 
    print("Type: load() to load the saved array") 
    print("Type: lower() to make all items in the list lower case") 
    print("-------------------------------------------------------------") 

def main(): 
    times = int(input("How many names do you want in the array? ")) #Asks the user how many names they want in the array 
for i in range(times): 
    names.append(input("Enter a name ")) #Creates a for loop that runs for the amount of times the user requested, it asks the user to enter the names 
choice = input("Would you like the array printed backwards? ") #asks the user whether they want the array backwards 
if choice == "Yes": 
    names.reverse() #If the user says yes, the array is reversed then printed backwards 
    print(names) 
else: 
    print(names) #Otherwise, the array is printed normally 
number = int(input("Which item would you like to print out? ")) 
number = number - 1 
print(names[number]) 
start = int(input("What is the first position of the range of items to print out? ")) 
start = start - 1 
end = int(input("What is the last position of the range of items to print out? ")) 
print(names[start:end]) 

def delete(): 
    takeAway = input("Which name would you like to remove? ") 
    names.remove(takeAway) 
    print(names) 

def save(): 
    saving1 = open("Save.txt", 'w') 
    ifsave = input("Would you like to save the array? ") 
    if ifsave == "Yes": 
     for name in names: 
       saving1.write("%s\n" % name) 
       saving1.close 
    else: 
     menu() 
def load(): 
    loadquestion = input("Would you like to load a list of names? ") 
    if loadquestion == "Yes": 
     saving1 = open('Save.txt', 'r') 
     print(saving1.read()) 
     saving1.close() 
    else: 
     menu() 
def lower(): 
    lowerq = input("Would you like to make the array lowercase? ") 
    if lowerq == "Yes": 
     lowercase = names.lower 
     print(lowercase) 
    else: 
     menu() 
+0

Пожалуйста, научитесь предоставлять [mcve] вместо того, чтобы сбрасывать весь ваш код здесь. –

ответ

2

Как сообщение об ошибке говорит, вы не можете использовать .lower() в списках, только на струнах. Это означает, что вам придется пройти по списку и использовать .lower() по каждому элементу списка:

lowercase = [x.lower() for x in names] 
+1

Еще одна вещь, которую следует отметить, это то, что он вообще не называет * '.lower'; он просто упоминал об этом. Второй способ сделать это - использовать 'map()': 'lowercase = map (str.lower, names)'. – zondo

+1

, так как этот пользователь, очевидно, новичок в python, может быть полезно записать, что на самом деле делает этот список comp: 'lowercase = [] для x в именах: # итерации по списку имен lowercase.append (x .lower()) ' – n1c9

3

Переменная names список. Вы не можете использовать метод .lower() в списке.

pp_ при условии, что решение:

lowercase = [x.lower() for x in names] 

Пока не точно эквивалентен предыдущему примеру, это может прочитать вам лучше и имеет, по сути, тот же результат:

lowercase=[] 
for name in names: 
    lowercase.append(name.lower()) 

Альтернативное решение, которое может соответствовать вашим потребностям:

print (str(names).lower())