[Tutor] strange behavior in program

Lloyd Kvam pythonTutor at venix.com
Sat Jun 12 17:02:21 EDT 2004


I believe that the lines where you prompt for again should be shifted to
the left so that they line up with
	for char in original

This way the program will finish processing original before it asks
about looping again.

These are the lines to shift left.
        again = raw_input("Would you like to convert more ....
        if again in 'Yy':
            again = True
        elif again in 'Nn':
            again = False

By shifting them left one level you take them out of the
	for char in original
loop, but keep them in the
	while again
loop.

I think that fits what you are really trying to do.


A minor suggestion.  Your if/elif to set again could be replaced by:
	again = again not in 'Nn'
again will be False when the raw_input is N or n or '', otherwise again
will be True.  I think this matches what you actually coded and is much
shorter.  Make sure that you follow what is happening.  (The expression
looks a little funny since again is used to refer to the raw_input and
also to the loop control.)



On Sat, 2004-06-12 at 16:20, Dragonfirebane at aol.com wrote:
> Hello all,
> 
> I've finally managed to make the text converter in the code below do what its supposed to, but when i run it with more than one character ('hello', for example), it'll do the following (convert the first letter then ask if more letters are to be converted and regardless of the answer continue until the word is done, at which point 'y' begins the program again and 'n' ends it like it's supposed to):
> 
> >>> 
> Please enter numbers or text to be converted. hello
> 1000
> Would you like to convert more text or numbers [y/n]? n
> 101
> Would you like to convert more text or numbers [y/n]? y
> 1100
> Would you like to convert more text or numbers [y/n]? 
> 1100
> Would you like to convert more text or numbers [y/n]? 1
> 1111
> Would you like to convert more text or numbers [y/n]? y
> Please enter numbers or text to be converted. a
> 01
> Would you like to convert more text or numbers [y/n]? n
> Thank you for using Multivert.  Multivert will now close
> 
> here's the code:
> 
> def convertxt():
>     x = 0
>     while x <= 25:
>         while char in alphabet[x]:
>             print binary[x]
>             break
>         x += 1
> def convertnum():
>     whichconv = raw_input("""Convert to:
> 1: Binary
> 2: Hexadecimal
> """)
>     if whichconv in('1','Binary','binary','bin','b'):
>         if char in number:
>             print binary[int(original) - 1]
>     elif whichconv in('2','Hexadecimal','hexadecimal','hexadec','hex','h'):
>         if char in number:
>             print hexadec[int(original) - 1]
> 
> 
> import time
> 
> alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
> binary = ['01','10','11','100','101','110','111','1000','1001','1010','1011','1100','1101','1110','1111','10000','10001','10010','10011','10100','10101','10110','10111','11000','11001','11010','11011','11100','11101','11110','11111','100000','100001','100010','100011','100100','100101','100110','100111','101000','101001','101010','101011','101100','101101','101110','101111','110000','110001','110010','110011','110100','110101','110110','110111','111000','111001','111010','111011','111100','111101','111110','111111','1000000','1000001','1000010','1000011','1000100','1000101','1000110','1000111','1001000','1001001','1001010','1001011','1001100','1001101','1001110','1001111','1010000','1010001','1010010','1010011','1010100','1010101','1010110','1010111','1011000','1011001','1011010','1011011','1011100','1011101','1011110','1011111','1100000','1100001','1100010','1100011','1100100','1100101','1100110','1100111','1101000','1101001','1101010','1101011','1101100','1101101','1101110','1101111','1110000','1110001','1110010','1110011','1110100','1110101','1110110','1110111','1111000','1111001','1111010','1111011','1111100','1111101','1111110','1111111','10000000','10000001','10000010','10000011','10000100','10000101','10000110','10000111','10001000','10001001','10001010','10001011','10001100','10001101','10001110','10001111','10010000','10010001','10010010','10010011','10010100','10010101','10010110','10010111','10011000','10011001','10011010','10011011','10011100','10011101','10011110','10011111','10100000','10100001','10100010','10100011','10100100','10100101','10100110','10100111','10101000','10101001','10101010','10101011','10101100','10101101','10101110','10101111','10110000','10110001','10110010','10110011','10110100','10110101','10110110','10110111','10111000','10111001','10111010','10111011','10111100','10111101','10111110','10111111','11000000','11000001','11000010','11000011','11000100','11000101','11000110','11000111','11001000','11001001','11001010','11001011','11001100','11001101','11001110','11001111','11010000','11010001','11010010','11010011','11010100','11010101','11010110','11010111','11011000','11011001','11011010','11011011','11011100','11011101','11011110','11011111','11100000','11100001','11100010','11100011','11100100','11100101','11100110','11100111','11101000','11101001','11101010','11101011','11101100','11101101','11101110','11101111','11110000','11110001','11110010','11110011','11110100','11110101','11110110','11110111','11111000','11111001','11111010','11111011','11111100','11111101','11111110','11111111']
> number = ['0','1','2','3','4','5','6','7','8','9']
> hexadec = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','10','11','12','13','14','15','16','17','18','19','1A','1B','1C','1D','1E','1F','20','21','22','23','24','25','26','27','28','29','2A','2B','2C','2D','2E','2F','30','31','32','33','33','34','35','36','37','38','39','3A','3B','3C','3D','3E','3F','40','41','42','43','44','45','46','47','48','49','4A','4B','4C','4D','4E','4F','50','51','52','53','54','55','56','57','58','59','5A','5B','5C','5D','5E','5F','60','61','62','63','64','65','66','67','68','69','6A','6B','6C','6D','6E','6F','70','71','72','73','74','75','76','77','78','79','7A','7B','7C','7D','7E','7F','80','81','82','83','84','85','86','87','88','89','8A','8B','8C','8D','8E','8F','90','91','92','93','94','95','96','97','98','99','9A','9B','9C','9D','9E','9F','A1','A2','A3','A4','A5','A6','A7','A8','A9','AA','AB','AC','AD','AE','AF','B0','B1','B2','B3','B4','B5','B6','B7','B8','B9','BA','BB','BC','BD','BE','BF','C0','C1','C2','C3','C4','C5','C6','C7','C8','C9','CA','CB','CC','CD','CE','CF','D0','D1','D2','D3','D4','D5','D6','D7','D8','D9','DA','DB','DC','DD','DE','DF','E0','E1','E2','E3','E4','E5','E6','E7','E8','E9','EA','EB','EC','ED','EE','EF','F0','F1','F2','F3','F4','F5','F6','F7','F8','F9','FA','FB','FC','FD','FE','FF']
> again = True
> while again:
>     original = raw_input("Please enter numbers or text to be converted. ")
>     for char in original:
>         try:
>             int(original)
>         except TypeError:
>             convertxt()
>         except ValueError:
>             convertxt()
>         else:
>             if char in number:
>                 convertnum()
>         again = raw_input("Would you like to convert more text or numbers [y/n]? ")
>         if again in 'Yy':
>             again = True
>         elif again in 'Nn':
>             again = False
> print "Thank you for using Multivert.  Multivert will now close"
> time.sleep(1.1)
> import sys
> sys.exit()
> 
> if any one has any idea why this happens and how I can fix it, I'd be grateful.
> 
> "n thats the way the cookie crumbles"
> 
> America's Favorite Cookie
> 
> ______________________________________________________________________
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
-- 

Lloyd Kvam
Venix Corp.
1 Court Street, Suite 378
Lebanon, NH 03766-1358

voice:	603-653-8139
fax:	801-459-9582




More information about the Tutor mailing list