Python noob здесь. Я пишу простую программу клиент/сервер, где пользователю предлагается ввести имя, имя пользователя, адрес электронной почты, пароль. Эта информация отправляется на сервер, который проверяет, есть ли запись в текстовом файле для этого пользователя. Если есть, он должен отправить сообщение обратно, сказав, что этот пользователь уже существует, попросив пользователя повторить попытку.Python - контур цикла, когда он не должен
Я установил переменную с именем flag в значение False. Я проверяю информацию пользователя относительно текстового файла, и если в файле не найдено совпадения, я устанавливаю флаг в значение true. Тогда у меня есть оператор if, который говорит, что если флаг True, напишите информацию о пользователе в файле.
Однако, когда я ввожу дублирующую информацию, он отправляет обратно соответствующее сообщение «пользователь уже существует», но все равно записывает дублируемую информацию в файл UserProfile.txt. Я продолжаю переписывать свой цикл, а если заявления по-разному видеть, будет ли это иметь значение, но неважно, я ударил по этой же проблеме.
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
Пожалуйста перепроверить/исправить отступы. Ваши вложенные петли 'while' синтаксически недействительны, и это заставляет меня сомневаться в остальной части отступа. – ShadowRanger
Должно быть исправлено. – sam