Python Forum
little problem with read out and write into a file - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: little problem with read out and write into a file (/thread-4700.html)

Pages: 1 2


little problem with read out and write into a file - hello_its_me - Sep-03-2017

Hi, I am trying to program an ATM but I got a problem because I want to save and read out the available money but I need to calculate the number that is in the .txt file I experimented a bit but I can't figure it out. Sorry that my variables and everything else is in German but you should understand what I am trying to do, if not I will explain it. So what I am trying to do is read out the file "kontostand.txt" in which the amount of money is in and calculate -50 for -50€ but I can't calculate the output or a string but I am not able to convert it to a string it gives this error: rechnung_kontostand = int(zwischenschritt)
ValueError: invalid literal for int() with base 10: "<_io.TextIOWrapper name='kontostand.txt' mode='r' encoding='UTF-8'>". Another problem is that what is saved to my .txt is "-50".

thanks


main = 1
behebung = 0
rechnung_kontostand = 0
ergebniss_kontostand = 0
ergebniss_kontostand2 = ""
while main == 1:
	main = 0
	print("Möchten Sie \n 1) Beheben \n 2) Einzahlen \n 3) Kontostand \n 4) Bewegungen \n 5) beenden")
	auswahl = input()

	
	if auswahl == "1":
		behebung = 1
		while behebung == 1:
			behebung = 0
			behebung_auswahl = input("Wieviel möchten Sie beheben?\n 1)50€ \t \t \t \t 2)100€ \n 3)200€ \t \t \t \t 4)500€ \n 5)800€ \t \t \t \t 6)1000€ \n")
			auslesen_kontostand = open("kontostand.txt", "r")
			zwischenschritt = str(auslesen_kontostand)
			auslesen_kontostand.close()
			rechnung_kontostand = int(zwischenschritt)
			if auslesen_kontostand == "":
				print("Sie haben kein Konto!")
				behebung = 0
				main = 1

			if auslesen_kontostand != "":
		
				if behebung_auswahl == "1" and rechnung_kontostand >= -2250:
					ergebniss_kontostand = rechnung_kontostand - 50
					ergebniss_kontostand2 = str(ergebniss_kontostand)
					print("Entnehmen Sie Ihre 50€")
					auslesen_kontostand = open("kontostand.txt", "w")
					auslesen_kontostand.write(ergebniss_kontostand2)
					auslesen_kontostand.close()
					auswahl = ""
					main = 1

		
	if auswahl == "5":
		main = 0
		print("Bis zum nächsten mal!")

	if auswahl != "1" and auswahl != "2" and auswahl != "3" and auswahl != "4" and auswahl != "5":
		print("Bitte geben Sie eine gültige Operation ein!")
		main = 1



RE: little problem with read out and write into a file - Larz60+ - Sep-03-2017

for read change lines 17 - 24:
            auslesen_kontostand = open("kontostand.txt", "r")
            zwischenschritt = str(auslesen_kontostand)
            auslesen_kontostand.close()
            rechnung_kontostand = int(zwischenschritt)
            if auslesen_kontostand == "":
                print("Sie haben kein Konto!")
                behebung = 0
                main = 1
to:
            with open("kontostand.txt") as fin:
                for line in fin.readlines()
                rechnung_kontostand = int(zwischenschritt)
                if auslesen_kontostand == "":
                    print("Sie haben kein Konto!")
                    behebung = 0
                    main = 1
for write, change lines 32-34:
                    auslesen_kontostand = open("kontostand.txt", "w")
                    auslesen_kontostand.write(ergebniss_kontostand2)
                    auslesen_kontostand.close()
to:
                    with open("kontostand.txt", "w") as f:
                        f.write(ergebniss_kontostand2)
It's easier to understand, and doesn't require a close (closes automatically)

I have no way to test, so there may be errors, but you should be able to figure out what they are, if not ask.


RE: little problem with read out and write into a file - hello_its_me - Sep-04-2017

It gives me this error :
File "bankomat.py", line 18
for line in fin.readlines()
^
TabError: inconsistent use of tabs and spaces in indentation

