Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 7, 2020 09:50:10

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция def

Всем здравствуйте пытаюсь решить задачку, и что то у меня затыка
Суть в общем то простая

 import random
def game():
    i = 1
    while i < 5:
        name = input('Как вас зовут? ')
        sn = random.randint(1, 50)
        print('И так ' + name + ' , я загадал число от 1 до 50')
        attempts = 0
        for attempts in range(6):
            guess = input('Введите число: ')
            guess = int(guess)
            if guess > sn:
                print('Ваше число больше')
            if guess < sn:
                print('Ваше число меньше')
            if guess == sn:
                break
        if guess == sn:
            print('Поздравляю вас ' + name + ' вы угадали и выиграли!!')
        if guess != sn:
            print('Примите мои собалезнования вы ' + name + 'проиграли')
        playAgain = input('Хотите повторить(Д или Н): ')
        if (playAgain == 'n') or (playAgain == 'н'):
            i = 6
game()
Пытаюсь все это превратить в в функции и в конечном итоге запускаю только одну функцию а далее все операции выполняются уже другими функциями.Для начала хотелось бы логику получить, т.е. как бы вы перед тем как кодить выстроили бы логическую цепочку в словах
З.Ы. Заранее извиняюсь за путанность, просьба сильно не бить!!)))

Офлайн

#2 Окт. 7, 2020 15:40:16

0ppa
Зарегистрирован: 2020-08-12
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Функция def

keeper80
Всем здравствуйте пытаюсь решить задачку, и что то у меня затыкаСуть в общем то простая
Ну тут форум новичков и я ещё больший новичок чем ты, так что бить тебя тут никто не будет.
Но я тебя не понял, тебе нужно сформулировать вопрос. По коду я тебе конечно не помогу, не весь его понимаю. Но про какие ты функции говоришь? Я вижу у тебя только одну функцию.

Офлайн

#3 Окт. 7, 2020 15:50:03

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция def

0ppa
Грубо говоря я дошел до такого

 import random as RND
def getNumRnd():
    number = RND.randint(1,50)
    return number
def rules(number,guess):
    attempts = 5
    while attempts == 0:
        print(attempts)
        if guess == number:
            attempts = 0
            return f'you win'
        elif guess > number:
            attempts -= 1
            return f'Ваше число {guess} больше'
        elif guess < number:
            attempts -= 1
            return f'Ваше число {guess} меньше'
def game():
    pl_name = input('Введите ваше имя: ')
    number = getNumRnd()
    print(f'И так {pl_name} я загадал число от 1 до 50')
    guess = input('Введите ваше число :')
    return rules(number,int(guess))
