Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12057[/thread]

JavaScript in Perl übersetzen (Seite 3)

Leser: 2


<< |< 1 2 3 4 5 6 >| >> 53 Einträge, 6 Seiten
Nicki271
 2009-02-19 18:17
#119000 #119000
User since
2008-06-23
26 Artikel
BenutzerIn
[default_avatar]
Ok, ich habe es umbenannt in $zahl_a.

Aber wenn ich if ($zahl_a % $zahl_b == 0) schreibe.

Dann lautet die Ausgabe:
Geben Sie eine Zahl ein0

Ich dachte ich hätte es jetzt, aber irgendwas mache ich noch falsch.
renee
 2009-02-19 18:41
#119002 #119002
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nicki271+2009-02-19 16:37:32--
Aber
Code: (dl )
 if( $a%$b == 0 )
das kann ich ja so nicht schreiben. Was muss ich dann da machen?


Wer sagt das?

Hier mal basierend auf Deinem Code:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl

use strict;
use warnings;

print "Geben Sie eine Zahl ein","";

# mit <STDIN> liest Du eine Eingabe ein
my $a= <STDIN>;
my $b= 2;

chomp $a;

# überprüfe, ob es auch wirklich eine Zahl ist
if( not $a =~ /^\d+$/ ){
    print "ich habe Dir doch gesagt, Du sollst eine Zahl eingeben!!!!!!!\n";
    exit;
}

if( $a%$b == 0 ){
    print "gerade";
}
else{
    print "ungerade";
}


Aber Du solltest das mit den Variablennamen beachten (was GwenDragon gesagt hat)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Nicki271
 2009-02-20 10:19
