Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2019 15:51:11

Vanechic
Зарегистрирован: 2019-04-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Когда программа подходит к концу, предлагает выбрать действие начать заново или выйти.

Здравствуйте! После выполнения всех итераций программа должна спросить у пользователя хочет он начать заново или выйти, написал функцию которая пробегает после завершения. Гуглил как поставить флаг на цикл из программы ничего не нашел. Задумка такая, после выполнения функции и положительного ответа пользователем, нужно ссылаться на цикл 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() 

Прикреплённый файлы:
attachment baza.txt (151 байт)

Офлайн

#2 Апрель 28, 2019 15:54:57

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Когда программа подходит к концу, предлагает выбрать действие начать заново или выйти.

Просто все то, что хочешь повторить, вгони в отдельную функцию, и из play_again() ее вызывай.



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#3 Апрель 28, 2019 17:25:02

Vanechic
Зарегистрирован: 2019-04-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Когда программа подходит к концу, предлагает выбрать действие начать заново или выйти.

Спасибо, получилось если я правильно понял, еще сделал функцию вогнал как посоветовали и переменные обозначил глобальными. Вот, что получилось :

 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()

Офлайн

#4 Апрель 28, 2019 17:40:53

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Когда программа подходит к концу, предлагает выбрать действие начать заново или выйти.

Могу дать совет, ну так, на будущее.
1. Не исп. str.format(), он нужен не для этого. делай так:

 "%s - it is some str; %d - some int; %f - some float and etc." % (string, decimal, float_)
2.
Vanechic
name1,name2,value1,value2,name3,name4,value3,value4,name5,name6,value5,value6,name7,name8,value7,value8 = line.split()
вместо такой колбасы используй либо globals() или ассоциативный массив
3.
Vanechic
Спасибо, получилось если я правильно понял, еще сделал функцию вогнал как посоветовали и переменные обозначил глобальными. Вот, что получилось :
кое-что еще:
Vanechic
a = input("Посмотрим результаты матчей ? ").lower()
if a == ‘Yes’ or a == ‘yes’ or a == ‘ye’ or a == ‘y’ or a == ‘Да’ or a == ‘да’ or a == ‘д’:
ты же исп. метод .lower(), зачем проверять на заглавные варианты и вообще разные другие, если ты дал четко понять юзеру писать да/нет?
Vanechic
def yes_function():
print (myname,'!', search_word,', команда есть в таблице!')
def no_function():
print (myname,'! Нет такой команды(((.')
Сделай 1 функцию, принимающую состояние:
 def answer(state: bool): print(myname, ("! " + search_word + ", команда есть в таблице") if state else ",! нет такой команды!")
Много еще есть маленьких ошибок писания кода и экономии места в скрипте и памяти
Vanechic
f = open ('baza.txt', ‘r’, encoding='utf-8-sig', errors='ignore' )
Закрывай открытые файлы на запись и даже чтение или обрамляй в with open() …, а то, если прога вылетит, то файл останется открытым и немодифицируемым (будет пустой для тебя) для режима write и очень нестабильным в режиме read.




____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Отредактировано DamMercul (Апрель 28, 2019 17:42:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version