当前位置: 首页 > 知识库问答 >
问题:

Python-而循环在不应该结束时结束

司寇祖鹤
2023-03-14

Python新手在这里。我正在编写一个简单的客户端/服务器程序,要求用户输入姓名、用户名、电子邮件地址、密码。此信息被发送到服务器,服务器将检查此用户的文本文件中是否已经有条目。如果有,它应该发送一条消息回来说这个用户已经存在,要求用户再试一次。

我设置了一个名为标志的变量为False。我对照文本文件检查用户信息,如果在文件中没有找到匹配,我将标志设置为true。然后我有一个if语句,它说如果标志是True,则将用户信息写入文件。

但是,当我输入重复信息时,它会发回相应的“user ready exists”消息,但仍会将重复信息写入UserProfile.txt文件。我一直在以不同的方式重新编写循环和if语句,看看它是否会带来不同,但不管怎样,我遇到了同样的问题。

from socket import *
from datetime import datetime
#Create a welcome socket bound at serverPort
serverPort = 12009
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(10)
print ('The Hello Name server is ready to receive')
accessTime = datetime.now();
print("Access time is", accessTime);
flag = False

while 1:

    while not flag:
        connectionSocket, addr = serverSocket.accept()
        #Wait for the hello message 
        sentence1 = connectionSocket.recv(1024)
        print("From", addr,sentence1.decode('ascii'))
        #Ask for name if a hello message is received
        if(sentence1.decode('ascii').upper() == "HELLO"):
            returnMessage1 = "Please provide the requested information."
        connectionSocket.send(returnMessage1.encode()) 
        #Wait for the name
        sentence2 = connectionSocket.recv(1024)
        fullName = sentence2.decode('ascii')
        #Wait for the email
        sentence3 = connectionSocket.recv(1024)
        email = sentence3.decode('ascii')
        #Wait for the username
        sentence4 = connectionSocket.recv(1024)
        userName = sentence4.decode('ascii')
        #Wait for the password
        sentence5 = connectionSocket.recv(1024)
        password = sentence5.decode('ascii')



        for line in open("UserProfile.txt").readlines():
            if line.find(userName) > -1:    #found the username in this record
                returnMessage3 = "Username already exists, please try again" #reject username
                connectionSocket.send(returnMessage3.encode())
            if line.find(fullName) > -1 and line.find(email) > -1:
                returnMessage4 = "Account already exists for this person, please try again" #reject email                 
            else:
                flag = True

    if flag:            

        #Prepare the access record with information separated by tab key
        userAccount = userName+"\t"+password+"\t"+fullName+"\t"+email+"\n"
        #Append the access record into accessRecord.txt
        output_file = open("UserProfile.txt", "a")
        output_file.write(userAccount)
        output_file.close()
        #Respond the client with the access information
        returnMessage2 = "Registration Successful"
        connectionSocket.send(returnMessage2.encode())

    connectionSocket.close()                #Close the connection

共有1个答案

呼延运恒
2023-03-14

当您发现用户名已经存在时,您会发回回复,但不会停止。

尝试在if块中放置突破

for line
    if user name in line
        send message about already exists
        break - out of for loop
 类似资料:
  • 我正在尝试制作一个简单的程序,它使用扫描器进行输入,并有一个while循环,该循环继续输入,直到输入结束字符为止。我想让扫描器接受输入并将一个字符串添加到堆栈列表中。我试图弄清楚为什么这段代码在键入空格时不终止while循环。

  • 《铁锈之书》第3.5章摘录: 我们使用关键字和值。循环结束后,我们使用分号结束将值赋给的语句。 加上代码片段: 我理解这是如何工作的,以及为什么结果是20,但我注意到,如果我删除包含关键字的行上的分号,程序是等效的。 为什么分号在这种情况下是可选的?

  • 问题内容: 我想问这个问题,因为我不确定我是否正确使用了Node.js逻辑 我有一组ID,需要使用redis的get方法进行查询。在检查了某个值之后(假设我正在检查通过给定的“键”获取的对象是否具有空名称),然后将它们添加到列表中。这是我的示例代码; 但是由于Node的异步特性,正如预期的那样,如果不检查列表中的每个id,它将执行“ Goes here …”。我的需要是在检查每个id之后应用其余过

  • 本文向大家介绍Python之循环结构,包括了Python之循环结构的使用技巧和注意事项,需要的朋友参考一下 while循环结构 格式: 执行流程:当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。 说明: 表达式:也叫循环条件 语句块:也叫循环体 死循环:循环条件一直成立 break:跳出循环

  • 循环结构就是为了将相似或者相同的代码操作变得更见简洁,使得代码可以重复利用 循环结构分为2类:while循环 和 for..in循环 1.6.1 while型循环 格式1: while 条件表达式: 循环的内容 [变量的变化] 格式2: while 条件表达式: 循环的内容 [变量的变化] else:

  • 我有下面的代码与ArrayList填充在其他Java类,这是一个线程(这总是填充,我每次都检查),然后我在Main类有问题的块,而(真)和问题是,如果我评论或删除行永远不会结束System.out.println(IDS.size()); 虽然线程负责完成我需要的信息,但在所有信息都完成之前,我无法显示结果。这是while(true)块的原因。 我不知道为什么会发生这种情况,有人可以帮忙吗?提前致