2011-07-11 72 views
-1

有沒有問題,直到我試圖讓輸入經過有效性檢查,如果無效再輸入 我我提前:)時再次提示輸入無效

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的raw_input沒有3.2,所以我不能使用,要麼 reinp2()是存在的,所以如果有發現reinp()的解決方案相同,可申請reinp2()以及A和b都只是變量ans[n]=reinp2(ans[n],"Input n: ")reinp()相同只適用於另一種類型的變量(也可以是浮動的)

因爲它現在的代碼顯示沒有語法錯誤

P.S.我使用的Python 3.2

+0

「請忽略最後2行」。如果你刪除這些行,這樣會好很多,所以我們不必知道你在說什麼。只是**編輯**問題,並刪除我們應該忽略的東西。 –

+0

對不起,我只是不想要脂肪酶開始問什麼是複雜的東西...而是我得到脂肪酶要求刪除注:D – wizzard

+0

也許你可以解釋你的確切問題。我們所擁有的只是一堆代碼,在這些代碼中你說某些東西不能正常工作。你使用了什麼輸入,你得到的錯誤信息是什麼,這個問題到底是什麼? – Gerrat

回答

1

[編輯:刪除原來的答案,因爲不再使用相關問題上的固定格式]

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,也許你可以顯示一些代碼,演示了這個問題。我看起來很好。

+0

其他是爲while語句(我猜我已經縮進了它錯誤,但是這也適用),並且我試圖在無效輸入([]爲3.2中的列表)後重新提示,因爲最初的a是0我將地點a = input(b)只是爲了檢查循環是否工作在初始數據我有我 – wizzard

+0

@Simeon。在Python中,縮進非常重要。它*不是用於while語句的,因爲它不是在那個級別上縮進的。如果您在程序中使用了選項卡(您不應該這樣做),那麼您可能需要在您發佈這些內容時修正事物的外觀,因爲您在此處發佈的內容顯然無效。 ...當我們甚至不能運行你的程序時很難幫助你。 – Gerrat

+0

對不起,我知道,這是我的第一篇文章,請減少一些鬆懈我檢查它在IDLE中沒問題,但是粘貼後肯定會發生錯誤,謝謝嘗試:) – wizzard

1

P.S.這是完整的,我只是想讓你們所有幫助知道它的運行沒有任何故障,我什至定製它,所以它可以接收到初始數據:)如果有人需要一個排列解算器,你知道在哪裏可以找到它:)

如果有人想要腳本:

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()