ASCII Table confusion - python-3.x

for my class we have to create a program that shows the ASCII characters from ! to ~. I have the program running but it has to be 10 characters per line, and my program is adding 80-84. Can anyone help, I don't know what is wrong.
for i in range(33, 126, 10): #determines range of characters shown
for characters in range(i, i+10): #determins characters per line
print('%2x %-4s'%(characters, chr(characters)) , end="") #prints number and ASCII symbol
print()

Your problem is that when the ouuter loop stops, at "123", it will still run the whole inner loop, from "123" to "123 + 10" - as those characters are not printable (unicode codepoints 0x80 - 0xa0 have no associated glyph), you only see the numbers.
You have to add an extra condition to stop printing - either at your program as it is, inside the inner loop, or reformat your program to use one single loop, and a counter variable to do the line breaks.
for i in range(33, 126, 10): #determines range of characters shown
for characters in range(i, i+10): #determins characters per line
if characters >= 0x80:
break
print('%2x %-4s'%(characters, chr(characters)) , end="") #prints number and ASCII symbol
print()

Related

Reads a series of lines Python

Can someone enlighten me how to do this?
Write a Python program that reads a series of lines one by one from the keyboard (ending by an empty line) and, at the end, outputs the number of times that the first line occurred. For example, if it reads
hello
world
We say hello
hello
Birkbeck
hello
it would output 3 since the first line ("hello") occurred three times.
You may assume that the user enters at least two non-empty lines before the empty line.
not sure if you want to separate word with spaces or with the newline character and if we count the first occurence.
This is a sample solution for spaces separation between words. This works for the example that you provided
freq_dict = {}
word = input().split()
for w in word:
if w not in freq_dict.keys():
freq_dict[w] = 0
else:
freq_dict[w] += 1
print(freq_dict[word[0]])

Generating Binary Encoded Symbols Python Program

I have an assignment that has instructions as follows:
write a program that reads in 4 sets of 4 dashed lines and outputs the four binary symbols that each set of four lines represents.
input consists of 16 lines in total, consisting of any number of dashes and spaces.
the first four lines represents a symbol, the next four lines represents the next symbol and so on.
print out the four binary-encoded symbols represented by the 16 lines in total.
each binary symbol should be on its own line
This is based upon a previous program that I wrote where input is a single line of text consisting of any number of spaces and dashes. If there is an even number of dashes in the line, output 0. Otherwise, output 1.
This is the code for the above:
line = input()
num_dashes = line.count("-")
mod = num_dashes % 2
if mod == 0:
print("0")
else:
print("1")
Please may someone assist me?
Thank you.
The code you have for processing one line is fine, although you could replace the if...else with just:
print(mod)
Now to extend this to multiple lines, it might be better not to call print like that, but to collect the output in a variable, and only output that variable when all 16 lines have been processed. This way the output does not get mixed with the input from the console.
So for instance, it could happen like this:
output = []
for part in range(4): # loop 4 times
digits = ""
for line in range(4): # loop 4 times
line = input()
num_dashes = line.count("-")
mod = num_dashes % 2
digits += str(mod) # collect the digit
output.append(digits) # append 4 digits to a list
print("\n".join(output)) # print the list, separated by linebreaks

Fortran Program of Strings: Counting commas

I am doing this assignment for my class and I don't know if I am doing it right.
The assignment is to design and implement a Fortran program to read a series of strings from the keyboard and count the commas (“,”) in each line.
The program should provide loops, formatted input/output, and processing strings.
The program should output the line number, the number of commas, and the first 70 characters of the input line.
Input will be terminated with a blank line or 9999 lines, whichever comes first.
Test the program on a series of different input values and verify that the output is correct for those input values. Assume the input string may be no longer than 999 characters.
Output shall be a formatted list of the format:
nnnn:cc:aaaaaaaaaaaa…aaaaaaaaaaaaaaaa where nnnn is the line number, cc is the comma count, and aaaaaaaaaaaa…aaaaaaaaaaaaaaaa is the first 70 characters of the input line without trailing spaces.
This code for this program has to be simple enough for a beginner programmer to understand. Nothing complex.
Here is what I have so far:
Program counting
implicit none
Integer :: line_number
Integer :: comma_count
Character (len = 999) :: message
WRITE (*,*)
WRITE (*,*)"Provide output the line number, the number of commas,&
and the first 70 characters of the input line."
WRITE (*,*)
DO line_number = 0, 9999
line_number = 1 + line_number
IF (line_number == 0 .or. line_number >= 9999) then
Exit
END IF
WRITE (*,*)":"
comma_count = 1 + line_number
WRITE (*,*)":"
WRITE (*,'(a70)') message
END DO
READ (*,*) line_number, comma_count, message
END Program counting

