Member 13986449 Ответов: 3

Питон преждевременно отключается.


Вот фрагмент кода проблемы vv


<pre>
import time

def password():
        ans = "no"
	while ans == 'no' or ans == 'n':
		a = 0
		password = input("Enter a password. \n(Must contain at least 1 number, 1 captial, 5 characters and have no special characters)\n")
		if password.isalnum() == True:
			if password != password.lower():
				if len(password) > 4:
					for i in range(len(password)):
						try:
							float(password[i])
						except:
							a = a
						else:
							a = a + 1
					if a > 0:
						ans = input("Your password is " + password + "\nIs this the password you wanted? Y/N\n")
						ans = ans.lower()
						if ans == 'y' or ans == 'yes':
							f = open("Password.txt", "w")
							f.write(password)
							print("Your password is being added to the database.\n")
							time.sleep(1)
							print("...\n")
							time.sleep(1)
							print("Your password has been set.")
							time.sleep(2)
							f.close()
						else:
							print("Test failed!")
					else:
						print("You need at least 1 number.")
						time.sleep(2)
				else:
					print("You must have at least 5 characters.")
			else:
				print("You need at least 1 capital.")
				time.sleep(2)
		else:
			print("That contains a special character.")
			time.sleep(2)
def username():
	ans = "no"
	while ans == "no" or ans == "n":
		username = input("What do you want your username to be?\n")
		if username.isalnum() == True:
			if len(username) > 4:
				ans = input("Your username is " + username + " is this correct? Y/N\n")
				ans = ans.lower()
				if ans == "y" or ans == "yes":
					f = open("Username.txt", "w")
					f.write(username)
					print("Your username is being added to the database.\n")
					time.sleep(1)
					print("...\n")
					time.sleep(1)
					print("Your username has been set.")
					time.sleep(2)
					f.close()
					password()
				else:
					print("Test failed!")
			else:
				print("Your username has to have more than 4 characters.")
				time.sleep(2)
		else:
			print("You username cannot have a special character.")
			time.sleep(2)
username()



Поэтому программа выключается, когда вы отвечаете на вопрос "ans".

Что я уже пробовал:

Я пытался искать ответ повсюду. Я скачивал и повторно загружал python, но ничего не получалось.

3 Ответов

Рейтинг:
5

Richard MacCutchan

Следующий код, по-видимому, работает. Обратите внимание, что я закомментировал части, которые записывают детали в файл, и большинство вызовов сна (почему они там есть?).

import time

def password():
    ans = "no"
    while ans == 'no' or ans == 'n':
        a = 0
        password = input("Enter a password. \n(Must contain at least 1 number, 1 captial, 5 characters and have no special characters)\n")
        if password.isalnum() == True:
            if password != password.lower():
                if len(password) > 4:
                    for i in range(len(password)):
                        try:
                            float(password[i])
                        except:
                            a = a
                        else:
                            a = a + 1
                    if a > 0:
                        ans = input("Your password is " + password + "\nIs this the password you wanted? Y/N\n")
                        ans = ans.lower()
                        if ans == 'y' or ans == 'yes':
                        #    f = open("Password.txt", "w")
                        #    f.write(password)
                            print("Your password is being added to the database.\n")
                        #    time.sleep(1)
                            print("...\n")
                        #    time.sleep(1)
                            print("Your password has been set.")
                        #    time.sleep(2)
                        #    f.close()
                        else:
                            print("Test failed!")
                    else:
                        print("You need at least 1 number.")
                        #time.sleep(2)
                else:
                    print("You must have at least 5 characters.")
            else:
                print("You need at least 1 capital.")
#                time.sleep(2)
        else:
            print("That contains a special character.")
#            time.sleep(2)
 
def username():
    ans = "no"
    while ans == "no" or ans == "n":
        username = input("What do you want your username to be?\n")
        if username.isalnum() == True:
            if len(username) > 4:
                ans = input("Your username is " + username + " is this correct? Y/N\n")
                ans = ans.lower()
                if ans == "y" or ans == "yes":
 #                   f = open("Username.txt", "w")
 #                   f.write(username)
                    print("Your username is being added to the database.\n")
 #                   time.sleep(1)
                    print("...\n")
 #                   time.sleep(1)
                    print("Your username has been set.")
 #                   time.sleep(2)
 #                   f.close()
                    password()
                else:
                    print("Test failed!")
            else:
                print("Your username has to have more than 4 characters.")
 #               time.sleep(2)
        else:
            print("You username cannot have a special character.")
 #           time.sleep(2)

username()


Member 13986449

Это сработало! Спасибо :) когда я удалил файловые операции, он работал ( каким-то образом ).

Richard MacCutchan

Я просто добавил файловые операции обратно, и все работало нормально. Вы должны делать что-то еще, что влияет на ваше окружение. Вы запускаете его в закрытом месте?

Рейтинг:
2

Patrice T

Цитата:
Поэтому программа выключается, когда вы отвечаете на вопрос "ans".

Откуда вы знаете, что это не нормальное поведение ?
Потому что "ничего" - это именно то, что должно произойти, когда тест проваливается.
Попробовать это:
ans = input("Your username is " + username + " is this correct? Y/N\n")
if ans == "Y" or ans == "y" or ans == "Yes" or ans == "yes":
    f = open("Username.txt", "w")
    f.write(username)
    print("Your username is being added to the database.\n")
    time.sleep(1)
    print("...\n")
    time.sleep(1)
    print("Your username has been set.")
    time.sleep(2)
    f.close()
else:
    print("Test failed !\n")


Member 13986449

Спасибо за ответ, но когда я добавил оператор else в свой код, он все равно закрылся.
Поэтому, когда я запускаю его в Visual Studio кода ( программное обеспечение я использую ) это работает, но когда я запускаю это в Python это не сработает, он выключается.

Patrice T

Где-то должно быть сообщение об ошибке.

Рейтинг:
2

Richard MacCutchan

Я пробовал ваш код в Python 3.6 и в IDLE IDE, и в обоих случаях он правильно показывает сообщение об ошибке. Во-первых, у вас есть дополнительный уровень отступа после первой строки. Как только вы исправите это, то увидите, что используете имя переменной username без предварительного объявления об этом.


Member 13986449

Спасибо Вам за то, что вы нашли время, чтобы ответить мне :)
Я обновил вопрос, чтобы показать весь код (Код до этого был фрагментом того, где остановилась программа.

Richard MacCutchan

Я посмотрел на это сегодня утром и сумел заставить часть его работать после того, как исправил отступ. К сожалению, я не смог продвинуться дальше и, скорее всего, не смогу сделать этого до конца этой недели. Если у меня будет время, я обновлю это.

Member 13986449

Спасибо! :)