2013-11-20 80 views
1

我對編程和學校項目(我的最終成績的50%)非常陌生,我不得不創建一個大致這樣做的Python程序。 我從我的哥哥和我的老師那裏得到了一些幫助,但主要是通過一些流程圖等來完成的,所以請原諒我,如果我沒有遵循常規規則和這種性質的東西,或者我的代碼很混亂。我將最終確定它,只需要親們的幫助/支持誘餌。爲什麼我的'oldUser()'沒有運行,爲什麼它始終重新啓動?

這是我的代碼,我有一個問題。一旦我在displayMenu()上再次按'y'然後'y',爲什麼它不運行oldUser() 另外,如果您有任何關於什麼可以使我的代碼更好的建議,或者我可以改進它將是非常有益的,我會把它放在船上。

import os # allows me to use functions defined elsewhere. os module allows for multi platforming. 
import sys 
words = [] 
users = {} 
status = "" 

def teacher_enter_words(): 
    done = False 
    print 'Hello, please can you enter a word and definition pair.' 

    while not done: 
      word = raw_input('\nEnter a word: ') 
      deff = raw_input('Enter the definition: ') 
      # append a tuple to the list so it can't be edited. 
      words.append((word, deff)) 
      add_word = raw_input('Add another word? (y/n): ') 
      if add_word.lower() == 'n': 
        done = True 

def student_take_test(): 
    student_score = 0 
    for pair in words: 
      print 'Definition:', pair[1] 
      inp = raw_input('Enter word: ') 
      student_score += check_error(pair[0], inp) 
      print 'Correct spelling:', pair[0], '\n' 

    print 'Your score:', student_score 

def check_error(correct, inputt): 
    len_c = len(correct) 
    len_i = len(inputt) 
    # threshold is how many incorrect letters do we allow before a 
    # minor error becomes a major error. 
    # 1 - allow 1 incorrect letter for a minor error (>= 2 becomes major error) 
    threshold = 1 
    # immediately check if the words are the same length 
    num_letters_incorrect = abs(len_c - len_i) # abs() method returns value of x - positive dist between x and zero 

    if num_letters_incorrect == 0: 
      for i in xrange(0, len(correct)): 
        if correct[i] != inputt[i]: 
          num_letters_incorrect += 1 

    if num_letters_incorrect <= threshold: 
      if num_letters_incorrect == 0: 
        return 2 # no incorrect letter. 
      else: 
        return 1 # minor error. 
    else: 
      return 0 # major error. 

def displayMenu(): 
    status = raw_input('Are you a registered user? y/n?: ') 
    if status == raw_input == 'y': 
      oldUser() 
    elif status == 'n': 
      newUser() 

def newUser(): 
    createLogin = raw_input('Create login name: ') 

    if createLogin in users: 
      print '\nLogin name already exist!\n' 
    else: 
      createPassw = raw_input('Create password: ') 
      users[createLogin] = createPassw 
      print '\nUser created!\n' 

def oldUser(): 
    login = raw_input('Enter login name: ') 
    passw = raw_input('Enter password: ') 

    if login in users and users[login] == passw: 
      print '\nLogin successful!\n' 
    else: 
      print "\nUser doesn't exist or wrong password!\n" 


if __name__ == '__main__': 
    running = True 
    while running: 
      os.system('cls' if os.name == 'nt' else 'clear') # multi-platform, executing a shell command 

      reg = raw_input('Do you want to start the program? y/n?').lower() 
      if reg == 'y' or reg == 'yes': 
        displayMenu() 
      else: sys.exit(0)   

      inp = raw_input('Are you a Teacher or a Student? (t/s): ').lower() 
      if inp == 't' or inp == 'teacher': 
        teacher_enter_words() 
      else: 
        student_take_test() 
        running = False 
+1

關於你的問題,你可能對[代碼審查(HTTP更多的運氣「上有什麼可以讓我的代碼更好的任何建議」:// codeexview.stackexchange.com/)stackexchange網站。 – forivall

+0

這個問題似乎是題外話題,因爲它是關於一個微不足道的錯字,並可能不會對未來的讀者有用 – ekhumoro

回答

3

raw_input是函數。 status == raw_input == 'y'永遠不會是真的:那就是將狀態與函數和'y'進行比較。

我懷疑這只是一個錯字,而你只是意味着if status == 'y':

相關問題