VS Code Python kodu çalıştırırken hata veriyor

jayeby

Femtopat
Katılım
17 Temmuz 2021
Mesajlar
44
Daha fazla  
Cinsiyet
Erkek
Aldığım hata:
python3 : The term 'python3' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
* Neden olduğunu bilmiyorum bir çözümü var mıdır? python 3.9 bilgisayarda yüklü. PyCharm ve Visual Code üzerinde aynı olmasada hata veriyor.
PyCharm'da aldığım hata: AttributeError: module 'basic' has no attribute 'run'

(3 parça)Kod tamamen şudur:
basic.py
[CODE title="basic.py"]########################################
# IMPORTS
########################################

from string_with_arrows import *

########################################
# CONSTANTS
########################################

DIGITS = '0123456789'

########################################
# ERRORS
########################################
class Error:
def __init__(self, pos_start, pos_end, error_name, details):
self.pos_start = pos_start
self.pos_end = pos_end
self.error_name = error_name
self.details = details

def as_string(self):
result = f'{self.error_name}: {self.details}\n'
result += f'File {self.pos_start.fn}, line {self.pos_start.ln + 1}'
result += '\n\n' + string_with_arrows(self.pos_start.ftxt, self.pos_start)
return result

class IllegalCharError(Error):
def __init__(self, pos_start, pos_end, details):
super().__init__(pos_start, pos_end,'Illegal Character', details)

class InvalidSyntaxError(Error):
def __init__(self, pos_start, pos_end, details):
super().__init__(pos_start, pos_end, 'Invalid Syntax', details )

########################################
# POSITION
########################################

class Position:
def __init__(self, idx, ln, col, fn, ftxt):
self.idx = idx
self.ln = ln
self.col = col
self.fn = fn
self.ftxt = ftxt
def advance(self, current_char=None):
self.idx += 1
self.col += 1

if current_char == '/n':
self.ln += 1
self.col += 0

return self
def copy(self):
return Position(self.idx, self.ln, self.col, self.fn, self.ftxt)

########################################
# TOKENS
########################################



TT_INT = 'TT_INT'
TT_FLOAT = 'FLOAT'
TT_PLUS = 'PLUS'
TT_MINUS = 'MINUS'
TT_MUL = 'MUL'
TT_DIV = 'DIV'
TT_LPAREN = 'LPAREN'
TT_RPAREN = 'RPAREN'
TT_EOF = 'EOF'

class Token:
def __init__(self, type_, value=None, pos_start=None, pos_end=None):
self.type = type_
self.value = value

if pos_start:
self.pos_start = pos_start.copy()
self.pos_end = pos_start.copy()
self.pos_end.advance()

if pos_end:
self.pos_end = pos_end

def __repr__(self):
if self.value: return f'{self.type}:{self.value}'
return f'{self.type}'

########################################
# LEXER
########################################

class Lexer:
def __init__(self, fn, text):
self.fn = fn
self.text = text
self.pos = Position(-1, 0, -1, fn, text)
self.current_char = None
self.advance()

def advance(self):
self.pos.advance(self.current_char)
self.current_char = self.text[self.pos.idx] if self.pos.idx < len(self.text) else None

def make_tokens(self):
tokens = []

while self.current_char != None:
if self.current_char in ' /t':
self.advance()
elif self.current_char in DIGITS:
tokens.append(self.make_number())
elif self.current_char == '+':
tokens.append(Token(TT_PLUS, pos_start=self.pos))
self.advance()

elif self.current_char == '-':
tokens.append(Token(TT_MINUS, pos_start=self.pos))
self.advance()
elif self.current_char == '*':
tokens.append(Token(TT_MUL, pos_start=self.pos))
self.advance()
elif self.current_char == '/':
tokens.append(Token(TT_DIV, pos_start=self.pos))
self.advance()
elif self.current_char == '(':
tokens.append(Token(TT_LPAREN, pos_start=self.pos))
self.advance()
elif self.current_char == ')':
tokens.append(Token(TT_RPAREN, pos_start=self.pos))
self.advance()
else:
pos_start = self.pos.copy()
char = self.current_char
self.advance()
return [], IllegalCharError(pos_start, self.pos, "'" + char + "'")

tokens.append(Token(TT_EOF, pos_start=self.pos))
return tokens(None)

def make_number(self):
num_str = ''
dot_count = 0
pos_start = self.pos.copy()

while self.current_char != None and self.current_char in DIGITS + '.' :
if self.current_char == '.':
if dot_count == 1: break
dot_count += 1
num_str += '.'
else:
num_str += self.current_char
self.advance()

if dot_count == 0:
return Token(TT_INT, int(num_str), pos_start, self.pos)
else:
return Token(TT_FLOAT, float(num_str), pos_start, self.pos)

#######################################
# NODES
########################################

class NumberNode:
def __init__(self, tok):
self.tok = tok