Python 3.x - don't count carriage returns with len

I'm writing the following code as part of my practice:
input_file = open('/home/me/01vshort.txt', 'r')
file_content = input_file.read()
input_file.close()
file_length_question = input("Count all characters (y/n)? ")
if file_length_question in ('y', 'Y', 'yes', 'Yes', 'YES'):
print("\n")
print(file_content, ("\n"), len(file_content) - file_content.count(" "))
It's counting carriage returns in the output, so for the following file (01vshort.txt), I get the following terminal output:
Count all characters (y/n)? y
0
0 0
1 1 1
9
...or...
Count all characters (y/n)? y
0
00
111
9
In both cases, the answer should be 6, as there are 6 characters, but I'm getting 9 as the result.
I've made sure the code is omitting whitespace, and have tested this with my input file by deliberately adding whitespace and running the code with and without the line:
- file_content.count(" ")
Can anyone assist here as to why the result is 9 and not 6?
Perhaps it isn't carriage returns at all?
I'm also curious as to why the result of 9 is indented by 1 whitespace? The input file simply contains the following (with a blank line at the end of the file, line numbers indicated in the example):
1. 0
2. 0 0
3. 1 1 1
4.
...or...
1. 0
2. 00
3. 111
4.
Thanks.
If you want to ignore all whitespace characters including tabs and newlines and other control characters:
print(sum(not c.isspace() for c in file_content))
will give you the 6 you expect.
Alternatively you can take advantage of the fact the .split() method with no argument will split a string on any whitespace character. So split it into non-space chunks and then join them all back together again without the whitespace characters:
print(len(''.join(file_content.split())))
You're getting 9 because the content of the file could be interpreted like:
file_content = "0\n0 0\n1 1 1\n"
and you're only matching the white spaces (file_content.count(" ")).
In order to count only the characters you'd either:
read line by line the file, or
use a regexp to match white space.
For the indenting of 9: print processes the commas as outlined here

Get only one word from line

How can I take only one word from a line in file and save it in some string variable?
For example my file has line "this, line, is, super" and I want to save only first word ("this") in variable word. I tried to read it character by character until I got on "," but I when I check it I got an error "Argument of type 'int' is not iterable". How can I make this?
line = file.readline() # reading "this, line, is, super"
if "," in len(line): # checking, if it contains ','
for i in line:
if "," not in line[i]: # while character is not ',' -> this is where I get error
word += line[i] # add it to my string
You can do it like this, using split():
line = file.readline()
if "," in line:
split_line = line.split(",")
first_word = split_line[0]
print(first_word)
split() will create a list where each element is, in your case, a word. Commas will not be included.
At a glance, you are on the right track but there are a few things wrong that you can decipher if you always consider what data type is being stored where. For instance, your conditional 'if "," in len(line)' doesn't make sense, because it translates to 'if "," in 21'. Secondly, you iterate over each character in line, but your value for i is not what you think. You want the index of the character at that point in your for loop, to check if "," is there, but line[i] is not something like line[0], as you would imagine, it is actually line['t']. It is easy to assume that i is always an integer or index in your string, but what you want is a range of integer values, equal to the length of the line, to iterate through, and to find the associated character at each index. I have reformatted your code to work the way you intended, returning word = "this", with these clarifications in mind. I hope you find this instructional (there are shorter ways and built-in methods to do this, but understanding indices is crucial in programming). Assuming line is the string "this, line, is, super":
if "," in line: # checking that the string, not the number 21, has a comma
for i in range(0, len(line)): # for each character in the range 0 -> 21
if line[i] != ",": # e.g. if line[0] does not equal comma
word += line[i] # add character to your string
else:
break # break out of loop when encounter first comma, thus storing only first word

Resources