Найти - Пользователи
Полная версия: Функция def
Начало » Python для новичков » Функция def
1 2
keeper80
Всем здравствуйте пытаюсь решить задачку, и что то у меня затыка
Суть в общем то простая
 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()
Пытаюсь все это превратить в в функции и в конечном итоге запускаю только одну функцию а далее все операции выполняются уже другими функциями.Для начала хотелось бы логику получить, т.е. как бы вы перед тем как кодить выстроили бы логическую цепочку в словах
З.Ы. Заранее извиняюсь за путанность, просьба сильно не бить!!)))
0ppa
keeper80
Всем здравствуйте пытаюсь решить задачку, и что то у меня затыкаСуть в общем то простая
Ну тут форум новичков и я ещё больший новичок чем ты, так что бить тебя тут никто не будет.
Но я тебя не понял, тебе нужно сформулировать вопрос. По коду я тебе конечно не помогу, не весь его понимаю. Но про какие ты функции говоришь? Я вижу у тебя только одну функцию.
keeper80
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 по идее нужно еще разбить на несколько функций, и вот не могу сообразить как мне что наз-ется на листочке накатать планчик, общий план:
Угадать число, при наз-ии числа делать подсказку больше или меньше число
А вот как по функциям все это разбить что то не получается от слова совсем!(((
0ppa

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 про декомпозицию.
keeper80
0ppa
Вот и пытаюсь это сделать, но так как сама конструкция очень простая, то и возникают затыки, но за ссылку спасибо, буду посмотреть!
doza_and
Желательно по фичам бить

 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")
        
xam1816
Это суть игры

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

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

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

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

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