Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 13, 2008 15:46:56

l-i-m-o-n_1
От:
Зарегистрирован: 2008-11-01
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

как праильно сделать цикл

вот мой код как сделать чтобы он повторялся бесконечно пока не будет сделано определлённое действие:

def calc ():
test=test_1=test_2=test_3=input (u'1 - сложение, 2 - вычитание, 3 - деление, 4 - умножение: '.encode('cp866', "backslashreplace"))
if test == 1:
e=input (u'Введите первое число для сложения: '.encode('cp866', "backslashreplace"))
f=input (u'Введите второе число для сложения: '.encode('cp866', "backslashreplace"))
print e+f
raw_input ()
while
if test_1 == 2:
g=input (u'Введите первое число для вычитания: '.encode('cp866', "backslashreplace"))
h=input (u'Введите второе число для вычитания: '.encode('cp866', "backslashreplace"))
print g-h
raw_input ()
if test_2 == 3:
i=input (u'Введите первое число для деления: '.encode('cp866', "backslashreplace"))
j=input (u'Введите второе число для деления: '.encode('cp866', "backslashreplace"))
print i%j
raw_input ()
if test_4 == 4:
k=input (u'Введите первое число для умножения: '.encode('cp866', "backslashreplace"))
l=input (u'Введите второе число для умножения: '.encode('cp866', "backslashreplace"))
print k*l
raw_input ()



Офлайн

#2 Ноя. 13, 2008 16:00:00

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

как праильно сделать цикл

да сколько можно уже…. неужели трудно почитать какой нибудь учебник???7

while 1: # бесконечный цикл
if что_то: break # если выполнилось условие, то выходим из цикла

# можно еще через переменную
state=True
while state:
if что_то:state=0



Отредактировано (Ноя. 13, 2008 16:00:37)

Офлайн

#3 Ноя. 13, 2008 16:01:11

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

как праильно сделать цикл

while not calc(): pass
Если “определлённое действие” сделано, то calc возвращает True, это вызывает завершение цикла while.

..bw



Офлайн

#4 Ноя. 13, 2008 16:07:51

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

как праильно сделать цикл

только вот это зачем?????

 test=test_1=test_2=test_3=input (u'1 - сложение, 2 - вычитание, 3 - деление, 4 - умножение: '.encode('cp866', "backslashreplace"))
почему не хватает одной переменной test?

bw
Если “определлённое действие” сделано, то calc возвращает True, это вызывает завершение цикла while.
Теперь еще придется объяснять человеку что такое return и с чем его едят :)



Отредактировано (Ноя. 13, 2008 16:09:20)

Офлайн

#5 Ноя. 13, 2008 16:14:44

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

как праильно сделать цикл

спочатку так:

# -*- coding: utf-8 -*-
def calc ():
test = 1
while test in (1,2,3,4):
test = input (u'1 - сложение, 2 - вычитание, 3 - деление, 4 - умножение: '.encode(
'cp866', "backslashreplace"))
if test == 1:
e=input (u'Введите первое число для сложения: '.encode('cp866', "backslashreplace"))
f=input (u'Введите второе число для сложения: '.encode('cp866', "backslashreplace"))
print e+f
raw_input ()
continue
elif test == 2:
g=input (u'Введите первое число для вычитания: '.encode('cp866', "backslashreplace"))
h=input (u'Введите второе число для вычитания: '.encode('cp866', "backslashreplace"))
print g-h
raw_input ()
continue
elif test == 3:
i=input (u'Введите первое число для деления: '.encode('cp866', "backslashreplace"))
j=input (u'Введите второе число для деления: '.encode('cp866', "backslashreplace"))
print i%j
raw_input ()
continue
elif test == 4:
k=input (u'Введите первое число для умножения: '.encode('cp866', "backslashreplace"))
l=input (u'Введите второе число для умножения: '.encode('cp866', "backslashreplace"))
print k*l
raw_input ()
calc()
потім так:
# -*- coding: utf-8 -*-
def calc ():
test = 1
while test in (1,2,3,4):
test = input (u'1 - сложение, 2 - вычитание, 3 - деление, 4 - умножение: '.encode(
'cp866', "backslashreplace"))
if test == 1:
e=input (u'Введите первое число для сложения: '.encode('cp866', "backslashreplace"))
f=input (u'Введите второе число для сложения: '.encode('cp866', "backslashreplace"))
print e+f
elif test == 2:
g=input (u'Введите первое число для вычитания: '.encode('cp866', "backslashreplace"))
h=input (u'Введите второе число для вычитания: '.encode('cp866', "backslashreplace"))
print g-h
elif test == 3:
i=input (u'Введите первое число для деления: '.encode('cp866', "backslashreplace"))
j=input (u'Введите второе число для деления: '.encode('cp866', "backslashreplace"))
print i%j
elif test == 4:
k=input (u'Введите первое число для умножения: '.encode('cp866', "backslashreplace"))
l=input (u'Введите второе число для умножения: '.encode('cp866', "backslashreplace"))
print k*l
raw_input ()

