Форум сайта python.su
0
Здравствуйте! После выполнения всех итераций программа должна спросить у пользователя хочет он начать заново или выйти, написал функцию которая пробегает после завершения. Гуглил как поставить флаг на цикл из программы ничего не нашел. Задумка такая, после выполнения функции и положительного ответа пользователем, нужно ссылаться на цикл while True:
a = input("Посмотрим результаты матчей ? ").lower() и пробегать дальше до конца, а вот как это сделать, не силен в питоне, а прогу надо доделать по учебе, помогите, подскажите доступно пожалуйста!
import re def play_again(): while True: again = input("1)Если вы хотите вернуться к началу введите Да\n 2) А если хотите закончить работу введите Нет: ") if again not in {"Да","да","д","Yes","yes","Нет","нет","No","no"}: print(myname, ",возвращаемся =).") elif again == "Нет" or again == "нет" or again == "No" or again == "no": return "Всего доброго!" elif again == "Да" or again == "да" or again == "д" or again == "Yes" or again == "yes": return def yes_function(): print (myname,'!', search_word,', команда есть в таблице!') def no_function(): print (myname,'! Нет такой команды(((.') fail_balls = {} i=False while not i: myname = input ("Как вас зовут? ") if (re.findall(r'\d', myname)==[] and (len(myname)<15)): i=True print ("Здравствуйте!", myname) else: print("Данные введены неверно!\n 1)Вводимые данные не должны содержать цифры 1,2 и т.д.\n 2)Введенные символы не должны превышать 15 знаков.\n Попробуйте еще раз =)!") i=False while True: a = input("Посмотрим результаты матчей ? [Да/Нет]").lower() if a == 'Yes' or a == 'yes' or a == 'ye' or a == 'y' or a == 'Да' or a == 'да' or a == 'д': break f = open ('baza.txt', 'r', encoding='utf-8-sig', errors='ignore' ) for line in f: print(line) with open('baza.txt', encoding='utf-8-sig', errors='ignore' ) as f: for line in f.read().splitlines(): name1,name2,value1,value2,name3,name4,value3,value4,name5,name6,value5,value6,name7,name8,value7,value8 = line.split() #Суммирование пропущенных мячей if name1 in fail_balls: fail_balls[name1] += value2 else: fail_balls[name1] = value2 if name2 in fail_balls: fail_balls[name2] += value1 else: fail_balls[name2] = value1 if name3 in fail_balls: fail_balls[name3] += value4 else: fail_balls[name3] = value4 if name4 in fail_balls: fail_balls[name4] += value3 else: fail_balls[name4] = value3 if name5 in fail_balls: fail_balls[name5] += value6 else: fail_balls[name5] = value6 if name6 in fail_balls: fail_balls[name6] += value5 else: fail_balls[name6] = value5 if name7 in fail_balls: fail_balls[name7] += value8 else: fail_balls[name7] = value8 if name8 in fail_balls: fail_balls[name8] += value7 else: fail_balls[name8] = value7 #Сортировка по имени команды fail_balls = {name:fail_balls[name] for name in sorted(fail_balls)} #Вывод команд for name in fail_balls: value = fail_balls[name] print('Команда : {} => пропустила мячей = {}'.format(name, value)) with open('baza.txt') as file: search_word = input("Введи название команды для поиска в базе: ") if search_word in fail_balls: yes_function () else: no_function () play_again()
Прикреплённый файлы:
baza.txt (151 байт)
Офлайн
13
Просто все то, что хочешь повторить, вгони в отдельную функцию, и из play_again() ее вызывай.
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн
0
Спасибо, получилось если я правильно понял, еще сделал функцию вогнал как посоветовали и переменные обозначил глобальными. Вот, что получилось :
import re def play_again(): while True: again = input("1)Если вы хотите вернуться к началу введите Да\n 2) А если хотите закончить работу введите Нет: ") if again not in {"Да","да","д","Yes","yes","Нет","нет","No","no"}: print(myname, ",возвращаемся =).") elif again == "Нет" or again == "нет" or again == "No" or again == "no": return "Всего доброго!" elif again == "Да" or again == "да" or again == "д" or again == "Yes" or again == "yes": return repeat_again() def repeat_again(): global name1,name2,value1,value2,name3,name4,value3,value4,name5,name6,value5,value6,name7,name8,value7,value8,fail_balls while True: a = input("Посмотрим результаты матчей ? [Да/Нет]").lower() if a == 'Yes' or a == 'yes' or a == 'ye' or a == 'y' or a == 'Да' or a == 'да' or a == 'д': break f = open ('baza.txt', 'r', encoding='utf-8-sig', errors='ignore' ) for line in f: print(line) with open('baza.txt', encoding='utf-8-sig', errors='ignore' ) as f: for line in f.read().splitlines(): name1,name2,value1,value2,name3,name4,value3,value4,name5,name6,value5,value6,name7,name8,value7,value8 = line.split() #Суммирование пропущенных мячей if name1 in fail_balls: fail_balls[name1] += value2 else: fail_balls[name1] = value2 if name2 in fail_balls: fail_balls[name2] += value1 else: fail_balls[name2] = value1 if name3 in fail_balls: fail_balls[name3] += value4 else: fail_balls[name3] = value4 if name4 in fail_balls: fail_balls[name4] += value3 else: fail_balls[name4] = value3 if name5 in fail_balls: fail_balls[name5] += value6 else: fail_balls[name5] = value6 if name6 in fail_balls: fail_balls[name6] += value5 else: fail_balls[name6] = value5 if name7 in fail_balls: fail_balls[name7] += value8 else: fail_balls[name7] = value8 if name8 in fail_balls: fail_balls[name8] += value7 else: fail_balls[name8] = value7 #Сортировка по имени команды fail_balls = {name:fail_balls[name] for name in sorted(fail_balls)} #Вывод команд for name in fail_balls: value = fail_balls[name] print('Команда : {} => пропустила мячей = {}'.format(name, value)) with open('baza.txt') as file: search_word = input("Введи название команды для поиска в базе: ") if search_word in fail_balls: yes_function () else: no_function () play_again() return def yes_function(): print (myname,'!', search_word,', команда есть в таблице!') def no_function(): print (myname,'! Нет такой команды(((.') fail_balls = {} i=False while not i: myname = input ("Как вас зовут? ") if (re.findall(r'\d', myname)==[] and (len(myname)<15)): i=True print ("Здравствуйте!", myname) else: print("Данные введены неверно!\n 1)Вводимые данные не должны содержать цифры 1,2 и т.д.\n 2)Введенные символы не должны превышать 15 знаков.\n Попробуйте еще раз =)!") i=False while True: a = input("Посмотрим результаты матчей ? [Да/Нет]").lower() if a == 'Yes' or a == 'yes' or a == 'ye' or a == 'y' or a == 'Да' or a == 'да' or a == 'д': break f = open ('baza.txt', 'r', encoding='utf-8-sig', errors='ignore' ) for line in f: print(line) with open('baza.txt', encoding='utf-8-sig', errors='ignore' ) as f: for line in f.read().splitlines(): name1,name2,value1,value2,name3,name4,value3,value4,name5,name6,value5,value6,name7,name8,value7,value8 = line.split() #Суммирование пропущенных мячей if name1 in fail_balls: fail_balls[name1] += value2 else: fail_balls[name1] = value2 if name2 in fail_balls: fail_balls[name2] += value1 else: fail_balls[name2] = value1 if name3 in fail_balls: fail_balls[name3] += value4 else: fail_balls[name3] = value4 if name4 in fail_balls: fail_balls[name4] += value3 else: fail_balls[name4] = value3 if name5 in fail_balls: fail_balls[name5] += value6 else: fail_balls[name5] = value6 if name6 in fail_balls: fail_balls[name6] += value5 else: fail_balls[name6] = value5 if name7 in fail_balls: fail_balls[name7] += value8 else: fail_balls[name7] = value8 if name8 in fail_balls: fail_balls[name8] += value7 else: fail_balls[name8] = value7 #Сортировка по имени команды fail_balls = {name:fail_balls[name] for name in sorted(fail_balls)} #Вывод команд for name in fail_balls: value = fail_balls[name] print('Команда : {} => пропустила мячей = {}'.format(name, value)) with open('baza.txt') as file: search_word = input("Введи название команды для поиска в базе: ") if search_word in fail_balls: yes_function () else: no_function () play_again()
Офлайн
13
Могу дать совет, ну так, на будущее.
1. Не исп. str.format(), он нужен не для этого. делай так:
"%s - it is some str; %d - some int; %f - some float and etc." % (string, decimal, float_)
Vanechicвместо такой колбасы используй либо globals() или ассоциативный массив
name1,name2,value1,value2,name3,name4,value3,value4,name5,name6,value5,value6,name7,name8,value7,value8 = line.split()
Vanechicкое-что еще:
Спасибо, получилось если я правильно понял, еще сделал функцию вогнал как посоветовали и переменные обозначил глобальными. Вот, что получилось :
Vanechicты же исп. метод .lower(), зачем проверять на заглавные варианты и вообще разные другие, если ты дал четко понять юзеру писать да/нет?
a = input("Посмотрим результаты матчей ? ").lower()
if a == ‘Yes’ or a == ‘yes’ or a == ‘ye’ or a == ‘y’ or a == ‘Да’ or a == ‘да’ or a == ‘д’:
VanechicСделай 1 функцию, принимающую состояние:
def yes_function():
print (myname,'!', search_word,', команда есть в таблице!')
def no_function():
print (myname,'! Нет такой команды(((.')
def answer(state: bool): print(myname, ("! " + search_word + ", команда есть в таблице") if state else ",! нет такой команды!")
VanechicЗакрывай открытые файлы на запись и даже чтение или обрамляй в with open() …, а то, если прога вылетит, то файл останется открытым и немодифицируемым (будет пустой для тебя) для режима write и очень нестабильным в режиме read.
f = open ('baza.txt', ‘r’, encoding='utf-8-sig', errors='ignore' )
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Отредактировано DamMercul (Апрель 28, 2019 17:42:38)
Офлайн