Konwersja stringa w integer

0

Cześć
Jestem początkującym i natknąłem się na problem programując w pythonie
Przy tworzeniu pewnego programu chciałem stworzyć funkcje aby skrócić kod, ale gdy próbuję przekonwertować stringa na integer w funkcji coś się psuje
Robię mniej więcej coś takiego

cos = ""

def funkcja(argument):
    argument = print(input("Podaj argument: "))
    argument = int(argument)

funkcja(cos)

tylko przy tym zamiast zamianie "cos" w integer, "argument" próbuje się zamienić i wyskakuje błąd:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType

byłbym wdzięczny jeśli powiedziałby ktoś co mogę zrobić w tym przypadku, aby to co podaje do funkcji zamienialo sie w integer

Pozdrawiam

2
def funkcja(argument):

To jest bezsensu, żeby podawać do funkcji argument, którego i tak nie używasz, tylko łapiesz z inputa... W Pythonie możesz po prostu zmienną zadeklarować przez przypisanie np. argument = input("Podaj argument: ") tworzy zmienną. Nie musisz jej podawać w argumencie.

argument = print(input("Podaj argument: "))

niepotrzebny print.
input jednocześnie wyświetli ci "Podaj argument: " i odbierze to, co napisałeś i zwróci ci stringa. Jednak jeśli podasz tego stringa do funkcji print, to już go nie masz w zasadzie, bo zostanie przekazany do funkcji print, a print nic ci nie zwróci, czyli None.

Czyli wywal printa:

argument = input("Podaj argument: ")

i to jeden problem. Drugi problem, że nie zawsze da się przekonwertować stringa na liczbę. Np.

 argument = int("kotek")

rzuci ci wyjątkiem. Możesz go złapać i przypisać domyślną liczbę:

def funkcja():
    argument = input("Podaj argument: ")
    try: 
        argument = int(argument)
    except:
        argument = 0
    print("argument", argument)

funkcja()

0
LukeJL napisał(a):
def funkcja(argument):

To jest bezsensu, żeby podawać do funkcji argument, którego i tak nie używasz, tylko łapiesz z inputa... W Pythonie możesz po prostu zmienną zadeklarować przez przypisanie np. argument = input("Podaj argument: ") tworzy zmienną. Nie musisz jej podawać w argumencie.

argument = print(input("Podaj argument: "))

niepotrzebny print.
input jednocześnie wyświetli ci "Podaj argument: " i odbierze to, co napisałeś i zwróci ci stringa. Jednak jeśli podasz tego stringa do funkcji print, to już go nie masz w zasadzie, bo zostanie przekazany do funkcji print, a print nic ci nie zwróci, czyli None.

Czyli wywal printa:

argument = input("Podaj argument: ")

i to jeden problem. Drugi problem, że nie zawsze da się przekonwertować stringa na liczbę. Np.

 argument = int("kotek")

rzuci ci wyjątkiem. Możesz go złapać i przypisać domyślną liczbę:

def funkcja():
    argument = input("Podaj argument: ")
    try: 
        argument = int(argument)
    except:
        argument = 0
    print("argument", argument)

funkcja()

tylko że mi chodzi o to aby temu argumentowi którego podajesz do funkcji przypisać wartosc za pomocą inputa i tą wartosc zamienic na integer, wiec musi byc argument bo chce tej funkcji uzyc do kilku rzeczy

2

Twoja funkcja może przecież zwracać wartość przez return

def funkcja():
    argument = input("Podaj argument: ")
    try: 
        return int(argument)
    except:
        return 0

cos = funkcja()
print(cos)

tylko że mi chodzi o to aby temu argumentowi którego podajesz do funkcji przypisać wartosc za pomocą inputa i tą wartosc zamienic na integer

Tylko, że zmienisz w ten sposób tylko lokalną zmienną o nazwie argument, a nie zmienisz w ten sposób zmiennej cos, bo to inna zmienna jest.

0

Tu jest pewne niedociągnięcie nie da się skonwertować stringa na inta, znaczy da się, ale to głupie, chodziło ci o sparsowanie stringa.
Konwersja stringa na int da ci z "1234" na 0x31323334 co da ci liczbę 825373492,, a sparsowanie ze stringa "1234" na int da ci 1234.
Parsowanie możesz zrobić np. tak int("1234", 10).
A konwersję to każdy bajt stringa po prostu traktujesz jako liczbę 1bajtową i 4 znaki dają ci liczbę 4 bajtową.

Delikatna różnica, ale kompletnie inne to ma znaczenie.

1
Astrexiak napisał(a):

wiec musi byc argument bo chce tej funkcji uzyc do kilku rzeczy

To nie musi być dobra ścieżka ...
Tak wpadłem na chwilę w wątek ... różnych rzeczy możesz chcieć, być może funkcje podzielić ... trudno powiedzieć na tak mgliste określenie.

Sprawdzianem, czy zamysł na funkcje jest dobry, jest dobra nazwa. Na tym etapie przyjmijmy że to czasownik, wyraziście mówiący co funkcja robi (i czego nie robi).
Nie da się ukryć, że nazwa funkcji funkcja to zła nazwa

Gdybyś zachował swój zamiar, ale chciał urobić nazwę funkcji, by powstał koszmarek zrob_to_oraz_tamto(arg)

2

Wydaje mi się że OP chciał:

def funkcja(propt):
    return int(input(propt))

cos = funkcja("Podaj cos: ")

aczkolwiek to bez sensu kiedy można od razu:

cos = int(input("Podaj cos: "))

A może to chciał:

def inputbyname(name):
    globals()[name]=int(input("Podaj %s: " % name))

inputbyname("A")
inputbyname("B")
inputbyname("C")
print(A,B,C);

?

1 użytkowników online, w tym zalogowanych: 0, gości: 1