Python Forum
What is the correct syntax for list items that need to contain a quotation mark, etc?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
What is the correct syntax for list items that need to contain a quotation mark, etc?
#1
A script I have has this line:

items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']


This displays as 1/16", 1/8", etc.

I'd like it to display as architectural scales 1/16"=1'-0", 1/8"=1'-0" etc.

What is the correct syntax for that? Nothing I've tried so far works.
Reply
#2
I don't understand your notation. How do you translate from one to the other? Show us what you've tried.
Reply
#3
You can backslash it: '1/16"=1\'-0"'.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#4
items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
print(', '.join(items))
Reply
#5
items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
scales = [f'{item}=1\'-0"' for item in items]
print(scales)
for scale in scales:
    print(scale)
Output:
['1/16"=1\'-0"', '1/8"=1\'-0"', '1/4"=1\'-0"', '3/8"=1\'-0"', '1/2"=1\'-0"', '3/4"=1\'-0"', '1-1/2"=1\'-0"', '1/6"=1\'-0"', '1:1=1\'-0"'] 1/16"=1'-0" 1/8"=1'-0" 1/4"=1'-0" 3/8"=1'-0" 1/2"=1'-0" 3/4"=1'-0" 1-1/2"=1'-0" 1/6"=1'-0" 1:1=1'-0"
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#6
This is a script to run in Rhino 3D Ver6. The script works. However, the selection windows comes up as the first pic. I would like it to be as in the second pic. I had found a thread that addressed using quotes by putting them within a mixture of slashes, quotes and apostrophes. I just could not get it to work.

[Image: Scale_opt.jpg]

[Image: Scale_opt_imp.jpg]

(Sep-13-2019, 07:03 PM)buran Wrote:
items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1'] scales = [f'{item}=1\'-0"' for item in items] print(scales) for scale in scales: print(scale)
Output:
['1/16"=1\'-0"', '1/8"=1\'-0"', '1/4"=1\'-0"', '3/8"=1\'-0"', '1/2"=1\'-0"', '3/4"=1\'-0"', '1-1/2"=1\'-0"', '1/6"=1\'-0"', '1:1=1\'-0"'] 1/16"=1'-0" 1/8"=1'-0" 1/4"=1'-0" 3/8"=1'-0" 1/2"=1'-0" 3/4"=1'-0" 1-1/2"=1'-0" 1/6"=1'-0" 1:1=1'-0"

This is the answer I think. However, I don't know how to incorporate your scales = [f'{item}.... with the scale = rs.ListBox...in the script I'm trying to edit. The full code is below.

[python]
import Rhino
import rhinoscriptsyntax as rs
import scriptcontext as sc


def setDetailScale():
"""
this script changes the scale of a detail to a selected scale from a listbox
version 1.0
www.studiogijs.nl
"""

detail = rs.GetObject("select detail", filter = 32768)
if not detail:
return
detail = rs.coercerhinoobject(detail)
if not detail.DetailGeometry.IsParallelProjection:
return
#modify the scale
items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
scale = rs.ListBox(items, "Select scale", "Scale detail")
if not scale:
return
if scale == '1/16"':
intScale = 120
elif scale == '1/8"':
intScale = 96
elif scale == '1/4"':
intScale = 48
elif scale == '3/8"':
intScale = 36
elif scale == '1/2"':
intScale = 24
elif scale == '3/4"':
intScale = 12
elif scale == '1-1/2"':
intScale = 8
elif scale == '1/6"':
intScale = 6
elif scale == '1:1':
intScale = 1

detail.DetailGeometry.SetScale(intScale, sc.doc.ModelUnitSystem, 1, sc.doc.PageUnitSystem)
#lock detail
items = ["YES","NO"]
lock = rs.ListBox(items,"Lock Detail/s","YES","NO")
if lock == "YES":
detail.DetailGeometry.IsProjectionLocked = True
elif lock == "NO":
detail.DetailGeometry.IsProjectionLocked = False
detail.CommitChanges()
sc.doc.Views.Redraw()

if __name__ == '__main__':
setDetailScale()
[python]

Obviously I have not mastered posting the code here correctly. This should be a link to the file. Rhino script.

(Sep-13-2019, 06:52 PM)ichabod801 Wrote: You can backslash it: '1/16"=1\'-0"'.

I tried this. It worked for the first, 1/16"=1'-0". But when I changed the second the script crashed.
Reply
#7
Apologies for the post mess. I'm now getting the hang of posting here. Mods fix as necessary.
The code for the script:

import Rhino
import rhinoscriptsyntax as rs
import scriptcontext as sc


