Начинающий питон - застрял в петле - PullRequest
0 голосов
/ 16 марта 2010

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

num=54
bob = True
print('The guess a number Game!')


while bob == True:
    guess = int(input('What is your guess?  '))

    if guess==num:
        print('wow! You\'re awesome!')
        print('but don\'t worry, you still suck')
        bob = False
    elif guess>num:
        print('try a lower number')
    else:
        print('close, but too low')

print('game over')``

и это дает предсказуемый результат;

The guess a number Game!
What is your guess?  12
close, but too low
What is your guess?  56
try a lower number
What is your guess?  54
wow! You're awesome!
but don't worry, you still suck
game over

Однако у меня также есть эта программа, которая не работает;

#define vars
a = int(input('Please insert a number: '))
b = int(input('Please insert a second number: '))

#try a function
def func_tim(a,b):
    bob = True
    while bob == True:
        if a == b:
            print('nice and equal')
            bob = False
        elif b > a:
             print('b is picking on a!')
        else:
            print('a is picking on b!')
#call a function
func_tim(a,b)

Какие выходы;

Please insert a number: 12
Please insert a second number: 14
b is picking on a!
b is picking on a!
b is picking on a!
...(repeat in a loop)....

Может кто-нибудь, пожалуйста, дайте мне знать, почему эти программы отличаются? Спасибо!

Ответы [ 4 ]

3 голосов
/ 16 марта 2010

Во втором примере пользователь не получает возможности ввести новое предположение в цикле, поэтому a и b остаются прежними.

2 голосов
/ 16 марта 2010

Ваша вторая программа не позволяет пользователю повторно вводить свои догадки, если они не верны. Поместите input в цикл while.

Дополнительная подсказка: не делайте чеков типа variable == True, просто скажите while variable:.

2 голосов
/ 16 марта 2010

во второй программе, если b > a, вы вернетесь к циклу, потому что bob по-прежнему true. Вы забыли попросить пользователя ввести еще раз .. попробуйте это так

  def func_tim():
    while 1:
       a = int(input('Please insert a number: '))
       b = int(input('Please insert a second number: '))
       if a == b:
           print('nice and equal')
           break
       elif b > a:
           print('b is picking on a!')
       else:
           print('a is picking on b!')


func_tim()
2 голосов
/ 16 марта 2010

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

#try a function
def func_tim():
    bob = True
    while bob == True:
        #define vars
        a = int(input('Please insert a number: '))
        b = int(input('Please insert a second number: '))

        if a == b:
            print('nice and equal')
            bob = False
        elif b > a:
             print('b is picking on a!')
        else:
            print('a is picking on b!')
#call a function
func_tim()
...