def __repr__(self):
return f'{self.tok}'
class BinOpNode:
def __init__(self, left_node, op_tok, right_node):
self.left_node = left_node
self.op_tok = op_tok
self.right_node = right_node

def __repr__(self):
return f'({self.left_node}, {self.op_tok}, {self.right_node})'

########################################
# PARSE RESULT
########################################

class ParseResult:
def __init__(self):
self.error = None
self.node = None

def register(self, res):
if isinstance(res, ParseResult):
if res.error: self.error = res.error
return res.node

return res

def success(self, node):
self.node = node
return self

def failure(self, error):
self.error = error
return self

########################################
# PARSER
########################################

class Parser:
def __init__(self, tokens):
self.tokens = tokens
self.tok_idx = 1
self.advance()


def advance(self):
self.tok_tdx += 1
if self.tok_idx < len(self.tokens):
self.current_tok = self.tokens[self.tok_idx]
return self.current_tok

################################

def parse(self):
res = self.expr()
if not res.error and self.current_tok.type != TT_EOF:
return res.failure(InvalidSyntaxError(self.current_tok.pos_start, self.current_tok.pos_end, "Expected '+', '-', '*', or '/'"))
return res

################################

def factor(self):
res = ParseResult()
tok = self.current_tok


if tok.type in (TT_INT, TT_FLOAT):
res.register(self.advance())
return res.success(NumberNode(tok))

return res.failure(InvalidSyntaxError(tok.pos_start, tok.pos_end, "Expected int or float"))
def term(self):
return self.bin_op(self.factor, (TT_MUL, TT_DIV))

def expr(self):
return self.bin_op(self.term, (TT_PLUS, TT_MINUS))

def bin_op(self, func, ops):
res = ParseResult()
left = res.register(func())
if res.error: return res

while self.current_tok.type in ops:
op_tok = self.current_tok
res.register(self.advance())
right = res.register(func ())
if res.error: return res
left = BinOpNode(left, op_tok, right)

return res(left)

########################################
# RUN
########################################

def run(fn, text):
lexer = Lexer(fn, text)
tokens, error = lexer.make_tokens()
if error: return None, error

# Generate AST
parser = Parser(tokens)
ast = parser.parse()

return ast.node, ast.error [/CODE]
2. parça shell.py:
[CODE title="shell.py"]import basic

while True:
text = input('basic > ')
result, error = basic.run('<stdin>', text)

if error: print(error.as_string())
else: print(result)[/CODE]
3. Parça string_with_arrows.py:
[CODE title="string_with_arrows.py"]def string_with_arrows(text, pos_start, pos_end):
result = ''

# Calculate indices
idx_start = max(text.rfind('\n', 0, pos_start.idx), 0)
idx_end = text.find('\n', idx_start + 1)
if idx_end < 0: idx_end = len(text)

# Generate each line
line_count = pos_end.ln - pos_start.ln + 1
for i in range(line_count):
# Calculate line columns
line = text[idx_start:idx_end]
col_start = pos_start.col if i == 0 else 0
col_end = pos_end.col if i == line_count - 1 else len(line) - 1

# Append to result
result += line + '\n'
result += ' ' * col_start + '^' * (col_end - col_start)

# Re-calculate indices
idx_start = idx_end
idx_end = text.find('\n', idx_start + 1)
if idx_end < 0: idx_end = len(text)

return result.replace('\t', '')[/CODE]
 
Son düzenleyen: Moderatör:
python -m venv env. Bunu dene Windows Shell de.
At line:1 char:5
+ 545 645 +
+ ~~~
Unexpected token '645' in expression or statement.
At line:1 char:10
+ 545 645 +
+ ~
You must provide a value expression following the '+' operator.
At line:2 char:1
+ python -m venv env. shell.py
+ ~~~~~~
Unexpected token 'python' in expression or statement.
+ CategoryInfo : ParserError: :)) [], ParentContainsErrorRecor
dException
+ FullyQualifiedErrorId : UnexpectedToken

Bu hatayı verdi gene olmadı.
 
Denetim masası > Gelişmiş sistem ayarları > Ortam değişkenleri > PATH ortam değişkeni
Burada yeni sistem değişkeni oluştura basıp bilgisayarında Python programının yolunu yaz.
C:\Users\Username\AppData\Local\Programs\Python\Python39 gibi. Bunu kaydet. Bunları yaptıktan sonra terminale python --version yazıp hata veriyor mu bir bak. Aynı şeyi python yerine py yazarak da dene.
 
Denetim Masası > gelişmiş sistem ayarları > ortam değişkenleri > path ortam değişkeni
Burada yeni sistem değişkeni oluştura basıp bilgisayarında Python programının yolunu yaz.
C:\Users\Username\AppData\Local\Programs\Python\Python39 gibi. Bunu kaydet. Bunları yaptıktan sonra terminale python --version yazıp hata veriyor mu bir bak. Aynı şeyi Python yerine py yazarak da dene.

Değişken değeri diyor ne yazayım?
 

Yeni konular

Geri
Yukarı