calc()



Офлайн

#6 Ноя. 13, 2008 16:23:02

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

как праильно сделать цикл

немного переделал =)

def calc ():
#сделаем бесконечный цикл (я надеюсь что 1 == 1 будет всегда)
while 1 == 1:

#можно завести только одну переменную test, я думаю ее хватит на всех =)
#тоже самое касается чисел, над которыми производится действие, x и y будет достаточно
test = input (u'1 - сложение, 2 - вычитание, 3 - деление, 4 - умножение: '.encode('cp866', "backslashreplace"))
if test == 1:
x = input (u'Введите первое число для сложения: '.encode('cp866', "backslashreplace"))
y = input (u'Введите второе число для сложения: '.encode('cp866', "backslashreplace"))
print x+y

if test == 2:
x =input (u'Введите первое число для вычитания: '.encode('cp866', "backslashreplace"))
y =input (u'Введите второе число для вычитания: '.encode('cp866', "backslashreplace"))
print x+y

if test == 3:
x=input (u'Введите первое число для деления: '.encode('cp866', "backslashreplace"))
y=input (u'Введите второе число для деления: '.encode('cp866', "backslashreplace"))
print x+y

if test == 4:
x=input (u'Введите первое число для умножения: '.encode('cp866', "backslashreplace"))
y=input (u'Введите второе число для умножения: '.encode('cp866', "backslashreplace"))
print x+y

calc() #вызываем функцию



Офлайн

#7 Ноя. 13, 2008 16:37:22

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

как праильно сделать цикл

Можно конечно и еще короче и элегантнее сделать.. Но человек в который раз будет ходить сюда, вместо того чтоб заглянуть в учебник какой нибудь…



Офлайн

#8 Ноя. 13, 2008 16:43:29

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

как праильно сделать цикл

ось так правильніше

# -*- coding: utf-8 -*-
def calc ():
test = 1
msg1 = u'Введите первое число для %s: '.encode('cp866', "backslashreplace")
msg2 = u'Введите второе число для %s: '.encode('cp866', "backslashreplace")
op_msgs = ('сложения', 'вычитания', 'деления', 'умножения')
while test in (1,2,3,4):
test = input (u'1 - сложение, 2 - вычитание, 3 - деление, 4 - умножение: '.encode(
'cp866', "backslashreplace"))
if test == 1:
op = int.__add__
elif test == 2:
op = int.__sub__
elif test == 3:
op = int.__div__
elif test == 4:
op = int.__mul__
else:
break # інакше буде op_msgs[test-1] не пройде
a = input(msg1%op_msgs[test-1])
b = input(msg2%op_msgs[test-1])
print op(a, b)
raw_input ()

calc()



Офлайн

#9 Ноя. 13, 2008 16:48:55

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

как праильно сделать цикл

Чет ты завернул прям, для новичка. Он еще не понял ка переменными пользоваться, а ты ему уже методы %)



Офлайн

#10 Ноя. 13, 2008 16:53:57

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

как праильно сделать цикл

можна і без if-ів обійтись, але код получається заскладний:

def calc ():
test = 1
msg0 = u'1 - сложение, 2 - вычитание, 3 - деление, 4 - умножение: '.encode('cp866', "backslashreplace")
msg1 = u'Введите первое число для %s: '.encode('cp866', "backslashreplace")
msg2 = u'Введите второе число для %s: '.encode('cp866', "backslashreplace")
ops = {1: ('сложения',int.__add__),
2: ('вычитания',int.__sub__),
3: ('деления', int.__div__),
4: ('умножения', int.__mul__)}

while test in (1,2,3,4):
test = input(msg0)
op = ops.get(test, None)
if op is None:
break

a = input(msg1%op[0])
b = input(msg2%op[0])
print op[1](a, b)
raw_input ()

calc()



Отредактировано (Ноя. 13, 2008 16:55:05)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version