#119022 #119022
User since
2008-06-23
26 Artikel
BenutzerIn
[default_avatar]
Ich gebe ja nicht auf, bis es klappt.
Hier mein neuer Versuch, ich hoffe ich nerve nicht zu sehr. :-(

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;

print "Geben Sie eine Zahl ein","";

my $zahl_a= <STDIN>;
my $zahl_b= 2;

chomp ($zahl_a);

if( $zahl_a%$zahl_b == 0 )
{
print"Das Ergebnis der Division von " + a + "
ergibt eine Nichtkommazahl.";
} else {
print "Das Ergebnis der Division von " + a + " durch 2
ergibt eine Kommazahl."; }



---
//Modedit Gwendragon: Bitte Code in Postings in Perl- oder Code-Tags stellen;
lies bitte mal http://board.perl-community.de/helptags/
---
Linuxer
 2009-02-20 12:02
#119033 #119033
User since
2006-01-27
3872 Artikel
HausmeisterIn

user image
Ich kommentiere mal in Deinem Code und versuche, Deinen Code als Basis zu behalten:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl

use strict;
use warnings;

# überflüssige Liste und Leerstring entfernt; dafür String geändert:
print "Geben Sie eine Zahl ein: ";

# Dateneingabe und Umbruch Entfernen kombiniert
chomp( my $zahl_a = <STDIN> );

my $zahl_b= 2;

if( $zahl_a%$zahl_b == 0 )   {

  # Strings werden mit '.' verknüpft, nicht mit '+'
  # ausserdem kann print Listen verarbeiten; das nutzen wir hier mal
  # und 'a' ist ein bareword; deine variable heisst doch $zahl_a
  # Umbruch eingefügt
  print"Das Ergebnis der Division von ", $zahl_a, "ergibt eine Nichtkommazahl.\n";
}
else {
  # s.o.
  print "Das Ergebnis der Division von ", $zahl_a, " durch 2 ergibt eine Kommazahl.\n"; 
}


edits:
Weitere Anmerkungen:

- Variablennamen wie "zahl_a" oder "zahl_b" sind ungünstig, weil sie nicht aussagen, was darin enthalten ist;
besser wären Namen wie "eingabe" für "zahl_a" und z.B. "teiler" für "zahl_b"

- Das if-Konstrukt ließe sich mit dem ternären Operator vereinfachen; So kann man sich auch die wiederholte Ausgabe eines festen Strings sparen; siehe: perlop#Conditional_Operator

Code (perl): (dl )
1
2
3
perl "Das Ergebnis für $eingabe ist eine ",
  ( $eingabe % $teiler == 0 ) ? 'ganze ' : '',
  "Zahl.\n";
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
nepos
 2009-02-20 12:08
#119034 #119034
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
if( $zahl_a%$zahl_b == 0 )
  {
print"Das Ergebnis der Division von " + a + "
               ergibt eine Nichtkommazahl.";
} else {
print "Das Ergebnis der Division von " + a + " durch 2
               ergibt eine Kommazahl."; }


Das klappt so nicht ganz wie gewollt:
Code: (dl )
1
2
3
4
perl -cw test.pl
Bareword "a" not allowed while "strict subs" in use at test.pl line 14.
Bareword "a" not allowed while "strict subs" in use at test.pl line 18.
test.pl had compilation errors.


Was du eigentlich willst ist:
Code (perl): (dl )
print "Das Ergebnis der Division von $zahl_a durch 2 ergibt eine Nichtkommazahl.\n";

Beim zweiten print dann analog. Einfache Skalare kannst du direkt in "" schreiben und Perl fügt den Wert dann ein.

Wenn du wirklich Zeichenketten aneinander hängen willst, dann geht das in Perl nicht mit + sondern mit .:
Code (perl): (dl )
my $string = "Das ist der erste Teil." . "Und hier kommt der Rest" . "\n";
Nicki271
 2009-02-20 15:49
#119044 #119044
User since
2008-06-23
26 Artikel
BenutzerIn
[default_avatar]
Vielen vielen Dank für eure Hilfe.
Habs geschafft. Es funktioniert. Eure Erklärung waren sehr hilfreich.

Ich versuche mich mal an der nächsten Aufgabe und wenn ich darf schreibe ich Sie hier herein und ihr könnt dann bitte gucken, ob ich das richtig gemacht habe??

Nicki
Nicki271
 2009-02-20 16:34
#119045 #119045
User since
2008-06-23
26 Artikel
BenutzerIn
[default_avatar]
Die nächste Aufgabe lautet:

Wenn der Inhalt der Variable "income" kleiner ist als 300, dann drucke "Mann das ist aber nicht grade viel Verdienst." Wenn der Inhalt der Variable "income" zwischen 300 und 100 liegt, dann drucke "Dein Verdienst schein ordentlich zu sein." Und wenn der Inhalt der Variable "income" über 1001 liegt dann drucke "Ey, kannst Du mir was leihen?"

Meine Lösung lautet:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use strict;
use warnings;

print "Geben Sie Ihren Verdienst ein:\n";

my $income = <STDIN>;
chomp($income);

if ($income < 300)
{
print "Mann das ist aber nicht gerade viel Verdienst.\n";}

elsif ($income >= 300 <=> 1000)
{
print "Dein Verdienst scheint ordentlich zu sein.\n";}

elsif ($income > 1001)
{
print "Ey, kannst du mir was leihen?\n";}

Das funktioniert auch - fast - denn wenn ich z.B. 2000 eingebe, dann kommt trotzdem die Antwort: Dein Verdienst scheint ordentlich zu sein.

Kann mir bitte jemand sagen, wo der Fehler liegt?
renee
 2009-02-20 17:07
#119046 #119046
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das hier ist falsch:
Code (perl): (dl )
elsif ($income >= 300 <=> 1000)


Denn was macht hier Perl?

Perl macht als erstes $income >= 300. Das Ergebnis ist "1". Dann macht Perl 1 <=> 1000. Das ist ein Vergleich, welche Zahl größer ist. Diese Operation liefert "-1" wenn die erste Zahl kleiner als die zweite Zahl ist, "0" wenn beide Zahlen gleich groß sind und "1" wenn die erste Zahl kleiner als die zweite Zahl ist. In diesem Fall (mit $income = 2000) ist das Ergebnis also "-1". Dein elsif überprüft also, ob "-1" "wahr" ist und das ist es...

Wenn Du überprüfen willst, ob eine Zahl zwischen zwei Zahlen ist, musst Du das so machen:
Code (perl): (dl )
if( $income >= 300 and $income < 1000 ){...}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Nicki271
 2009-02-20 17:14
#119047 #119047
User since
2008-06-23
26 Artikel
BenutzerIn
[default_avatar]
ah, ok.
Jetzt funktioniert es. Vielen dank.

Versuch mich dann mal mit der nächsten :-)
pq
 2009-02-20 17:20
#119048 #119048
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Nicki271+2009-02-20 15:34:10--
Wenn der Inhalt der Variable "income" kleiner ist als 300, dann drucke "Mann das ist aber nicht grade viel Verdienst." Wenn der Inhalt der Variable "income" zwischen 300 und 100 liegt, dann drucke "Dein Verdienst schein ordentlich zu sein." Und wenn der Inhalt der Variable "income" über 1001 liegt dann drucke "Ey, kannst Du mir was leihen?"

diese hausaufgabe ist echt beliebt.
google mal nach "das ist aber nicht gerade viel Verdienst"
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 4 5 6 >| >> 53 Einträge, 6 Seiten



View all threads created 2008-06-23 09:29.