#python #python-3.x
#python #python-3.x
Вопрос:
Итак, я почти закончил свой код здесь, чтобы пользователь вводил количество элементов в своем списке несортированных массивов, но единственное, что мне осталось, это добавить в этот код оператор цикла «вы хотите повторить попытку снова».
def bubblesort(array):
loop1 = 1
for i in range(len(array)):
for j in range(0, len(array) - i - 1):
print('Loop', loop1 ,':')
if array[j] > array[j 1]:
(array[j], array[j 1]) = (array[j 1], array[j])
print(array)
loop1 = loop1 1
def selectionsort(array, size):
loop1 = 1;
for step in range(size):
min_idx = step
print('Loop1', loop1, ':')
for i in range(step 1, size):
if array[i] < array[min_idx]:
min_idx = 1
(array[step], array[min_idx]) = (array[min_idx], array[step])
loop1 = loop1 1
print(array)
def insertionsort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >= 0 and key < arr[j]:
arr[j 1] = arr[j]
j -= 1
arr[j 1] = key
def merge(arr, l, m, r):
n1 = m - l 1
n2 = r- m
L = [0] * (n1)
R = [0] * (n2)
for i in range(0 , n1):
L[i] = arr[l i]
for j in range(0 , n2):
R[j] = arr[m 1 j]
i = 0
j = 0
k = l
while i < n1 and j < n2 :
if L[i] <= R[j]:
arr[k] = L[i]
i = 1
else:
arr[k] = R[j]
j = 1
k = 1
while i < n1:
arr[k] = L[i]
i = 1
k = 1
while j < n2:
arr[k] = R[j]
j = 1
k = 1
def mergeSort(arr,l,r):
if l < r:
m = (l (r-1))//2
mergeSort(arr, l, m)
mergeSort(arr, m 1, r)
merge(arr, l, m, r)
def quicksort(array1):
if len(array1) <= 1:
return array1
else:
pivot = array1.pop()
greater_items = []
lesser_items = []
for item in array1:
if item > pivot:
greater_items.append(item)
else:
lesser_items.append(item)
return quicksort(lesser_items) [pivot] quicksort(greater_items)
def shellsort(array,n):
loop1 = 1
for i in range(len(array)):
print('Loop', loop1)
interval = n // 2
while interval > 0:
print(array)
for i in range(interval, n):
temp = array[i]
j = i
while j >= interval and array[j - interval] > temp:
array[j] = array[j - interval]
j -= interval
array[j] = temp
interval //= 2
loop1 = 1
lst = []
num_elem = int(input('Enter the number of elements:'))
for i in range(0, num_elem):
elem = int(input('Enter your element/s:'))
lst.append(elem)
print('Array contains:', lst)
print('Sorting Menus:')
print('[A] Bubble Sort')
print('[B] Insertion Sort')
print('[C] Merge Sort')
print('[D] Quick Sort')
print('[E] Selection Sort')
print('[F] Shell Sort')
print('[Q] Quit Program')
choice = str(input('Enter input:'))
if choice == 'a':
print('Original unsorted array:', lst)
bubblesort(lst)
print('Bubble Sorted Array in Ascending Order:')
print(lst)
elif choice == 'b':
insertionsort(lst)
print('Insertion Sort in Ascending Order:')
for i in range(len(lst)):
print(lst[i], end=',')
elif choice == 'c':
n = len(lst)
print ("Given array is")
for i in range(n):
print ("%d" %lst[i]),
mergeSort(lst,0,n-1)
print ("nnSorted array is")
for i in range(n):
print ("%d" %lst[i]),
elif choice == 'd':
print('Quick Sorting in Ascending Order:')
print(quicksort(lst))
elif choice == 'e':
print('Original Unsorted Array:')
print(lst)
size = len(lst)
selectionsort(lst, size)
print('Selection Sorted Array in Ascending Order:')
print(lst)
elif choice == 'f':
print('Unsorted Array:', lst)
size = len(lst)
shellsort(lst, size)
print('Shell Sorted Array in Ascending Order', lst)
elif choice == 'q':
print('Exiting Program...')
exit()
else:
print('Invalid Choice! Please retype a proper listing menu.')
Куда я могу вставить оператор цикла повторных попыток, который заставит меня начать с самого начала, где я буду вводить данные пользователем для моего списка несортированных массивов?
Комментарии:
1. Оберните
while
цикл вокруг всего этого.2. Пожалуйста, используйте правильный отступ. Это сделает код легко читаемым.
3. Я попытался добавить управляющий код здесь, в моем заявлении, где я хотел ввести количество элементов без помощи цикла while, и это работает
Ответ №1:
Попробуйте это
def bubblesort(array):
loop1 = 1
for i in range(len(array)):
for j in range(0, len(array) - i - 1):
print('Loop', loop1 ,':')
if array[j] > array[j 1]:
(array[j], array[j 1]) = (array[j 1], array[j])
print(array)
loop1 = loop1 1
def selectionsort(array, size):
loop1 = 1
for step in range(size):
min_idx = step
print('Loop1', loop1, ':')
for i in range(step 1, size):
if array[i] < array[min_idx]:
min_idx = 1
(array[step], array[min_idx]) = (array[min_idx], array[step])
loop1 = loop1 1
print(array)
def insertionsort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >= 0 and key < arr[j]:
arr[j 1] = arr[j]
j -= 1
arr[j 1] = key
def merge(arr, l, m, r):
n1 = m - l 1
n2 = r- m
L = [0] * (n1)
R = [0] * (n2)
for i in range(0 , n1):
L[i] = arr[l i]
for j in range(0 , n2):
R[j] = arr[m 1 j]
i = 0
j = 0
k = l
while i < n1 and j < n2 :
if L[i] <= R[j]:
arr[k] = L[i]
i = 1
else:
arr[k] = R[j]
j = 1
k = 1
while i < n1:
arr[k] = L[i]
i = 1
k = 1
while j < n2:
arr[k] = R[j]
j = 1
k = 1
def mergeSort(arr,l,r):
if l < r:
m = (l (r-1))//2
mergeSort(arr, l, m)
mergeSort(arr, m 1, r)
merge(arr, l, m, r)
def quicksort(array1):
if len(array1) <= 1:
return array1
else:
pivot = array1.pop()
greater_items = []
lesser_items = []
for item in array1:
if item > pivot:
greater_items.append(item)
else:
lesser_items.append(item)
return quicksort(lesser_items) [pivot] quicksort(greater_items)
def shellsort(array,n):
loop1 = 1
for i in range(len(array)):
print('Loop', loop1)
interval = n // 2
while interval > 0:
print(array)
for i in range(interval, n):
temp = array[i]
j = i
while j >= interval and array[j - interval] > temp:
array[j] = array[j - interval]
j -= interval
array[j] = temp
interval //= 2
loop1 = 1
def host():
lst = []
num_elem = int(input('Enter the number of elements:'))
for i in range(0, num_elem):
elem = int(input('Enter your element/s:'))
lst.append(elem)
print('Array contains:', lst)
print('Sorting Menus:')
print('[A] Bubble Sort')
print('[B] Insertion Sort')
print('[C] Merge Sort')
print('[D] Quick Sort')
print('[E] Selection Sort')
print('[F] Shell Sort')
print('[Q] Quit Program')
choice = str(input('Enter input:'))
if choice == 'a':
print('Original unsorted array:', lst)
bubblesort(lst)
print('Bubble Sorted Array in Ascending Order:')
print(lst)
elif choice == 'b':
insertionsort(lst)
print('Insertion Sort in Ascending Order:')
for i in range(len(lst)):
print(lst[i], end=',')
elif choice == 'c':
n = len(lst)
print ("Given array is")
for i in range(n):
print ("%d" %lst[i]),
mergeSort(lst,0,n-1)
print ("nnSorted array is")
for i in range(n):
print ("%d" %lst[i]),
elif choice == 'd':
print('Quick Sorting in Ascending Order:')
print(quicksort(lst))
elif choice == 'e':
print('Original Unsorted Array:')
print(lst)
size = len(lst)
selectionsort(lst, size)
print('Selection Sorted Array in Ascending Order:')
print(lst)
elif choice == 'f':
print('Unsorted Array:', lst)
size = len(lst)
shellsort(lst, size)
print('Shell Sorted Array in Ascending Order', lst)
elif choice == 'q':
print('Exiting Program...')
exit()
else:
print('Invalid Choice! Please retype a proper listing menu.')
choice = input('Would you like to retry [Y]/[N]')
if choice.lower()=='y':
host()
else:
print('Exiting Program...')
exit()
host()
Комментарии:
1. вы только что добавили оператор def host() прямо перед тем, как я начну вводить количество элементов в моем несортированном массиве?
2. Я помещаю код управления в функцию, и если вы хотите повторить попытку, вы можете просто вызвать функцию, в данном случае ее host()
3. это действительно сработало, хотя программа действительно начиналась с того места, где я вводил количество элементов. Большое вам спасибо за это!
Ответ №2:
Поместите цикл while непосредственно перед присвоением значения lst = []
: