python %

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Oltronix
Inlägg: 467
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

python %

Inlägg av Oltronix »

Jag vet inte vad operatorn/funktionen % heter men nedan fungerar ej för mig

Kod: Markera allt

html ="""    <div class="col-sm-8 col-md-2">
      <div class="box">
        <a href="./bilder/ %s target="_blank">
          <img src="./bilder/ %s alt="Lights" style="width:100%">\n\
          <div class="caption">
            <p>
"""
html = html % ("A", "B")
$python3 pp2.py
ger föjande felutskrift

Kod: Markera allt

Traceback (most recent call last):
  File "/home/erik/Bilder/Bootstrap/JD-AL/new-sw/pp2.py", line 8, in <module>
    html = html % ("A", "B")
TypeError: not enough arguments for format string
Jag testat med lite olika varianter men inget fungerar.
H.O
Inlägg: 5913
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: python %

Inlägg av H.O »

Ingen stjärna på Python här.
Jag trodde %-tecknet var modulo-operatorn? Dvs 10 % 4 = 2 medan det i ditt fall ser ut som du försöker göra någon form av sträng-operation.

Vad försöker du göra?
Användarvisningsbild
pi314
Inlägg: 8015
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: python %

Inlägg av pi314 »

Exakt!

Modulooperatorn ska ha två heltal som argument.
Resultatet är resten vid division.

Exempel.

Kod: Markera allt

remainder = 7 % 3
print(remainder)
Ger: 1

Eftersom 7/3 = 2, resten = 1, i heltalsaritmetik.

guckrum
Inlägg: 1908
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: python %

Inlägg av guckrum »

Ser ut som att du vill byta ut "%s" mot "A" osv, men du har också "%" i strängen som måste escapas.

Byt ut det mot en f-string (googla).
guckrum
Inlägg: 1908
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: python %

Inlägg av guckrum »

Detta är ett sätt.

Kod: Markera allt

A = 'apa'
B = 'banan'

html = f"""    <div class="col-sm-8 col-md-2">
      <div class="box">
        <a href="./bilder/ {A} target="_blank">
          <img src="./bilder/ {B} alt="Lights" style="width:100%">\n\
          <div class="caption">
            <p>
"""
guckrum
Inlägg: 1908
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: python %

Inlägg av guckrum »

Och detta är ett annat

Kod: Markera allt

html = """    <div class="col-sm-8 col-md-2">
      <div class="box">
        <a href="./bilder/ {A} target="_blank">
          <img src="./bilder/ {B} alt="Lights" style="width:100%">\n\
          <div class="caption">
            <p>
"""

html.format(A = 'apa',B = 'banan')
Användarvisningsbild
Oltronix
Inlägg: 467
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python %

Inlägg av Oltronix »

Jag använde den senaste varianten.
html.format(A = 'apa',B = 'banan')
Tack!
Användarvisningsbild
Oltronix
Inlägg: 467
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python %

Inlägg av Oltronix »

Här är W3 formatsida. Längst ner på sidan finns det guckrum förslog och jag använder. F-Strings verkar vara lite gammalt. String format() verkar mordernare.
https://www.w3schools.com/python/python ... atting.asp

Här formatet jag försökte använda men inte fick till
https://www.geeksforgeeks.org/python/st ... in-python/
Användarvisningsbild
rvl
Inlägg: 6933
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: python %

Inlägg av rvl »

Problemet med den ursprungliga koden är:
"width:100%"
escapera det procenttecknet till:
"width:100%%"
hela koden (med print):

Kod: Markera allt

html ="""    <div class="col-sm-8 col-md-2">
      <div class="box">
        <a href="./bilder/ %s target="_blank">
          <img src="./bilder/ %s alt="Lights" style="width:100%%">\n\
          <div class="caption">
            <p>
"""
html = html % ("A", "B")
print(html)
resultat:

Kod: Markera allt

    <div class="col-sm-8 col-md-2">
      <div class="box">
        <a href="./bilder/ A target="_blank">
          <img src="./bilder/ B alt="Lights" style="width:100%">
          <div class="caption...
\n\
är onödigt inom trippelcitaten och kan tas bort.
guckrum
Inlägg: 1908
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: python %

Inlägg av guckrum »

f-strings är en rekommenderad metod, gå gärna direkt till källan istf någon annans tolkning av den: https://docs.python.org/3/tutorial/inputoutput.html. Om det är gammalt eller modernt kan ha betydelse för bakåtkompatibilitet, fundera på om det är en viktig aspekt här.

Felet du hade ger Python en bra ledtråd till när den säger "not enough arguments for format string". Du formatterar en sträng och har TVÅ argument. Varje argument skall motsvaras av ett procenttecken i strängen, och man kan räkna till TRE av dem. Det går inte ihop, därför blir det stopp.
Användarvisningsbild
Oltronix
Inlägg: 467
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python %

Inlägg av Oltronix »

>Om det är gammalt eller modernt kan ha betydelse för bakåtkompatibilitet, fundera på om det är en viktig aspekt här.
Point taken.
Användarvisningsbild
Oltronix
Inlägg: 467
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python %

Inlägg av Oltronix »

rvl skrev: 22 juli 2025, 04:05:10 Problemet med den ursprungliga koden är:
"width:100%"
escapera det procenttecknet till:
"width:100%%"
Tack för det. Jag såg inte %-teckenet i 100%. Jag var jätteförvirrad och försökte med det ena och andra för att lösa felet

Sedan är det frågan vilket sätt man väljer. Jag har bara sett små fördelar/nackdelar med de olika sätten. guckrum har bakåtkompatibilitet-argmuentet för F-Strings
En stilla undra är varför det finns olika 3st sätt. jaja det finns även ett 4e sätt. Jag hade först ett antal strängar som jag på slutet slog samma. Såg mkt fult ut och svåröverskådligt.
guckrum
Inlägg: 1908
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: python %

Inlägg av guckrum »

Ett fjärde är att konkatenera ihop strängen själv typ "text" + A + "mer text".

Det är det här med pragmatism. Ett sätt räcker såklart, och idealt skall man bara ha ett. Men vilket man än väljer så kommer det inte att passa som handen i handsken i alla upptänkliga fall.

F-strängar kräver egentligen minst ansträngning, eftersom Python evaluerar det som står inom krullarna och stoppar in den motsvarande strängen direkt, så inga konverteringar eller mappningar behövs. Använder jag själv f-strängar hela tiden? Nej, det kan jag inte påstå...
Användarvisningsbild
Oltronix
Inlägg: 467
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: python %

Inlägg av Oltronix »

>Ett fjärde är att konkatenera ihop strängen själv typ "text" + A + "mer text
Precis så gjorde jag i början. Jag hade 5 fasta strängar och 2 variabla. Det fungerar men rörigt och knepigt att uppdatera.
Skriv svar