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
  How to parse and group hierarchical list items from an unindented string in Python? ann23fr 0 177 Mar-27-2024, 01:16 PM
Last Post: ann23fr
  Why do I have to repeat items in list slices in order to make this work? Pythonica 7 1,320 May-22-2023, 10:39 PM
Last Post: ICanIBB
  Finding combinations of list of items (30 or so) LynnS 1 867 Jan-25-2023, 02:57 PM
Last Post: deanhystad
  For Word, Count in List (Counts.Items()) new_coder_231013 6 2,568 Jul-21-2022, 02:51 PM
Last Post: new_coder_231013
  How to get list of exactly 10 items? Mark17 1 2,498 May-26-2022, 01:37 PM
Last Post: Mark17
  how to assign items from a list to a dictionary CompleteNewb 3 1,564 Mar-19-2022, 01:25 AM
Last Post: deanhystad
  Mark outlook emails as read using Python! shane88 2 6,539 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,265 Feb-01-2022, 12:20 PM
Last Post: Pedroski55
  Reading list items without brackets and quotes jesse68 6 4,612 Jan-14-2022, 07:07 PM
Last Post: jesse68
Question How to gather specific second-level items from a list chatguy 2 1,545 Dec-17-2021, 05:05 PM
Last Post: chatguy

Forum Jump:

User Panel Messages

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