My code looks like that now:
main = 1
behebung = 0
rechnung_kontostand = 0
ergebniss_kontostand = 0
ergebniss_kontostand2 = ""
while main == 1:
	main = 0
	print("Möchten Sie \n 1) Beheben \n 2) Einzahlen \n 3) Kontostand \n 4) Bewegungen \n 5) beenden")
	auswahl = input()

	
	if auswahl == "1":
		behebung = 1
		while behebung == 1:
			behebung = 0
			behebung_auswahl = input("Wieviel möchten Sie beheben?\n 1)50€ \t \t \t \t 2)100€ \n 3)200€ \t \t \t \t 4)500€ \n 5)800€ \t \t \t \t 6)1000€ \n")
			with open("kontostand.txt") as fin:
                for line in fin.readlines()
                rechnung_kontostand = int(zwischenschritt)
                if auslesen_kontostand == "":
                    print("Sie haben kein Konto!")
                    behebung = 0
                    main = 1

			if auslesen_kontostand != "":
		
				if behebung_auswahl == "1" and rechnung_kontostand >= -2250:
					ergebniss_kontostand = rechnung_kontostand - 50
					ergebniss_kontostand2 = str(ergebniss_kontostand)
					print("Entnehmen Sie Ihre 50€")
					auslesen_kontostand = open("kontostand.txt", "w")
					with open("kontostand.txt", "w") as f:
                        f.write(ergebniss_kontostand2)
						main = 1

		
	if auswahl == "5":
		main = 0
		print("Bis zum nächsten mal!")

	if auswahl != "1" and auswahl != "2" and auswahl != "3" and auswahl != "4" and auswahl != "5":
		print("Bitte geben Sie eine gültige Operation ein!")
		main = 1



RE: little problem with read out and write into a file - Larz60+ - Sep-04-2017

Is that all? Do you get any output at all other than the error.
Please post error message verbatim as it contains valuable information.
As I stated earlier,
Quote:I have no way to test, so there may be errors, but you should be able to figure out what they are

You should have been able to find the missing colon at the end of line 18!


RE: little problem with read out and write into a file - wavic - Sep-04-2017

Missing ':' at the end of the for loop statement


RE: little problem with read out and write into a file - hello_its_me - Sep-04-2017

It isn't running and just gives me the error message I posted alredy :-( and the ":" didn't solve the problem


RE: little problem with read out and write into a file - wavic - Sep-04-2017

The error message makes it clear. You are using both tabs and spaces for the indentation. Set the IDE to put spaces every time you hit TAB.


RE: little problem with read out and write into a file - hello_its_me - Sep-04-2017

main = 1
behebung = 0
rechnung_kontostand = 0
ergebniss_kontostand = 0
ergebniss_kontostand2 = ""
while main == 1:
	main = 0
	print("Möchten Sie \n 1) Beheben \n 2) Einzahlen \n 3) Kontostand \n 4) Bewegungen \n 5) beenden")
	auswahl = input()

	
	if auswahl == "1":
		behebung = 1
		while behebung == 1:
			behebung = 0
			behebung_auswahl = input("Wieviel möchten Sie beheben?\n 1)50€ \t \t \t \t 2)100€ \n 3)200€ \t \t \t \t 4)500€ \n 5)800€ \t \t \t \t 6)1000€ \n")
			with open("kontostand.txt") as fin:
				for line in fin.readlines():
				rechnung_kontostand = int(zwischenschritt)
				if auslesen_kontostand == "":
					print("Sie haben kein Konto!")
					behebung = 0
					main = 1

			if auslesen_kontostand != "":
		
				if behebung_auswahl == "1" and rechnung_kontostand >= -2250:
					ergebniss_kontostand = rechnung_kontostand - 50
					ergebniss_kontostand2 = str(ergebniss_kontostand)
					print("Entnehmen Sie Ihre 50€")
					auslesen_kontostand = open("kontostand.txt", "w")
					with open("kontostand.txt", "w") as f:
						f.write(ergebniss_kontostand2)
						main = 1

		
	if auswahl == "5":
		main = 0
		print("Bis zum nächsten mal!")

	if auswahl != "1" and auswahl != "2" and auswahl != "3" and auswahl != "4" and auswahl != "5":
		print("Bitte geben Sie eine gültige Operation ein!")
		main = 1
Now it gives me that error:

File "bankomat.py", line 19
rechnung_kontostand = int(zwischenschritt)
^
IndentationError: expected an indented block


RE: little problem with read out and write into a file - wavic - Sep-04-2017

Yes, when you have a function definition, loops, conditions, a with statement, a class definition, all of these expect an indented block of code. It could be just a line. Line 19 after the for loop and perhaps all the if statement block must be indented


RE: little problem with read out and write into a file - DeaD_EyE - Sep-04-2017

Look always one or more lines before the error occurs.
Look in line 18
for line in fin.readlines():
After this line, you've to indent your code. The code inside the indented block is executed inside the for loop.

A little hint: In line 20 you're checking if rechnung_kontostand is an empty string. The if statement is checking for a boolean.
Mostly all types does have a good implementation for boolean.
>>> bool('') # empty string
False
>>> bool(' ') # non empty string
True
>>> bool('0')
True
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(None)
False
>>> bool([]) # empty list
False
>>> bool([0]) # non empty list
True
>>> bool({}) # empty dict
False
>>> bool({'A': 'B'}) # non empty dict
True
>>> bool({'A'}) # non empty set
True
>>> bool(set()) # empty set
False
So in line 20 your check can be:

if auslesen_kontostand:
    # code

# or more fault tolerant
if auslesen_kontostand.strip():
    # code
# strip removes white spaces on the left and right side of a string.
# a string with only white spaces inside will return an empty string.