2014-11-05 2 views
0

Итак, вот мой сценарий:Что не так в моем скрипте python?

#Imports 
import decimal 
#variables 
neweq = "neweq" 
on = 1 
#loop 
while on > 0: 
#equasion function 
    def eq(): 
     global b 
     b = input("Please enter an equation (Example: 10*(3*a)==4*(7*a), or 3.0/7.0). Unfortunately however, you can only use the variable 'a'. Also, you can type 'exit' to quit: ") 
     print "" 
     print "" 
     print "" 
     print "" 
     b = float(b) 
     b = '%.3f'%(b) 
     if (b==exit): 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      exit ("Thank you for using me :)") 
#input funcution 
    def inp(): 
     a = input("Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: ") 
     if (a==exit): 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      print "" 
      exit ("Thank you for using me :)") 
     if (a == neweq): 
      print "" 
      print "" 
      a = 0 
      eq() 
      inp() 
     if (b==a): 
      print "" 
      print "Yes, the answer is", a 
      print "" 
      print "" 
      eq() 
     else: 
      print "" 
      print "No, the answer is not", a 
      print "" 
      print "" 
      print "test line", b 
      inp() 
#function calls 
    eq() 
    inp() 

Проблема?

Please enter an equation (Example: 10*(3*a)==4*(7*a), or 3.0/7.0). Unfortunately however, you can only use the variable 'a'. Also, you can type 'exit' to quit: 2.0/4.0 




Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: 1/2 

No, the answer is not 0 


test line 0.500 
Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: 102.0 

No, the answer is not 102.0 


test line 0.500 
Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: 1.0/2.0 

No, the answer is not 0.5 


test line 0.500 
Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: .500 

No, the answer is not 0.5 


test line 0.500 
Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: 0 

No, the answer is not 0 


test line 0.500 
Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: 4.0/2.0 

No, the answer is not 2.0 


test line 0.500 
Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: 2.0/4.0 

No, the answer is not 0.5 


test line 0.500 
Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: 0.500 

No, the answer is not 0.5 


test line 0.500 
Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: 

Должно быть возвращено «да, ответ 0,5», однако это не так. То же самое с несколькими другими равенствами. Я не могу понять, что с ним не так, однако мое подозрение в том, что это b = '%.3f'%(b), и именно здесь мне нужна помощь.

Спасибо!

+0

может сказать, какой вклад будет ожидать ??? например, 'float/float' – Hackaholic

+0

@Hackaholic' 1.0/3.0', '1.0/3.0',' 2 * (3/4 + 1) 'и некоторые базовые математические данные, такие как' 1 + 1', и скоро '3 * (4/а-3) == 4/(а-1)'. –

+1

Несколько указателей, не связанных с непосредственной проблемой, с которой вы сталкиваетесь: ввод функций в цикле фактически переопределяет их каждый раз - вы можете вывести их на верхний уровень. Сравнение 'b == exit' не будет работать - во-первых, b уже является числом; во-вторых, вы сравниваете с функцией 'exit' not string' "exit" '. Вы можете использовать фактические логические значения, поэтому вы, вероятно, хотите 'on = True' и' while on: '. В сценарии есть и другие необычные вещи: я бы посоветовал вам начать с более простых шагов и убедиться, что они работают правильно, прежде чем создавать для них больше кода. – viraptor

ответ

1

Там вы идете. Я отредактировал ваш код. Дайте мне знать, если это то, что вы хотели, и я понятия не имею, почему вы использовали print "", который я удалил здесь, потому что это причиняло мне боль! :П. Также, пожалуйста, не используйте exit в качестве вклада от использования пользователем «quit» предпочтительно. Экзаменацию можно найти в комментариях.

#Imports 
import decimal 
#variables 
neweq = "neweq" 
on = 1 
#loop 
#equasion function 
def eq(): 
     global b 
     b = input("Please enter an equation (Example: 10*(3*a)==4*(7*a), or 3.0/7.0). Unfortunately however, you can only use the variable 'a'. Also, you can type 'exit' to quit: ") 
     if b == exit: 
      exit ("Thank you for using me :)") 
     else: 
      b = float(b)  ## input converted into float. 
      b = '%.3f'%(b)  ## after this b would be of type string 
      b = float(b)  ## again converting into float to match with "a" in `inp()` 
#input funcution 
def inp(): 
     a = input("Enter numeral (Example: 1, or 1.5) to proceed, 'exit' to quit, or 'neweq' to enter a new equasion: ") 
     if a == exit: 
      exit ("Thank you for using me :)") 
     if a == neweq: 
      a = 0 
      eq() 
      inp() 
     if b == a:   ## if a == b should work now. 
      print "Yes, the answer is", a 
      eq() 
     else: 
      print "No, the answer is not", a 
      print "test line", b 
      inp() 
#function calls 
eq() 
inp() 

И если вы использовали print"", чтобы избежать путаницы в рабочем пространстве, то попробуйте как этот

print "\n"*5 ## You have 5 empty lines. Replace the number 5 as per your needs 

Это более аккуратный и вещий.

+0

I хотел, чтобы он проходил в бесконечном цикле, что да, было несколько ошибок с ним, и я не хотел, чтобы калькулятор, «тестовая строка» была помощником для отладки. Я не хотел строить калькулятор, мне нужен контролер ответа.Тем не менее, много кода, который работал против намерения, вам удалось решить мою проблему! Спасибо! –

+0

@ Thecheater887 Ты хочешь, чтобы я положил в бесконечный цикл? Хотите объяснить, где вы поступили не так? И в чем причина «печати»? –

+0

Извините! Получил ниндзя! Сейчас у меня это работает, но я хотел это в цикле, чтобы вам не пришлось перезапускать после каждого приключения. 'B = float (b)' 'b = '% .3f'% (b)' 'b = float (b)' - это то, что завершило код. «Print» «' s были так, что они не загромождали рабочее пространство, так что вы могли видеть, где вы были. Ваша помощь решила мою проблему, хотя, поэтому она очень ценится! –

0

Этот бит выглядит подозрительным, он принимает (предположительно) строку и пытается преобразовать его в поплавок:

b = input("Please enter an equation (Example: 10*(3*a)==4*(7*a), or 3.0/7.0). Unfortunately however, you can only use the variable 'a'. Also, you can type 'exit' to quit: ") 
    b = float(b) 
+0

Мне нужно было сделать это там, где оно ограничено в 3 десятичных знака, или мне не нужно было бы плавать. Не могли бы вы предложить, как это сделать без поплавка? –

+0

Ваш скрипт делает что-то вроде этого: 'float (« a ** 3 + 2 * a + 5 »)', который потерпит неудачу. Вам нужно будет взять эту строку и вычислить ее каким-то образом (до числа, а не строки), прежде чем пытаться сократить float. – 101

+0

>>> поплавок ('3,0/7,0') Traceback (самый последний вызов последнего): Файл "", строка 1, в ValueError: недопустимый буквальным для поплавка(): 3,0/7,0 – Hackaholic

Смежные вопросы