# While in python

**URL:** <https://it.discourse.mcneel.com/t/while-in-python/1443>\
**Category:** Scripting e Programmazione\
**Created:** [7 Febbraio 2018, 3:14am UTC](https://it.discourse.mcneel.com/t/while-in-python/1443 "2018-02-07T03:14:22Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Febbraio 2018, 3:14am UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/1 "2018-02-07T03:14:22Z")

</div>

come mai? dov’è che sbaglio??

![png](https://sea3.discourse-cdn.com/mcneel/images/transparent.png)

> import rhinoscriptsyntax as rs  
> obj = rs.GetObject(“Select curve”, rs.filter.curve)  
> lun = raw\_input() #56
> 
> if obj:  
> while rs.CurveLength(obj) \< lun:  
> rs.EnableObjectGrips(obj, True)  
> for i in range(1,4):  
> point = rs.ObjectGripLocation(obj, i)  
> point[1] = point[1] - .1  
> rs.ObjectGripLocation(obj, i, point)  
> rs.EnableObjectGrips(obj, False)

ho provato anche inserendo “if rs.CurveLength(obj) \> lun: break” ma comunque mi si blocca 😤

un aiutino per favore . . . .

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [7 Febbraio 2018, 7:17am UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/2 "2018-02-07T07:17:45Z")

</div>

Ciao Salvio

… Sicuro che raw\_input() funzioni negli script ?  
Io userei rs.GetString()

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Febbraio 2018, 12:39pm UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/3 "2018-02-07T12:39:11Z")

</div>

> [@emilio](#):
>
> Sicuro che raw\_input()

il raw\_input l’ho messo alla fine prima avevo il valore predefinito 56 ed era la stessa cosa

il problema credo non sia nel raw\_input() ma nel while che non si ferma arrivato al valore inserito

in pratica il while deve spostare i grips di -0.1 fino a che la curva non arrivi alla lunghezza indicata

il codice senza il while fa quello che deve fare con il while funziona ma poi va in loop continuo e si blocca…

---

<div class="post-metadata">

**Author:** ![vittorio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/vittorio/32/16755_2.png) [@vittorio](https://it.discourse.mcneel.com/u/vittorio)\
**Post date:** [7 Febbraio 2018, 1:03pm UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/4 "2018-02-07T13:03:54Z")

</div>

Devi mettere una condizione di fine ciclo e con il comando **break** esci dal ciclo altrimenti non si ferma  
Vittorio

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [7 Febbraio 2018, 1:51pm UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/5 "2018-02-07T13:51:27Z")

</div>

> [@0904](#):
>
> il codice senza il while fa quello che deve fare con il while funziona ma poi va in loop continuo e si blocca…

Se nel loop metti un

```python
print rs.CurveLength( obj )

```

dovresti capire qualcosa in piu’.

Ricordati Salvio:  
per capire cosa c’e’ che non va, serve a poco cambiare istruzioni a caso,  
e’ meglio far stampare allo script dei valori che ti permettano di capire cosa succede. 🙂

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [7 Febbraio 2018, 2:24pm UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/6 "2018-02-07T14:24:34Z")

</div>

Sorpresa ! 🙂

qui questo script funziona:

```python
import rhinoscriptsyntax as rs

obj = rs.GetObject('Select curve', rs.filter.curve)
lun = 56

if obj:
  while rs.CurveLength(obj) < lun:
    rs.EnableObjectGrips(obj, True)
    for i in range(1,4):
      point = rs.ObjectGripLocation(obj, i)
      point[1] = point[1] - .1
      rs.ObjectGripLocation(obj, i, point)
    rs.EnableObjectGrips(obj, False)

```

L’indentazione l’ho rifatta perche’ in quello che hai postato era andata persa …

EDIT

Ah, la Y dei CV diventa -6.90

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Febbraio 2018, 2:31pm UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/7 "2018-02-07T14:31:40Z")

</div>

> [@0904](#):
>
> ho provato anche inserendo “if rs.CurveLength(obj) \> lun: break” ma comunque mi si blocca

Infatti stamani il while funziona mah 🤔

> [@emilio](#):
>
> … Sicuro che raw\_input() funzioni negli script ?

scusa Emilio ieri essendo che non mi funzionava il while avevo cercato degli esempi per capire dove era lo sbaglio e c’erano un paio che usavano insieme il raw\_input ho letto che bisogna usarlo al posto di input. ma che differenza c’è tra questi due appena citati e getstring getinteger getreal?

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [7 Febbraio 2018, 2:45pm UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/8 "2018-02-07T14:45:50Z")

</div>

raw\_input() o input() li usi da console, da terminale o da finestra dos, o chiamala come vuoi … 😉  
Cioe’ quando usi Python fuori da Rhino, con un’interfaccia a caratteri.

Gli script per Rhino girano in un altro ‘ambiente’, qui abbiamo i metodi rs per ottenere l’input dall’utilizzatore.  
Credo sia meglio usare quelli.

( raw\_input() e’ per Python 2, input() per Python 3 )

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Febbraio 2018, 5:41pm UTC](https://it.discourse.mcneel.com/t/while-in-python/1443/9 "2018-02-07T17:41:19Z")

</div>

Grazie Emilio per la spiegazione.