game()
А хотелось бы что бы при активации(обьявлении) одной функции(game()) запускались остальные функции по мере надобности, допустим def rules по идее нужно еще разбить на несколько функций, и вот не могу сообразить как мне что наз-ется на листочке накатать планчик, общий план:
Угадать число, при наз-ии числа делать подсказку больше или меньше число
А вот как по функциям все это разбить что то не получается от слова совсем!(((

Офлайн

#4 Окт. 7, 2020 16:20:07

0ppa
Зарегистрирован: 2020-08-12
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Функция def


keeper80
А хотелось бы что бы при активации(обьявлении) одной функции(game()) запускались остальные функции по мере надобности, допустим def rules по идее нужно еще разбить на несколько функций, и вот не могу сообразить как мне что наз-ется на листочке накатать планчик, общий план:
Угадать число, при наз-ии числа делать подсказку больше или меньше число
А вот как по функциям все это разбить что то не получается от слова совсем!(((
Ну тут я тебе не помогу конечно. Может кто другой сможет. Но все равно твой ответ для меня звучит странно, как будто ты сначала написал код, а теперь пытаешься придумать условие задачи. Если у тебя есть условие, выкладывай. Вообще могу порекомендовать из того, что сам делаю https://python.su/forum/topic/35603/?page=1 - это робот по Лекциям от Тимофея Федоровича. Почитай тему порешай задачи, больше будешь понимать в целом. Вот например сообщение от py.user.next https://python.su/forum/topic/35603/?page=3#post-199278 про декомпозицию.

Офлайн

#5 Окт. 7, 2020 16:26:31

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция def

0ppa
Вот и пытаюсь это сделать, но так как сама конструкция очень простая, то и возникают затыки, но за ссылку спасибо, буду посмотреть!

Офлайн

#6 Окт. 7, 2020 16:43:05

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Функция def

Желательно по фичам бить

 def gess_is_ok(gess,num):
    if gess<num:
        print("<")
        retrn False
    if gess>num
        print(">")
        retrn False
    print("Ok!!")
    retrn True
def game():
   num=RND()
   for i in range(5): # num try
        gess = int(input("gess number"))
        if gess_is_ok(gess,num):
             break
    print("fail")
        



Офлайн

#7 Окт. 7, 2020 18:13:30

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Функция def

Это суть игры

 игра()
   а = неизвестное_число()
   для i из диапазона(5):
           б = число_пользователя()
           если сравнение(а,б) == Истина
                    выигрыш()
                    закончить
    проигрыш()

теперь пиши функции которые в коде игры:

 функция неизвестное_число():
       число = рандомное_число() # в своем коде ты используешь random.randint(1, 50)
       вернуть число

следующая
 функция число_пользователя():
         строка = ввод в консоль(введите число)
         если строка.является_числом()
               число = int(строка)#приводим к нужному типу данных с которым будем работать,
                вернуть число

и так все остальные функции

Офлайн

#8 Окт. 11, 2020 09:28:02

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция def

doza_and
xam1816
Спасибо, накатал, но возникла проблема и ни как не могу понять почему именно так происходит

 import random as RND
def getNumRnd():
    number = RND.randint(1,50)
    return number
def rul_1():
    answer = 'Ваше число меньше'
    return answer
def rul_2():
    answer = 'Ваше число больше'
    return answer
def win():
    print('Вы выиграли! ')
def game_over():
    i = 2
    while i > 1:
        pl = input('Хотите начать заново? (да\нет)')
        if pl == 'да' or pl == 'д':
            game()
        else:
            i = 0 
            print('GOODBYE')
def pl_input(number):
    number = input('Введите ваше число: ')
    return int(number)
def game():
    pl_name = input('Введите ваше имя: ')
    number = getNumRnd()
    print(f'SN = {number}')
    print(f'И так {pl_name} я загадал число от 1 до 50')
    for i in range(5):
        guess = pl_input(number) #input('Введите ваше число :')
        if guess > number:
            print(rul_2())
        elif guess < pl_input(number):
            print(rul_1())
        elif guess == pl_input(number):
            win()
            break
    game_over()        
    
game()
Суть в том что работает но очччень коряво, хотелось бы понять почему, что я упускаю!!???

Офлайн

#9 Окт. 11, 2020 17:00:10

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Функция def

keeper80
что я упускаю
вам нужно разобраться с функциями.Вы плохо понимаете как они работают

 def pl_input(number):
    number = input('Введите ваше число: ')
    return int(number)

у вас функция принимает аргумент,вопрос зачем?

и далее в коде

 number = getNumRnd()
    print(f'SN = {number}')
    print(f'И так {pl_name} я загадал число от 1 до 50')
    for i in range(5):
        guess = pl_input(number)

берете число которое загадали number, передали функции pl_input(number),
теперь это число которое было загадано, функция вернула как число пользователя,

далее в коде
 		elif guess < pl_input(number):
			print(rul_1())
когда комп дойдет до строчки pl_input(number),по вашему что будет происходить?

Отредактировано xam1816 (Окт. 11, 2020 17:07:22)

Офлайн

#10 Окт. 14, 2020 09:47:26

keeper80
Зарегистрирован: 2020-09-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция def

Так вроде понял ошибку, но при выигрыше с первого раза приходиться дважды подтверждать выход, в чем трабла????

 import random as RND
def getNumRnd():
    sn = RND.randint(1,50)
    return int(sn)
def rul_1():
    answer = 'Ваше число меньше'    
    return answer
def rul_2():
    answer = 'Ваше число больше'
    return answer
def win():
    print('Вы выиграли! ')
    game_over()
def game_over():
    i = 2
    while i > 1:
        pl = input('Хотите начать заново? (да\нет)')
        if pl == 'да' or pl == 'д':
            game()
        else:
            i = 0 
            print('GOODBYE')
def pl_input():
    num = input('Введите ваше число: ')
    return int(num)
def game():
    pl_name = input('Введите ваше имя: ')
    sn = getNumRnd()
    print(f'SN = {sn}')
    print(f'И так {pl_name} я загадал число от 1 до 50')
    for i in range(5):
        guess = pl_input() #input('Введите ваше число :')
        if guess > sn:
            print(rul_2())
        elif guess < sn:
            print(rul_1())
        elif guess == sn:
            win()
            break
    game_over()        
    
game()

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version