def setDetailScale():
    """
    this script changes the scale of a detail to a selected scale from a listbox
    version 1.0
    www.studiogijs.nl
    """
    
    detail = rs.GetObject("select detail", filter = 32768)
    if not detail:
        return
    detail = rs.coercerhinoobject(detail)
    if not detail.DetailGeometry.IsParallelProjection:
        return
    #modify the scale
    items = ['1/16"','1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
    scale = rs.ListBox(items, "Select scale", "Scale detail")
    if not scale:
        return
    if scale == '1/16"=1\'-0"':
        intScale = 120
    elif scale == '1/8"-1\'-0"':
        intScale = 96
    elif scale == '1/4"':
        intScale = 48
    elif scale == '3/8"':
        intScale = 36
    elif scale == '1/2"':
        intScale = 24
    elif scale == '3/4"':
        intScale = 12
    elif scale == '1-1/2"':
        intScale = 8
    elif scale == '1/6"':
        intScale = 6
    elif scale == '1:1':
        intScale = 1
    
    detail.DetailGeometry.SetScale(intScale, sc.doc.ModelUnitSystem, 1, sc.doc.PageUnitSystem)
    #lock detail
    items = ["YES","NO"]
    lock = rs.ListBox(items,"Lock Detail/s","YES","NO")
    if lock == "YES":
        detail.DetailGeometry.IsProjectionLocked = True
    elif lock == "NO":
        detail.DetailGeometry.IsProjectionLocked = False
    detail.CommitChanges()
    sc.doc.Views.Redraw()

if __name__ == '__main__':
    setDetailScale()
Reply
#8
import Rhino
import rhinoscriptsyntax as rs
import scriptcontext as sc
 
 
def setDetailScale():
    """
    this script changes the scale of a detail to a selected scale from a listbox
    version 1.0
    www.studiogijs.nl
    """
     
    detail = rs.GetObject("select detail", filter = 32768)
    if not detail:
        return
    detail = rs.coercerhinoobject(detail)
    if not detail.DetailGeometry.IsParallelProjection:
        return
    
    #modify the scale
    scales = {'1/16"=1\'-0"':120, '1/8"=1\'-0"':96, '1/4"=1\'-0"':48,
              '3/8"=1\'-0"':36, '1/2"=1\'-0"':24, '3/4"=1\'-0"':12,
              '1-1/2"=1\'-0"':8, '1/6"=1\'-0"':6, '1:1=1\'-0"':1}

    scale = rs.ListBox(scales.keys(), "Select scale", "Scale detail")
    if not scale:
        return

    intScale = scales.get[scale]
    
    detail.DetailGeometry.SetScale(intScale, sc.doc.ModelUnitSystem, 1, sc.doc.PageUnitSystem)
    
    #lock detail
    items = ["YES","NO"]
    lock = rs.ListBox(items,"Lock Detail/s","YES","NO")
    detail.DetailGeometry.IsProjectionLocked = lock == 'YES'
    
    # if lock == "YES":
    #     detail.DetailGeometry.IsProjectionLocked = True
    # elif lock == "NO":
    #     detail.DetailGeometry.IsProjectionLocked = False

    
    detail.CommitChanges()
    sc.doc.Views.Redraw()
 
if __name__ == '__main__':
    setDetailScale()
If not using python3.7+ scales should be collections.OrderedDict
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Why do I have to repeat items in list slices in order to make this work? Pythonica 7 1,471 May-22-2023, 10:39 PM
Last Post: ICanIBB
  Finding combinations of list of items (30 or so) LynnS 1 938 Jan-25-2023, 02:57 PM
Last Post: deanhystad
  For Word, Count in List (Counts.Items()) new_coder_231013 6 2,786 Jul-21-2022, 02:51 PM
Last Post: new_coder_231013
  How to get list of exactly 10 items? Mark17 1 2,640 May-26-2022, 01:37 PM
Last Post: Mark17
  how to assign items from a list to a dictionary CompleteNewb 3 1,704 Mar-19-2022, 01:25 AM
Last Post: deanhystad
  Mark outlook emails as read using Python! shane88 2 6,746 Feb-24-2022, 11:19 PM
Last Post: Pedroski55
  Doctesting a function which prints a students name along with the maximum mark scored sean1 5 2,378 Feb-01-2022, 12:20 PM
Last Post: Pedroski55
  Reading list items without brackets and quotes jesse68 6 4,817 Jan-14-2022, 07:07 PM
Last Post: jesse68
Question How to gather specific second-level items from a list chatguy 2 1,623 Dec-17-2021, 05:05 PM
Last Post: chatguy
  deleting select items from a list Skaperen 13 4,742 Oct-11-2021, 01:02 AM
Last Post: Skaperen

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020