Re: [Tutor] Python code
On Thu, Nov 24, 2016 at 9:14 PM, urfa jamil wrote: > > I need help to write a code for this problem. > > Please help > > > Ask the user to enter a series of numbers. Stop reading numbers when they enter a negative number. Calculate the average of the numbers given not including the final negative number. > > Question 9 options: > > > > With best regards > urfa jamil > ___ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor It seems to me that you're just passing on to us YOUR exercise, this way you won't learn a thing. Do you at least have any initial code that you tried doing yourself? ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
[Tutor] Parsing a String
Hello, I have written a script that pulls certain bits of information out of a Cisco router's 'show version' command. The output is given in the assignment and it does work on several different routers (I tested 3 different models from work). What I did seems a bit messy to me though, would I be able to get a second opinion here? Code in it's entirety is below. I did this using Python3.5.2 on Fedora 25. #!/usr/bin/env python3 # November 24, 2016# # Take the given string for 'show version' on a Cisco router # # and return the following information: # # vendor, model, os_version, uptime, serial number # # Code should be generic and work on other versions. # # # sh_ver = ''' Cisco IOS Software, C880 Software (C880DATA-UNIVERSALK9-M), Version 15.0(1)M4, RELEASE SOFTWARE (fc1) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2010 by Cisco Systems, Inc. Compiled Fri 29-Oct-10 00:02 by prod_rel_team ROM: System Bootstrap, Version 12.4(22r)YB5, RELEASE SOFTWARE (fc1) twb-sf-881 uptime is 7 weeks, 5 days, 19 hours, 23 minutes System returned to ROM by reload at 15:33:36 PST Fri Feb 28 2014 System restarted at 15:34:09 PST Fri Feb 28 2014 System image file is "flash:c880data-universalk9-mz.150-1.M4.bin" Last reload type: Normal Reload Last reload reason: Reload Command Cisco 881 (MPC8300) processor (revision 1.0) with 236544K/25600K bytes of memory. Processor board ID FTX138X 5 FastEthernet interfaces 1 Virtual Private Network (VPN) Module 256K bytes of non-volatile configuration memory. 126000K bytes of ATA CompactFlash (Read/Write) License Info: License UDI: - Device# PID SN - *0CISCO881-SEC-K9 FTX138X License Information for 'c880-data' License Level: advipservices Type: Permanent Next reboot license Level: advipservices Configuration register is 0x2102 ''' import sys # New empty dictionary to store information. router_dict = {} # Get vendor, although we know it's Cisco anyway. if 'Cisco' in sh_ver: router_dict['vendor'] = 'Cisco' else: sys.exit('This is not a Cisco device') # Split sh ver output to a list of lines lines = sh_ver.split('\n') # Get the IOS version, this parses for the string 'Cisco IOS Software', # in every line in 'lines.' It then splits the string stored in position # 0 and returns position 2 as the os version and strips off the leading # space. router_dict['os_ver'] = [i for i in lines if 'Cisco IOS Software' in i][0].split(',')[2][1:] # Get the model of router using the same logic as the IOS version. The line # doesn't have a nice split character so I rebuilt the string using spaces. router_dict['model'] = ' '.join([i for i in lines if 'bytes of memory' in i][0].split()[0:3]) # Get uptime using the same logic as 'model' router_dict['uptime'] = ' '.join([i for i in lines if 'uptime' in i][0].split()[3:]) # Get serial number using the logic from 'os_ver' router_dict['serial'] = [i for i in lines if 'Processor board ID' in i][0].split()[3] for i in router_dict: print('{:<10} {}'.format(i, router_dict.get(i))) Thanks, Bryon ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Parsing a String
On 11/25/2016 05:26 PM, Bryon Adams wrote: Hello, I have written a script that pulls certain bits of information out of a Cisco router's 'show version' command. The output is given in the assignment and it does work on several different routers (I tested 3 different models from work). What I did seems a bit messy to me though, would I be able to get a second opinion here? Code in it's entirety is below. I did this using Python3.5.2 on Fedora 25. #!/usr/bin/env python3 # November 24, 2016# # Take the given string for 'show version' on a Cisco router # # and return the following information: # # vendor, model, os_version, uptime, serial number # # Code should be generic and work on other versions. # # # sh_ver = ''' Cisco IOS Software, C880 Software (C880DATA-UNIVERSALK9-M), Version 15.0(1)M4, RELEASE SOFTWARE (fc1) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2010 by Cisco Systems, Inc. Compiled Fri 29-Oct-10 00:02 by prod_rel_team ROM: System Bootstrap, Version 12.4(22r)YB5, RELEASE SOFTWARE (fc1) twb-sf-881 uptime is 7 weeks, 5 days, 19 hours, 23 minutes System returned to ROM by reload at 15:33:36 PST Fri Feb 28 2014 System restarted at 15:34:09 PST Fri Feb 28 2014 System image file is "flash:c880data-universalk9-mz.150-1.M4.bin" Last reload type: Normal Reload Last reload reason: Reload Command Cisco 881 (MPC8300) processor (revision 1.0) with 236544K/25600K bytes of memory. Processor board ID FTX138X 5 FastEthernet interfaces 1 Virtual Private Network (VPN) Module 256K bytes of non-volatile configuration memory. 126000K bytes of ATA CompactFlash (Read/Write) License Info: License UDI: - Device# PID SN - *0CISCO881-SEC-K9 FTX138X License Information for 'c880-data' License Level: advipservices Type: Permanent Next reboot license Level: advipservices Configuration register is 0x2102 ''' import sys # New empty dictionary to store information. router_dict = {} # Get vendor, although we know it's Cisco anyway. if 'Cisco' in sh_ver: router_dict['vendor'] = 'Cisco' else: sys.exit('This is not a Cisco device') # Split sh ver output to a list of lines lines = sh_ver.split('\n') # Get the IOS version, this parses for the string 'Cisco IOS Software', # in every line in 'lines.' It then splits the string stored in position # 0 and returns position 2 as the os version and strips off the leading # space. router_dict['os_ver'] = [i for i in lines if 'Cisco IOS Software' in i][0].split(',')[2][1:] # Get the model of router using the same logic as the IOS version. The line # doesn't have a nice split character so I rebuilt the string using spaces. router_dict['model'] = ' '.join([i for i in lines if 'bytes of memory' in i][0].split()[0:3]) # Get uptime using the same logic as 'model' router_dict['uptime'] = ' '.join([i for i in lines if 'uptime' in i][0].split()[3:]) # Get serial number using the logic from 'os_ver' router_dict['serial'] = [i for i in lines if 'Processor board ID' in i][0].split()[3] for i in router_dict: print('{:<10} {}'.format(i, router_dict.get(i))) Thanks, Bryon So I checked out what the teacher had written. He wrapped everything in a for loop which makes what I have look a lot better. Relevant part below, nothing else changed other than I changed the name of a variable to make them easier to distinguish. ver_lines = sh_ver.split('\n') for line in ver_lines: if 'Cisco IOS Software' in line: router_dict['os_ver'] = line.split(',')[2][1:] if 'bytes of memory' in line: router_dict['model'] = ' '.join(line.split()[0:3]) if 'uptime' in line: router_dict['uptime'] = ' '.join(line.split()[3:]) if 'Processor board ID' in line: router_dict['serial'] = line.split()[3] ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor