【问题标题】:Why doesn't my 'oldUser()' run and why does it start again all the time?为什么我的'oldUser()' 没有运行,为什么它总是重新启动?
【发布时间】:2013-11-20 19:49:18
【问题描述】:

我对编程非常陌生,对于一个学校项目(我期末成绩的 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

【问题讨论】:

  • 关于您的“任何可以让我的代码变得更好的建议”问题,您可能会在Code Review stackexchange 网站上获得更多运气。
  • 这个问题似乎离题了,因为它是关于一个琐碎的错字,可能对未来的读者没有用处

标签: python function python-2.7 methods


【解决方案1】:

raw_input 是一个函数。 status == raw_input == 'y' 永远不会是真的:那是用 function 和 'y' 比较状态。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多