使用Python

时间:2016-10-06 02:07:14

标签: python loops readfile

我的第一个问题是我的文件没有被脚本读取,而且我不明白为什么。

第二,问题是我的循环“y”或“Y”没有循环用户的帐户输入问题,它只是继续重复,直到我点击“n”或“N”退出....哪个有效。 (所以我想我的循环在这个意义上是正常的)

我目前的情况 我有一个txt文件,我需要从中读取帐号。 我需要它循环并继续要求验证帐号,即使帐号错误。

我希望输出看起来像这样

------------我需要的输出----------------

>>>
Enter the account number to be validated: 456321
Account number 456321 is not valid.
Enter another card number? Enter Y or N: Y
Enter the account number to be validated: 5552012
Account number 5552012 is valid.
Enter another card number? Enter Y or N: N
>>>

-----------结束需要的输出--------------

-----------我此时的输出---------

>>> 
============ RESTART: G:\Software Design\accounts.py ============
Enter the account number to be validated: 4453221
Account number 4453221 is not valid
Enter another card number? Enter Y or N: y
Enter another card number? Enter Y or N: n
>>> 

----------结束当前输出-----------

--------我的代码----------

def main():

    #setting loop control
    another = 'y'

    try:
        # open file READ ONLY charge_accounts.txt
        infile = open('charge_accounts.txt', 'r')

        # Setting accountNum variable
        accountNum = int(input('Enter the account number to be validated: '))

        if accountNum in infile:
            accountNum = int(infile.readline(accountNum))
            print('Account number ' + str(accountNum) + ' is valid')
        else:
            print('Account number ' + str(accountNum) + ' is not valid')
            # Loop controls for other account inputs
            while another == 'y' or another == 'Y':
                # Get another account
                another = input('Enter another card number? ' + 'Enter Y or N: ')
                if another == 'n' or another == 'N':
                    break

        infile.close()

    # Extra credit +5 points ( catching errors )
    except IOError:
        print('An error occured trying to read')
        print('the file', charge_accounts.txt)
main()

1 个答案:

答案 0 :(得分:2)

关于你的循环,你想要重复的一切都需要在它内部。所以想想你写的是什么,while another == y: 循环体将被重复。所以,我的建议是考虑你开始循环的地方

此外,accountNum in infile:始终为false,因为您已将accountNumb转换为int,并且需要保留字符串。这是另一个问题:

if accountNum in infile:
    accountNum = int(infile.readline(accountNum))
    print('Account number ' + str(accountNum) + ' is valid')

无论如何都不会像你认为的那样工作。当您检查某个对象是否在file对象中时,它会将流位置移动到结尾。这意味着当你readline它会返回一个空字符串!如果你考虑一下,你真的不需要readline