• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak uruchomić Pythona w Pycharm?

Object Storage Arubacloud
0 głosów
1,319 wizyt
pytanie zadane 17 czerwca 2020 w Python przez osobliwy nick Użytkownik (900 p.)

Zainstalowałem Pythona 2.7 i PyCharm. Mam działający kod i komendę, która go uruchamia w konsoli. Tyle, że wszystko działa jedynie w internetowym interpreterze. W konsoli dostaję komunikat:

File "<input>", line 1
    python Collatz.py 13 8 7 3 -2
                 ^
SyntaxError: invalid syntax

Czy ktoś wie co jest nie tak? Mam pokazać cały kod? Nie mam jakichś bibliotek? Żaden internetowy poradnik dla początkujących, jak to zwykle bywa, nie przewiduje podobnych problemów, pomimo, że jestem pewien, że to jakiś podstawowy problem.

komentarz 17 czerwca 2020 przez VBService Ekspert (254,630 p.)
Pokaż Swój kod. Syntax Error, oznacz, że źle zapisałeś jakieś polecenie, albo zrobiłeś literówkę, albo nie zrobiłeś wcięcia, albo zapomniałeś wstawić klamrę (nawias) itp.
Jak słusznie zauważyłeś pewnie to jest jakiś banalny błąd.
komentarz 17 czerwca 2020 przez osobliwy nick Użytkownik (900 p.)
edycja 17 czerwca 2020 przez osobliwy nick

 Uruchamiamy to komendą przykładowo: python Collatz.py '[1,2,3]' 10 1


import time

from sys import argv

keys=eval(argv[1]) # list of function selectors aka the key
r=len(keys) # nmbr rounds implied by keys
bo=int(argv[2]) # nmbr of bits out
pt=int(argv[3]) # the plaintext

parms=[-7,-5,-3,3,5,7]
rf=[(parms[i/6],parms[i%6],2) for i in
range(36)]+[(parms[i/6],parms[i%6],-2) for i in range(36)]

#for i in range(72):
         #print i,":",rf[i]


def reverse_block(x, nmbrbits):
         s=0
         for i in range(nmbrbits):
                 s+=2**(nmbrbits-i-1)*((x>>i)%2)
         return s

def genf(a,b,c):
         def f(x):
                 if x % 2 == 1:
                         return ((x * a + b)/2,1)
                 return (x/c,0)
         return f

def round(s,a,b,c,n):
         print s
         f=genf(a,b,c)
         o=0
         #print s,'-->',
         for i in range(0,n):
                 (s,ct)=f(s)
                 o+=ct*2**i
                 #print s,'(',ct,')',
         #print
         return reverse_block(o,n)

def encrypt(pt,r,keys):
         ct = pt
         for i in range(r):
                 (a,b,c)=rf[keys[i]]
                 ct=round(ct,a,b,c,bo)
         return ct

start=time.time()

print encrypt(pt,r,keys)

end=time.time()

a=end-start
print (a)

Jeśli to samo wrzucimy sobie tutaj:

https://repl.it/languages/python

I uruchomimy komendą python main.py '[1,2,3]' 10 1, to wszystko działa.

komentarz 17 czerwca 2020 przez draghan VIP (106,230 p.)

@osobliwy nick, pokaż proszę screena z okienka spod menu "Run/Edit Configurations".

komentarz 18 czerwca 2020 przez osobliwy nick Użytkownik (900 p.)
Gdzie to jest?
komentarz 18 czerwca 2020 przez VBService Ekspert (254,630 p.)

Po poprawieniu drobnego błędu i jednego błędu wynikającego z tego, że używam wersji 3.8, który nie jest błędem składni w 2.7, u Mnie działa.

Moja rada to, uaktualnij swoją wersję.

komentarz 18 czerwca 2020 przez osobliwy nick Użytkownik (900 p.)
Tylko, że kod mam w Pythonie 2, a jeszcze nie umiem go dostosować do wersji Python 3. Zacząłem trochę od końca, bo kod mi napisał ktoś inny, a ja próbuję go zrozumieć i modyfikować, dlatego to zamieszanie (wiem dokładnie co za algorytm wykonuje kod, tyle, że nie wszystko w kodzie rozumiem). Przy okazji ogarniam podstawy Pythona i docelowo chcę się uczyć wersji 3, ale muszę pracować jeszcze chwilę na tym kodzie, dopóki nie nauczę się go zaadoptować do wersji 3.
komentarz 18 czerwca 2020 przez VBService Ekspert (254,630 p.)

Zobacz w internecie co oznacza ten, błąd (podkreślenie na czerwono) i jak go można poprawić i zadziała.

komentarz 18 czerwca 2020 przez osobliwy nick Użytkownik (900 p.)
edycja 18 czerwca 2020 przez osobliwy nick

Kompletnie nie rozumiem ani jednego wątku na ten temat z Internetu. To co wywnioskowałem na własną rękę, to fakt, że być może Python czyta to

(parms[i / 6], parms[i % 6], 2) for i in range(36)"

jako string. Ale gdyby tak było, to nie wypisywałby tego jako listy liczb.

for i in range(72):
print i,":",rf[i]

Widać, że to są to liczby i Python rozumie i interpretuje, że są to liczby (internetowy interpreter). Więc to raczej nie jest dobry trop. Może jakiś nawias lub brak jakiegoś znaku sugeruje, że jest to lista stringów, a nie liczb (liczba też może być stringiem chyba). Nie wiem jak to sprawdzić, ale pewnie okaże się, że również nie w tym problem.

komentarz 18 czerwca 2020 przez osobliwy nick Użytkownik (900 p.)

Błąd był w poleceniu. Tam były apostrofy, co czyniło stringa z komendy:

Collatz.py '[1,2,3]' 10 1

A powinno być:

 Collatz.py [1,2,3] 10 1

Czyli już działa. Swoją drogą dlaczego w internetowym interpreterze ta pierwsza komenda działa?

1 odpowiedź

0 głosów
odpowiedź 17 czerwca 2020 przez MsMaciek123 Pasjonat (24,760 p.)

Zamiast uruchamiać terminal, uruchamiasz interpreter pythona (tzn. Python Console)

​​​​​​

Upewnij się że otwierasz Terminal 

komentarz 18 czerwca 2020 przez osobliwy nick Użytkownik (900 p.)

Tak, uruchamiałem Python Console i nawet nie wiem na czym polega różnica. W terminalu nie dało się niczego wpisać, więc stwierdziłem, że trzeba użyć Python Console. Ale teraz nagle da się już coś wpisać. Uruchomiłem to i mam:

Traceback (most recent call last):
  File "C:\Users\omnia\PycharmProjects\untitled\Collatz.py", line 58, in <module>
    print encrypt(pt, r, keys)
  File "C:\Users\omnia\PycharmProjects\untitled\Collatz.py", line 51, in encrypt
    (a, b, c) = rf[keys[i]]
TypeError: list indices must be integers, not str
 

 

Podobne pytania

0 głosów
1 odpowiedź 599 wizyt
pytanie zadane 24 kwietnia 2020 w Python przez Kubs Mądrala (5,190 p.)
0 głosów
0 odpowiedzi 411 wizyt
pytanie zadane 5 kwietnia 2023 w Python przez Jakub005 Początkujący (310 p.)
0 głosów
1 odpowiedź 282 wizyt
pytanie zadane 15 czerwca 2022 w Python przez pita Nowicjusz (180 p.)

92,698 zapytań

141,614 odpowiedzi

320,144 komentarzy

62,058 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...