Найти - Пользователи
Полная версия: Жеребьевка
Начало » Python для новичков » Жеребьевка
1
makhauser
Здравствуй, сообщество. Пока что могу считать создание программных продуктов своим хобби. Недавно занялся детальным обмозгованием одного проекта, который связан с жеребьевкой команд. Ранее я пытался создать подобный на том же с++, но не вышло. На данном этапе все работает стабильно (ну, пока не пытаюсь допилить), но остается вопрос, связанный с тем, что команды при жеребьевке (на примере той же ЛЧ) имеют свою страну/конфедерацию, и не могут быть в одной группе вместе с командой из той же страны. Код выглядит так (всякое TODO уберу для читабельности
import random
import os
potA = []; potB = []; potC = []; potD = []
s = 0
l = [potA,potB,potC,potD]
#pot_c = input ("Яка кількість команд у групі? ")
#pot_c = int(pot_c)
#pot = []
#pots = []
#for x in range (0, pot_c): pots.append(pot); pots[x] = []
#print(pots)
#print(pots)
gr_c = input ("Яка кількість груп? ")
try: gr_c = int(gr_c)
except ValueError: print("Ви ввели не число, і що нам з вами робити, га?"); exit()
while gr_c < 2: print("Невірна кількість груп"); gr_c = int(input ("Яка кількість груп? "))
txt_file = input("Введемо назву файла, у нього запишуться наші групи (без формату, тільки назву): ")
while os.path.exists(txt_file + ".txt") or txt_file == "":
 print ("Помилка при виборі імені файлу. Краще спробувати іншу назву ")
 txt_file = input("Введемо назву файла, у нього запишуться наші групи (без формату, тільки назву): ")
 #item = pot_c
for item in l:
   #while s <= pot_c-1:
 s += 1
 for i in range (1, gr_c+1):
  inp = input ("Введіть команду %i для кошика %i: " % (i,s)) # Тут мы берем значение для n груп, учитывая, что в каждой группе - 4 команды
  while inp=="": print("Ви нічого не написали, назва має ж бути, га?"); inp = input ("Введіть команду %i для кошика %i: " % (i,s))
  if inp != '': item.append(inp) # Если простой игнор ввода, сразу выбиваем, при непустой строке (даже, если это пробел), вносим в список
   #print(pots)
random.shuffle (potA); random.shuffle (potB); random.shuffle (potC); random.shuffle (potD) # Мешаем каждый список 
while potD:
 for counter in range (1,gr_c+1):
  f = open (txt_file + ".txt", "a") # Файл, в который будем пихать все группы без слов "1 група - ", открыли, а потом вновь помешали групы, для цикла это важно
  pop_a = potA.pop(); random.shuffle (potA)
  pop_b = potB.pop(); random.shuffle (potB)
  pop_c = potC.pop(); random.shuffle (potC)
  pop_d = potD.pop(); random.shuffle (potD)
  f.write(str(pop_a) + ", " + str(pop_b) + ", " + str(pop_c) + ", " + str(pop_d) + "\n")
  print(str(counter) + " група - " + str(pop_a) + ", " + str(pop_b) + ", " + str(pop_c) + ", " + str(pop_d)) # Каждой итерацией выкидываем элемент из файла, записывая ее для ввывода на экран
 f.write("\n")
 f.close()
 print("")
input("А тепер натисніть <Enter> щоб покинути це страшне місце ") # Закончили все, просто, чтобы уйти красиво, а не после вывода резльтатов

Теоретически я наговаривал себе на мозг и диктофон идеи, но они внезапно делали не то, что ожидалось. Заранее благодарю за советы (ну не словари же пилить, в самом деле, или их?)
py.user.next
makhauser
while gr_c < 2: print("Невірна кількість груп"); gr_c = int(input ("Яка кількість груп? "))
не пиши код в одну строку
если возникнет ошибка в какой-то из частей строки, будет сообщён только номер строки, придётся тратить время на разделение строки на несколько, заново запускать и получать новый номер строки с ошибкой

while gr_c < 2:
    print("Невірна кількість груп")
    gr_c = int(input ("Яка кількість груп? "))

makhauser
random.shuffle (potA); random.shuffle (potB); random.shuffle (potC); random.shuffle (potD) # Мешаем каждый список
вот, например, интерпретатор тебе сообщает, что ошибка в random.shuffle в этой строке; если даже есть каретка (а во многих компиляторах её просто нет), то она может показывать не туда

# Мешаем каждый список
random.shuffle(potA)
random.shuffle(potB)
random.shuffle(potC)
random.shuffle(potD)
при такой записи ошибка в random.shuffle будет показана в конкретной строке
makhauser
py.user.next
не пиши код в одну строку
Спасибо, это я учту. Таки да, лучше писать в большее количество строк, да и нагляднее будет
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB