Python Forum
Looping unknowns with user input hw question - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Homework (https://python-forum.io/forum-9.html)
+--- Thread: Looping unknowns with user input hw question (/thread-13145.html)



Looping unknowns with user input hw question - Turkejive - Sep-30-2018

Hello, I am having some difficulty with a problem through Grok Learning. I've been stuck on it for two days now. I think I'm close to a solution, but I'm not getting the in-between outputs as I need to. I tried using the range function but am given coordinates or some reason. So I won't post that code, and will post the one that is closest to what the possible answer could be.

Here is the question;
"The lift is broken! It can still go up and down, but doesn't display what floor it's at anymore, which is causing confusion for people trying to use it.

Write a program that will display the floor numbers on an elevator that is going up. Your program should read in the current floor and read in the destination floor, which will always be higher than the current floor. Your program should print out each of the floor numbers in-between."

What the outputs should to be;
example1
Current floor: 3
Destination floor: 6
Level 3
Level 4
Level 5
Level 6
​
example2
Current floor: 1
Destination floor: 2
Level 1
Level 2
My current answer code is;
floor = int(input("Current floor: "))
dfloor = int(input("Destination floor: "))
while floor <= dfloor:
  if dfloor % floor == 0:      
    print("Level", floor)
  floor = floor + 1
print('')
However, my output comes to just the selected floors;
Current floor: 3
Destination floor: 6
Level 3
Level 6



RE: Looping unknowns with user input hw question - stranac - Sep-30-2018

This statement is making only certain floors get printed out:
if dfloor % floor == 0:
If you print unconditionally, you'll get the result you want.


RE: Looping unknowns with user input hw question - j.crater - Sep-30-2018

Hello,
why are you using % (modulus) operator? I don't think you need it. It will print only floors satisfying this mathematical condition.


RE: Looping unknowns with user input hw question - gruntfutuk - Sep-30-2018

As you know exactly the range required, it is easier to use a for loop than a while loop as it saves you having to write the code for counting.

How about:

floor = int(input("Current floor: "))
dfloor = int(input("Destination floor: "))
print('\n' + '\n'.join([f'Level {floor_}' for floor_ in range(floor, dfloor + 1)]))
This is using list comprehension inside of the print function call to generate a list of strings, each one being "Level " and a floor number. The floor numbers are generated by the for loop using a range starting from one and stopping before the destination floor + 1.

If you don't want to use list comprehension, and probably more clear anyway:

floor = int(input("Current floor: "))
dfloor = int(input("Destination floor: "))
print()
for floor_ in range(floor, dfloor + 1):
    print(f'Level {floor_}')



RE: Looping unknowns with user input hw question - Turkejive - Sep-30-2018

(Sep-30-2018, 09:06 AM)j.crater Wrote: Hello,
why are you using % (modulus) operator? I don't think you need it. It will print only floors satisfying this mathematical condition.
Hi, I used it because I was modified an example code from the chapter on the Grok learning site. It came close to the answer I needed in contrast to other variations of the code I made. I realize now that it was probably a bad idea and kept me from progression on the assignment.

(Sep-30-2018, 01:13 PM)gruntfutuk Wrote: As you know exactly the range required, it is easier to use a for loop than a while loop as it saves you having to write the code for counting.

How about:

floor = int(input("Current floor: "))
dfloor = int(input("Destination floor: "))
print('\n' + '\n'.join([f'Level {floor_}' for floor_ in range(floor, dfloor + 1)]))
This is using list comprehension inside of the print function call to generate a list of strings, each one being "Level " and a floor number. The floor numbers are generated by the for loop using a range starting from one and stopping before the destination floor + 1.

If you don't want to use list comprehension, and probably more clear anyway:

floor = int(input("Current floor: "))
dfloor = int(input("Destination floor: "))
print()
for floor_ in range(floor, dfloor + 1):
    print(f'Level {floor_}')

Thank you so much for this. I ended up changing your suggestion a little but it helped.
Thank you to everyone else as well for your help too~