Вычислить программу Python для отображения следующего вывода с исходными 13 состояниями в алфавитном порядке - PullRequest
0 голосов
/ 12 октября 2019

Файл States.txt содержит 50 штатов США в том порядке, в котором они вступили в профсоюз. Напишите программу, используя цикл for, для отображения следующего вывода с исходными 13 состояниями в алфавитном порядке.

Содержимое внутри файла States.txt:

Delaware
Pennsylvania
New Jersey
Georgia
Connecticut
Massachusetts
Maryland
South Carolina
New Hampshire
Virginia
New York
North Carolina
Rhode Island
Vermont
Kentucky
Tennessee
Ohio
Louisiana
Indiana
Mississippi
Illinois
Alabama
Maine
Missouri
Arkansas
Michigan
Florida
Texas
Iowa
Wisconsin
California
Minnesota
Oregon
Kansas
West Virginia
Nevada
Nebraska
Colorado
North Dakota
South Dakota
Montana
Washington
Idaho
Wyoming
Utah
Oklahoma
New Mexico
Arizona
Alaska
Hawaii

Моя текущая кодировка:

infile = open("States.txt", 'r')
states = [line.rstrip() for line in infile]
states.sort()      # I sort those 50 states in alphabetical order first
for state in states:
    print("\r", states[6],"\n",states[7], "\n", states[9], "\n", states[19], "\n", states[20], "\n", states[28], "\n", states[29], "\n", states[31], "\n", states[32], "\n", states[37], "\n", states[38], "\n", states[39], "\n", states[45], end="")   #I locate exact position of those 13 states
    break
infile.close()

Хотя яможет отображать ожидаемый результат, используя вышеуказанную кодировку, это определенно не очень хороший способ использовать функцию цикла for, поскольку я все еще могу отображать точный результат без оператора цикла for.

Ожидаемый результат для программы: (13 состояний необходимо отображать по вертикали)

Connecticut
Delaware
Georgia
Maryland
Massachusetts
New Hampshire
New Jersey
New York
North Carolina
Pennsylvania
Rhode Island
South Carolina
Virginia

Ответы [ 5 ]

0 голосов
/ 13 октября 2019

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

with open ('States.txt') as file:
    states = list(file.read().split('\n')[:13])
    states.sort()

for state in states:
    print (state)
Connecticut
Delaware
Georgia
Maryland
Massachusetts
New Hampshire
New Jersey
New York
North Carolina
Pennsylvania
Rhode Island
South Carolina
Virginia
0 голосов
/ 12 октября 2019

Это мой первый вклад в stackoverflow, поэтому, пожалуйста, будьте осторожны. Я хочу принять более активное участие и дать ответ, потому что это сообщество очень помогло мне.

Кто-то, вероятно, может упростить это еще больше, но это мое решение:

filename="States.txt"
states= list()

with open (filename) as file:
    # convert to list of names 
    items = list(file.read().split())

Создать списокимена состояний из файла. Поскольку файл содержит имена, разделенные пробелами, вам необходимо объединить некоторые имена: например, Нью-Йорк

two_word_state_names=['New','North','South','West', 'Rhode']
skip=False

for idx,item in enumerate(items):
    if skip:
        skip=False
        continue
    elif item in two_word_state_names:
        states.append(str(items[idx] + " " + items[idx+1]))
        skip=True # skip the next loop because next item is the second word of the state
    else:
        states.append(item)

Теперь вы можете отсортировать и распечатать первые тринадцать:

thirteen_states=states[:13]
thirteen_states.sort()

# Print result
for state in thirteen_states:
    print (state)
Connecticut
Delaware
Georgia
Maryland
Massachusetts
New Hampshire
New Jersey
New York
North Carolina
Pennsylvania
Rhode Island
South Carolina
Virginia
0 голосов
/ 12 октября 2019

Вы можете использовать нарезку , чтобы взять первые 13 записей states перед сортировкой:

infile = open("States.txt", 'r')
states = [line.rstrip() for line in infile]
original_states = states[:13]
original_states.sort()
for state in original_states:
    print(state)
infile.close()
0 голосов
/ 12 октября 2019

Вы можете использовать itertools.islice, чтобы прочитать только первые 13 строк файла перед их сортировкой:

from itertools import islice
with open('States.txt') as infile:
    print(*sorted(islice(infile, 13)), sep='')
0 голосов
/ 12 октября 2019

Итак, если первый список содержит 50 состояний, и вы должны вывести 13 из них в отсортированном порядке, я думаю, вы могли бы составить список, содержащий 13 состояний ключа, а в цикле for вы можете проверить, является ли состояниеодин из них, и только если верно, напечатайте его?

...