перекомпоновка после неверного ввода - PullRequest
0 голосов
/ 11 июля 2011

Не было никаких проблем, пока я не попытался заставить вход пройти проверку достоверности, и если недействительный запросить ввод еще раз, я рассчитываю на вас за идеи, заранее спасибо:)

a=0
def reinp(a,b):
    while True:
        if a in [1,2,3,4,5,6]: #checking for valid input
            return int(a)
            break
        a=input(b)
    else:
        return print("error")

попробовал, неработает либо

def reinp(a,b):
    for c in [1,2,3,4,5,6]:
        if int(c)==int(a):
            return int(a)
            break
        else:
            a=input(b)

a=reinp(a,'Test: ')

Это первое, что создает проблему

def reinp2(a,b): #trying to check if it's a number and can be turned to float if not ask again
    while check(a):
        a=input(b)
    return float(a)
def check(a):
    try:
        float(a)
        return False
    except ValueError:
        return True

Сейчас проблема в том, что после проверки она никогда не выходит из строяиз любого цикла while, который я пробовал вместо while True:if...break, while correct: if... correct=False не работал, и он просто спрашивал снова и снова, даже если условие выполнено ... в python 3.2 нет raw_input, поэтому я тоже не могу его использоватьreinp2() есть, поэтому, если найдено решение для reinp(), то же самое можно применить к reinp2(), а a и b - это просто переменные ans[n]=reinp2(ans[n],"Input n: ") то же самое с reinp() только для другого типа переменной (которая можетбыть также плавающим)

Код, как сейчас, не показывает синтаксических ошибок

PS Я использую Python 3.2

Ответы [ 2 ]

1 голос
/ 12 июля 2011

PS Это полно, я просто хотел, чтобы все, кто помог, знал, что он работает без каких-либо глюков, я даже настроил его, чтобы он мог получать исходные данные :), если кому-то нужен решатель перестановок, вы знаете, где его найти:)

Если кто-то хочет сценарий:

from math import *
ans=['n','k','choice',0,0,0,0,0]
n,k=0,1
a=['''1 For Permutations P (from n) = n
2 For Variations V (k emelments from n-th class) = n!/(n-k)!
3 For Combinations C (k emelments from n-th class) = n!/(k!(n-k)!) = ( n )
4 Use last answer.                                                                  ( k )
5 Second Memory
6 Clear memory

Your choice is : ''',
'''+ to add
- to substract
* to multiply
/ to divide
You will undertake?: ''',
"The answer is: "]
def perm():
    global ans
    ans[n]=reinp2(ans[n],"Input n: ")
    if ans[5]==0:
        ans[3]=factorial(ans[n])
        ans[6]=ans[3]
        return print(a[2], ans[6])
    else:
        ans[4]=factorial(ans[n])
        ans[6]=ops(ans[3],ans[4],ans[5])
        return print(a[2], ans[6])
    ans[n]=''
    ans[k]=''
def var():
    global ans
    ans[n]=reinp2(ans[n],"Input n: ")
    ans[k]=reinp2(ans[k],"Input k: ")
    if ans[5]==0:
        ans[3]=factorial(ans[n])/(factorial(ans[n]-ans[k]))
        ans[6]=ans[3]
        return print(a[2], ans[6])
    else:
        ans[4]=factorial(ans[n])/(factorial(ans[n]-ans[k]))
        ans[6]=ops(ans[3],ans[4],ans[5])
        return print(a[2], ans[6])
    ans[n]=''
    ans[k]=''
def comb():
    global ans
    ans[n]=reinp2(ans[n],"Input n: ")
    ans[k]=reinp2(ans[k],"Input k: ")
    if ans[5]==0:
        ans[3]=factorial(ans[n])/((factorial(ans[n]-ans[k]))*(factorial(ans[k])))
        ans[6]=ans[3]
        return print(a[2], ans[6])
    else:
        ans[4]=factorial(ans[n])/((factorial(ans[n]-ans[k]))*(factorial(ans[k])))
        ans[6]=ops(ans[3],ans[4],ans[5])
        return print(a[2], ans[6])
    ans[n]=''
    ans[k]=''
def ent():
    global ans,a
    ans[2]=reinp(ans[2],a[0])
    if ans[2]==5:
        if ans[3]!=0:
            ans[7]=ans[3]
        print(ans[7])
        ent()
    if ans[2]==6:
        clear()
        print("Done!")
        ent()
    if ans[3]==0 and ans[2]==4:
        print('The memory is empty...')
        ent()
    elif ans[3]!=0 and ans[2]==4:
        ans[3]=ans[3]
        ans[5]=reinp1(ans[5],a[1])
        if ans[5] == '+' :
            ans[5]='add'
            print("Adding")
        elif ans[5] == '-' :
            ans[5]='sub'
            print("Substracting")
        elif ans[5] == '*' :
            ans[5]='mul'
            print("Multiplication")
        elif ans[5] == '/' :
            ans[5]='div'
            print("Dividing")
        ans[2]='choice'
        ent()
    if ans[2]==1:
        perm()
    elif ans[2]==2:
        var()
    elif ans[2]==3:
        comb()
    clear1()
    ent()
def ops(a,b,c):
    if c=='add':
        return a+b
    if c=='sub':
        return a-b
    if c=='mul':
        return a*b
    if c=='div':
        return a/b
def reinp(a,b):
    while True:
        a=input(b)
        if str(a) in ['1','2','3','4','5','6']:
            return int(a)
            break    
        else:
            print('There was an error please try again:')
def reinp1(a,b):
    while True:
        a=input(b)
        if a in ["+", "-", "*", "/"]:
            return a
            break
def reinp2(a,b):
    while check2(a):
        a=input(b)
    return float(a)
def check2(a):
    try:
        float(a)
        return False
    except ValueError:
        return True
def clear():
    ans[0]='n'
    ans[1]='k'
    ans[2]='choice'
    ans[3]=0
    ans[4]=0
    ans[5]=0
    ans[7]=ans[6]
    ans[6]=0
def clear1():
    ans[0]='n'
    ans[1]='k'
    ans[2]='choice'
ent()
1 голос
/ 11 июля 2011

[РЕДАКТИРОВАТЬ: удаленный исходный ответ, так как больше не актуален с фиксированным форматированием на вопрос]

Проблема с reinp заключается в том, что a будет строкой, и вы проверяете ее по целым числам.
... так что поменяйте:

    if a in [1,2,3,4,5,6]: #checking for valid input

до:

    if a in ['1','2','3','4','5','6']: #checking for valid input

Если у вас все еще есть проблема с reinp2, возможно, вы сможете показать какой-то код, демонстрирующий проблему. Это выглядит хорошо для меня.

...