я должен реализовать пузырьковой сортировки в качестве домашнего задания и мой питон скрипт для поиска параметров командной строки 2:пузырьковой сортировки в Python не сортировать правильно
-f, который указывает путь к файлу входного файла, который содержит число в каждой строке, которую я должен сортировать, используя сортировку пузырьков;
-p что, если указано, сообщает сценарию распечатать отсортированный список чисел в командной строке.
Кроме того, я должен реализовать алгоритм in situ, что означает, что я должен использовать только один список/массив/etc без выделения какого-либо другого временного списка/массива/etc или переменной для хранения одной или части всех номера для сортировки в алгоритме. Итак, в моем сценарии я использую только unsortedList, и больше ничего не нужно, чтобы удерживать числа для сортировки. Я выбрал алгоритм сортировки пузырьков по следующей ссылке: Bubble Sort Homework.
Вот мой сценарий:
import sys, getopt
def main(argv):
inputFilePath = ""
printList = False
# Traitement pour parser les arguments
try:
opts, args = getopt.getopt(argv, "f:p")
except getopt.GetoptError:
usage()
sys.exit()
for opt, arg in opts:
if opt in ("-f"):
inputFilePath = arg
if opt in ("-p"):
printList = True
inputFile = open(inputFilePath, "r")
unsortedList = [line.rstrip('\n') for line in inputFile]
sortedList = bubble(unsortedList)
if printList == True:
print (sortedList)
def usage():
print ("""
Usage: bubble.py -f <filepath> -p
-f <filepath> [REQUIRED]: specifies the filepath of the input file
-p [OPTIONAL]: specifies whether to print the sorted list or not
""")
# Function found at https://stackoverflow.com/questions/895371/bubble-sort-homework
def bubble(unsortedList):
length = len(unsortedList) - 1
isSorted = False
while not isSorted:
isSorted = True
for i in range(length):
if unsortedList[i] > unsortedList[i+1]:
isSorted = False
unsortedList[i], unsortedList[i+1] = unsortedList[i+1], unsortedList[i]
return unsortedList
if __name__ == "__main__":
main(sys.argv[1:])
У меня возникли 2 проблемы с моим сценарием:
во-первых, если я не указать параметр -f, то сценарий не работает использование функции() , он только сообщает «Нет такого файла или каталога:». Почему мой скрипт не использует функцию use()?
Кроме того, алгоритм сортировки пузырьков не работает должным образом. Если я запустил сценарий, цифры не отсортированы должным образом. Я могу, например, увидеть 3998 до 403 в списке. Но я заметил, что числа ARE отсортированы, но только слева от цифр. Например, я вижу 2553, 256, 2562. 256 явно не больше 2553, но если вы берете число слева, третий символ слева, 6, больше, чем третий символ слева от 2553 , который равен 5.
Как я могу решить эти две проблемы?
Благодарим за помощь.
Во-первых, есть причина, по которой вы используете 'getopt'? [Документы] (http://docs.python.org/3/library/getopt.html) явно говорят, что «Пользователи, которые не знакомы с функцией' '' '' '' '' '' '' '' '' '' 'или кто хотел бы написать меньше кода и получите более эффективную помощь и сообщения об ошибках, вместо этого следует рассмотреть возможность использования модуля 'argparse'. Вы, очевидно, не старая рука с C 'getopt', так почему бы вам использовать этот загадочный модуль C-стиля в Python вместо того, который он рекомендует? – abarnert
Во-вторых, не ставьте две совершенно отдельные проблемы вместе в один вопрос. Выберите один и спросите об этом. Или, еще лучше, просто опубликуйте два отдельных вопроса. (Вы можете добавить ссылки между ними, чтобы было очевидно, что они похожи на один и тот же код.) Вы получите более качественные ответы и дважды повторите загрузку. – abarnert
Наконец, пожалуйста, попытайтесь уменьшить то, что вы публикуете, в [Минимальный, Полный, Действительный пример] (http://stackoverflow.com/help/mcve), который содержит достаточно кода, чтобы показать проблему, которую вы хотите исправить, а не всю вашу программу , – abarnert