2013-11-20 79 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':

相关问题