为什么我的'oldUser()'没有运行,为什么它一直重新启动?

时间:2013-11-20 19:49:19

标签: python function python-2.7 methods

我对编程和学校项目非常陌生(占我最终成绩的50%)我必须创建一个大致相同的Python程序。 我得到了我的哥哥和老师的一些帮助,但主要是通过一些流程图等自己做的,所以请原谅我,如果我没有遵循这种性质的传统规则和事情,或者我的代码是凌乱的。我将最终确定它,只需要专业人士的帮助/支持诱饵。

这是我的代码,我遇到了问题。一旦我在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 个答案:

答案 0 :(得分:3)

raw_input是一个功能。 status == raw_input == 'y'永远不会成立:那就是将状态与函数进行比较,并与'y'进行比较。

我怀疑这只是一个错字,你的意思是if status == 'y':